Startseite
  • » Home
  • » Handbuch & FAQ
  • » Forum
  • » Übersetzungsserver
  • » Suche
Startseite › Forum › Drupalcenter.de › Anfängerfragen ›

[gelöst] Datenbankanfragen richtig stellen

Eingetragen von SandraNetthoefel (110)
am 25.10.2013 - 17:08 Uhr in
  • Anfängerfragen
  • Drupal 7.x oder neuer

Hallo liebe Drupalprofis,

ich quäle mich seit geraumer Zeit damit eigene Datenbankanfragen in Drupal zu formulieren. Ziel ist es den Titel eines Nodes nach einem bestimmten Schema zu vergeben.
Ich habe dazu das Modul Profil2 im Einsatz und darin ein Profil generell generiert in dem sich das Feld Startnummer befindet.
Dann habe ich das Modul Automatic Nodetitle um den Titel des Nodes zu überschreiben.

Zunächst habe ich dann erst einmal den Titel immer um eins erhöht:

$data = db_query("SELECT MAX(nid) FROM {node}")->fetchCol();
$nid = sprintf("%03d", $data[0] + 1);
return $nid;

Funktioniert! Aber nun möchte ich ja die Startnummer aus dem Profil bekommen. Habe mir nun einen View erstellt und mir dort die DB-Anfrage angesehen, aber ich komme damit
nicht weiter: SELECT profile.pid AS pid, 'profile2' AS field_data_field_generell_start_profile2_entity_type FROM {profile} profile WHERE (( (profile.type IN ('generell')) )) LIMIT 1 OFFSET 0.
Das sollte ja nun zumindest eine Startnummer ausgeben, wenn auch nicht unbedingt die für den einen user - Fehlanzeige. Mir fehlt das Verständnis für den Aufbau der Datenbank.
Gibt es da nicht irgendwie eine Anleitung? Ein Schema nach dem man arbeiten kann?

Für Hilfe wäre ich wie immer sehr dankbar!

Viele Grüße Sandra

‹ Verlinkung [gelöst] Datenbankanfragen richtig stellen ›
  • Anmelden oder Registrieren um Kommentare zu schreiben

Hilfe?

Eingetragen von SandraNetthoefel (110)
am 27.10.2013 - 18:42 Uhr

Das Problem scheint schwieriger zu sein oder meine Frage ist einfach dumm oder falsch gestellt.
Nun ja, ich habe mir die Datenbank genauer angesehen und eine Tabelle field_generell_start gefunden
in deren Feld field_data_field_generell_start die gewünschte Nummer drin steht. Also:

$data = db_query("SELECT field_generell_start_value FROM field_data_field_generell_start WHERE ????;")->fetchCol();

???? = wie sind diese Daten in irgendeiner Weise mit einer user_id verknüpft? Die Felder entity_id und revision_id helfen
mir da irgendwie nicht weiter.

  • Anmelden oder Registrieren um Kommentare zu schreiben

Es gibt keine dumme

Eingetragen von leda.ch (977)
am 27.10.2013 - 19:22 Uhr

Es gibt keine dumme Fragen.
Ich vermute, Du kriegst keine Antwort, weil Dein Ansatz soviele Dinge durcheinanderwirft. Im Grundsatz solltest Du in Drupal eigentlich nie selber eine DB-Anfrage selber machen müssen, weil es für fast alles ein eigenes Modul gibt. Ansonsten schreibst Du ein eigenes Modul, das ist aber wieder ein anderes Thema.

Zu Deinem aktuellen Problem: Ich habe mal nach "drupal node increment serial" gegoogelt. Unter anderem ist das da rausgekommen, was mir ziemlich zielführend erscheint.

  • Anmelden oder Registrieren um Kommentare zu schreiben

Das dürfte...

Eingetragen von SandraNetthoefel (110)
am 27.10.2013 - 19:53 Uhr

...mein Problem nicht lösen. Es geht mir ja nicht nur darum, dass ich für jeden Node einzeln einen Counter haben möchte
(das würde meine erste DB-Anfrage oben lösen), sondern dass der Benutzer einen Startwert im Profil festlegen kann und
dieser dann in einem _anderen_ Inhaltstypen übernommen wird. Außerdem wird der Wert nicht einfach um eins erhöht,
sondern nach einem bestimmtem Schema.

  • Anmelden oder Registrieren um Kommentare zu schreiben

dann wirst du an einem eigene Modul

Eingetragen von ronald (3857)
am 27.10.2013 - 23:58 Uhr

Nicht vorbeikommen.

Je nachdem wie gut du in php und speziell in Drupal zu Hause bist, kann das etwas länger dauern.

  • Anmelden oder Registrieren um Kommentare zu schreiben

SandraNetthoefel schrieb Ziel

Eingetragen von glycid (921)
am 28.10.2013 - 12:20 Uhr
SandraNetthoefel schrieb

Ziel ist es den Titel eines Nodes nach einem bestimmten Schema zu vergeben.

Könntest Du das Schema bitte mal genauer erläutern? Am besten, Du erklärst mal im Ganzen, was Du erreichen möchtest. Eventuell brauchst Du gar keinen Query selber bauen.

  • Anmelden oder Registrieren um Kommentare zu schreiben

Schema

Eingetragen von SandraNetthoefel (110)
am 28.10.2013 - 20:58 Uhr

Hallo,

das ist die Anforderung an die Kundennummer:

Vergabe einer Kundennummer: 1000131 der nächste dann 1000132
der hundertste 1010130
13 ist das Jahr, als nächstes Jahr 14
Die 1 vorne ist eine Konstante
die Konstante setzen wir dann auf 2 wenn die Nummerierung verbraucht ist

Muss nicht genauso sein, geht auch ähnlich.

Viele Grüße Sandra

  • Anmelden oder Registrieren um Kommentare zu schreiben

eine etwas gewöhnungsbedürftige Logik

Eingetragen von ronald (3857)
am 28.10.2013 - 21:07 Uhr

Müsste aber realisierbar sein.

Der Witz ist jedoch, wo wird die laufende Nummer verwaltet?

Da reicht ein Zähler und dann eine Funktion (ein Modul), die den Zählerstand zerlegt und das Jahresdatum einschießt.

Das ist ein Dreizeiler.

  • Anmelden oder Registrieren um Kommentare zu schreiben

Irgendwie erschließt sich mir

Eingetragen von glycid (921)
am 29.10.2013 - 09:27 Uhr

Irgendwie erschließt sich mir der Zusammenhang zwischen dieser "Startnummer", der Kundennummer und dem Node, dessen Title offenbar programmatisch gesetzt werden soll, nicht wirklich.

Um aber an die Startnummer zu kommen, gibt diverse Möglichkeiten.

1. Custom Query: Eine Abfrage von einer Tabelle allein macht natürlich keinen Sinn. Du musst die Tabelle(n) finden, wo die Entity ID aus field_data_field_generell_start mit einer uid verknüpft sind, diese joinen und die entsprechende(n) WHERE Klausel(n) formulieren. (Würde jetzt am ehesten die Profile 2 Tabellen vermuten) Und wenn Du schon eigene Query's baust, dann bitte die Drupal DB API nutzen.

2. Mit Views ist das kein Problem. Wenn das bei Dir nicht klappt, ist die View falsch konfiguriert.

3. Das P2 Profile liegt in Drupal als Objekt vor. In einem custom Module kannst Du das via $obj->field_startnummer['und'][0]['value'] (Beispiel) holen und weiterverarbeiten. Das Devel Module zeigt Dir alle Elemente des Objekts genau. Mit mit field_get_items() kommst Du ebenfalls ran. Die Variante mit dem custom Module würde ich, wie ronald auch, favorisieren, da der Startwert ja ohnehin weiterverarbeitet werden muss.

  • Anmelden oder Registrieren um Kommentare zu schreiben

Eigenes Modul...

Eingetragen von SandraNetthoefel (110)
am 29.10.2013 - 10:42 Uhr

Ein eigenes Modul habe ich natürlich noch nie gebaut. Ich denke ich werde mir erst einmal die genannten Module ansehen.
Vielleicht erschließt sich mir das ja dann Schritt für Schritt. Der Zusammenhang zwischen Startnummer im Profil2 und
Kundennummer ist im Prinzip nur, dass der Benutzer sagen kann, dass man erst bei 100 anfängt.

Vielen Dank erst einmal,
ich schaue mir mal an, ob ich mit der DB API weiterkomme.

  • Anmelden oder Registrieren um Kommentare zu schreiben

Zitat:Eventuell brauchst Du

Eingetragen von 1kubik (903)
am 29.10.2013 - 17:32 Uhr

[EDIT] ..ups... hab das Posting nicht korrekt gelesen...
meine ANtwort passt hier garnicht ..:)
insbesondere wegen derAnforderung an der Formstierung

Zitat:

Vergabe einer Kundennummer: 1000131 der nächste dann 1000132
der hundertste 101013

Ich würde behaupten, das das mit Rules machbar ist
[/EDIT]

########## meine vorherige Antwort ##########

Zitat:

Eventuell brauchst Du gar keinen Query selber bauen.

ja genau, das würde ich auch sagen!

Wenn du das Feld field_generell_start
in dem Profil des Users angelegt hast,
der User das Feld auch befüllen kann,
egal in welchem Schema,
dann kannst du das in Views auch in der Ausgabe
mit dem Titel zusammen setzen,
wenn Du die eben als Felder ausgibst,
sind diese auch als Token ("Ersetzungsmuster")
verfügbar, und per "Rewrite Output" kannst du
die beiden verbinden:

<?php

[field_generell_start] -- [title]
?>

oder du löst das per Theme

vg
stef

  • Anmelden oder Registrieren um Kommentare zu schreiben

Token in PHP richtig nutzen

Eingetragen von SandraNetthoefel (110)
am 24.11.2013 - 21:07 Uhr

Hallo noch einmal,

ich habe mir das alles noch einmal angesehen und mir steht das Feld an sich als Token zur Verfügung:

Knr.-Start [current-user:profile-generell:field_generell_start] Feld Ganze Zahl.
Knr.-Start [current-user:profile-generell:field-generell-start] Feld "field_generell_start"

Wie greife ich aber per PHP darauf zu? Mit return '[current-user:profile-generell:field_generell_start]'; komme ich da nicht weiter.

Vielen Dank für eure Hilfe

  • Anmelden oder Registrieren um Kommentare zu schreiben

Was funktioniert ist...

Eingetragen von SandraNetthoefel (110)
am 25.11.2013 - 17:00 Uhr

Es funktioniert, wenn ich folgendes nutze:

<?php
$nid
= [current-user:profile-generell:field_generell_start];
return
$nid;
?>

Hatte wahrscheinlich etwas mit einem fehlenden Update zu tun, denn ich bin fest überzeugt das gestern schon 2-3 mal
probiert zu haben. Aber eine Manipulation a la [current-user:profile-generell:field_generell_start] = [current-user:profile-generell:field_generell_start] + 1;
funktioniert nicht. Da müsste ich wieder auf die DB zugreifen?!

  • Anmelden oder Registrieren um Kommentare zu schreiben

Es funktioniert mit Rules...

Eingetragen von SandraNetthoefel (110)
am 26.11.2013 - 11:23 Uhr

Tatsächlich konnte ich die Datenmanipulation nun mit Rules lösen. Etwas seltsam ist, dass das Feld unter "Daten" nicht auftaucht,
ich es aber manuell angeben kann.

Lieben Dank an alle die einen Ansatz geliefert haben und mich so zur richtigen Lösung hingeleitet haben.

  • Anmelden oder Registrieren um Kommentare zu schreiben

Benutzeranmeldung

  • Registrieren
  • Neues Passwort anfordern

Aktive Forenthemen

  • Лучший сервис для продвижения сайта
  • für drupal11 ein Slider Modul
  • [gelöst] W3CSS Paragraphs Views
  • Drupal 11 neu aufsetzen und Bereiche aus 10 importieren
  • Wie erlaubt man neuen Benutzern auf die Resetseite zugreifen zu dürfen.
  • [gelöst] Anzeigeformat Text mit Bild in einem Artikel, Drupal 11
  • Social Media Buttons um Insteragram erweitern
  • Nach Installation der neuesten D10-Version kein Zugriff auf Website
  • Composer nach Umzug
  • [gelöst] Taxonomie Begriffe zeigt nicht alle Nodes an
  • Drupal 11 + Experience Builder (Canvas) + Layout Builder
  • Welche KI verwendet ihr?
Weiter

Neue Kommentare

  • melde mich mal wieder, da ich
    vor 5 Tagen 22 Stunden
  • Hey danke
    vor 6 Tagen 17 Stunden
  • Update: jetzt gibt's ein
    vor 1 Woche 11 Stunden
  • Hallo, im Prinzip habe ich
    vor 1 Woche 4 Tagen
  • Da scheint die Terminologie
    vor 1 Woche 5 Tagen
  • Kannst doch auch alles direkt
    vor 2 Wochen 2 Tagen
  • In der entsprechenden View
    vor 2 Wochen 2 Tagen
  • Dazu müsstest Du vermutlich
    vor 2 Wochen 2 Tagen
  • gelöst
    vor 4 Wochen 5 Tagen
  • Ja natürlich. Dass ist etwas,
    vor 4 Wochen 6 Tagen

Statistik

Beiträge im Forum: 250234
Registrierte User: 20450

Neue User:

  • Grantbor
  • Mroppoofpaync
  • 4aficiona2

» Alle User anzeigen

User nach Punkten sortiert:
wla9461
stBorchert6003
quiptime4972
Tobias Bähr4019
bv3924
ronald3857
md3717
Thoor3678
Alexander Langer3416
Exterior2903
» User nach Punkten
Zur Zeit sind 0 User und 6 Gäste online.

Hauptmenü

  • » Home
  • » Handbuch & FAQ
  • » Forum
  • » Übersetzungsserver
  • » Suche

Quicklinks I

  • Infos
  • Drupal Showcase
  • Installation
  • Update
  • Forum
  • Team
  • Verhaltensregeln

Quicklinks II

  • Drupal Jobs
  • FAQ
  • Drupal-Kochbuch
  • Best Practice - Drupal Sites - Guidelines
  • Drupal How To's

Quicklinks III

  • Tipps & Tricks
  • Drupal Theme System
  • Theme Handbuch
  • Leitfaden zur Entwicklung von Modulen

RSS & Twitter

  • Drupal Planet deutsch
  • RSS Feed News
  • RSS Feed Planet
  • Twitter Drupalcenter
Drupalcenter Team | Impressum & Datenschutz | Kontakt
Angetrieben von Drupal | Drupal is a registered trademark of Dries Buytaert.
Drupal Initiative - Drupal Association