Startseite
  • » Home
  • » Handbuch & FAQ
  • » Forum
  • » Übersetzungsserver
  • » Suche
Startseite › Forum › Drupalcenter.de › Allgemeines zu Drupal ›

Ergebnis-Daten benutzerbezogen eintragen

Eingetragen von sepp68 (444)
am 28.07.2008 - 14:06 Uhr in
  • Allgemeines zu Drupal
  • Drupal 5.x

Hallo erstmal...

ich habe für unseren Sportverein mit Drupal eine neue WebSeite aufgesetzt.
Soweit komme ich super damit klar.
Benutzer mit Profil-Feldern angelegt, importiert... alles ok
Inhaltstyp "Termin" angelegt, Termine importiert....alles ok

Nun mein "Problem":

Da wir ja nun an fast jedem "Termin" ein Turnier veranstalten, sollen die Ergebnisse natürlich eingegeben werden.

dh. Neuer Inhaltstyp "Ergebnisverwaltung" mit Auswahl(DropDown)-Feldern "User Reference" und "Termin", und Texteingebe-Feld "Ergebnis" angelegt.

Soweit so gut. Geht auch. Ich möchte aber:

- Den Benutzer "UserReference" nicht über den Benutzernamen sondern über das Profil-Feld "Mitgliedsnummer" auswählen können
- Das DropDown-Feld "Termin" filtern und sortieren (z.B. nur Termine in 2008)
- Keine Titel für diesen Node eingeben müssen.

Ich hoffe ich habe das gut erklärt und ihr könnt mir weiterhelfen.

Danke schon im voraus

Sepp

‹ Menü Sortierung der Felder bei Registrierung + Userprofil ›
  • Anmelden oder Registrieren um Kommentare zu schreiben

userreference etc.

Eingetragen von stBorchert (6003)
am 28.07.2008 - 15:02 Uhr

Moin!

sepp68 schrieb

- Den Benutzer "UserReference" nicht über den Benutzernamen sondern über das Profil-Feld "Mitgliedsnummer" auswählen können

Hm, das wurde vor längerer Zeit schonmal beim Modul direkt gefragt, es gab jedoch keine Antwort.
Wahrscheinlich bleibt Dir nichts anderes übrig, als userreference.module zu ändern (ab Zeile 358):

<?php
  $result
= db_query('SELECT u.name, u.uid FROM {users} u '. implode(' ', $join) .' WHERE '. implode(' AND ', $where) .' ORDER BY u.name ASC', $args);
  while (
$user = db_fetch_object($result)) {
   
$users[$user->uid] = $user->name;
  }
?>

Das musst Du dann halt entsprechend anpassen (SQL erweitern und
<?php
$users
[$user->uid] = $user->Mitgliedsnummer
?>
).

sepp68 schrieb

- Das DropDown-Feld "Termin" filtern und sortieren (z.B. nur Termine in 2008)

Wie baust Du das dropdown?

sepp68 schrieb

- Keine Titel für diesen Node eingeben müssen.

http://drupal.org/project/auto_nodetitle

hth,

Stefan

  • Anmelden oder Registrieren um Kommentare zu schreiben

DropDown Termin

Eingetragen von sepp68 (444)
am 28.07.2008 - 15:08 Uhr

Hallo Stefan,

danke für deine schnelle Antwort. Werde ich heute abend ausprobieren.

Da Dropdown "Termin" baue ich als Feld eines Inhaltstyps aus dem Inhaltstyp "Termin"

Danke

Sepp

  • Anmelden oder Registrieren um Kommentare zu schreiben

Termin

Eingetragen von stBorchert (6003)
am 28.07.2008 - 18:22 Uhr

Na wenn Du die Auswahlliste sowieso selbst erstellst, also auch die Daten zusammensammelst, kannst Du doch auch gleich nach dem Datum filtern, oder?

Stefan

  • Anmelden oder Registrieren um Kommentare zu schreiben

stBorchert schrieb Na wenn

Eingetragen von sepp68 (444)
am 28.07.2008 - 20:07 Uhr
stBorchert schrieb

Na wenn Du die Auswahlliste sowieso selbst erstellst, also auch die Daten zusammensammelst, kannst Du doch auch gleich nach dem Datum filtern, oder?

Du hast natürlich völlig recht. Ich beschäftige mich jetzt seit 2 Wochen mit Drupal und so lansam begreifs ich.
Also:

Anleitung DropDown-Liste:
Unter Strukturierung -> Ansichten eine Ansicht erstellen (ohne Seitenausgabe) mit dem Feld, das man später braucht, gefiltert und sortiert.

Diese Ansicht dann unter im Inhaltstyp als Feld mit Auswahlliste aus diesem Inhaltstyp mit der Ansicht die man vorher erstellt hat, angeben.

Zitat:

Drupal-Original-Zitat
Fortgeschritten - Beiträge, auf die verwiesen werden kann (Ansicht)

Also was für Profis !! ;-)

Bezüglich der User-Auswahl: Die Stelle ist schon mal richtig ! Danke !
Ich tüftle noch an der SQL-Abfrage !!

Sepp

  • Anmelden oder Registrieren um Kommentare zu schreiben

Userreference bauen; Fertig !

Eingetragen von sepp68 (444)
am 29.07.2008 - 19:38 Uhr

Hallo Stefan,

danke für den Tipp. Die Stelle in Modules\cck\userrefence.module war genau richtig.
Ich habe dort folgendes eingefügt:

<?php
  $users
= array();
 
$profile = array();
 
$result = db_query('SELECT u.name, u.uid FROM {users} u '. implode(' ', $join) .' WHERE '. implode(' AND ', $where) .' ORDER BY u.name ASC', $args);
  while (
$user = db_fetch_object($result)) {
   
// $users[$user->uid] = $user->name;  // alter Code

    //ab hier neuer Code
    // Alle Profilfelder abfragen   
   
$profil_result = db_query('SELECT f.fid, f.value FROM {profile_values} f WHERE uid ='. $user->uid.' ORDER by f.fid ASC');

    while (
$profile = db_fetch_object($profil_result)) {
   
        switch (
$profile->fid) {
        case
1:        // fid = 1 Mitgliedsnummer wenn nicht vorhanden dann "xxx"
           
if (!$profile->value) { 
               
$mitgliedsnummer = 'xxx';
            }
            else {
               
$mitgliedsnummer = str_pad(strval($profile->value),3,'0',STR_PAD_LEFT);
            }
            break;
        case
3:        // fid = 3 Vorname
           
$vorname = $profile->value;
            break;
        case
4:        // fid = 4 Nachname
           
$users[$user->uid] = $mitgliedsnummer .'| '.$vorname.' '.$profile->value;
            break;
        }
    }

   
//bis hier neuer Code

 
}
 
array_multisort($users, SORT_ASC); // sortieren
 
return $users;
}
?>

Kann man sicher eleganter machen.

Danke nochmal

Sepp

  • Anmelden oder Registrieren um Kommentare zu schreiben

sql join

Eingetragen von stBorchert (6003)
am 29.07.2008 - 21:38 Uhr

Ich überlege gerade, ob man das nicht auch in einem SQL-Statement (und somit auch nur mit einer Schleife) hinbekommt.

<?php
$users
= array();
$profile = array();

// JOIN für Mitgliedsnummer
$join[] = 'LEFT JOIN {profile_values} p1 ON p.uid = u.uid AND p.fid = 1';
// JOIN für Vorname
$join[] = 'LEFT JOIN {profile_values} p3 ON p.uid = u.uid AND p.fid = 3';
// JOIN für Nachname
$join[] = 'LEFT JOIN {profile_values} p4 ON p.uid = u.uid AND p.fid = 4';

$result = db_query('SELECT u.name, u.uid, p1.value AS mnummer, p3.value AS vorname, p4.value as nachname FROM {users} u '. implode(' ', $join) .' WHERE '. implode(' AND ', $where) .' ORDER BY u.name ASC', $args);

while (
$user = db_fetch_object($result)) {
 
$mitgliedsnummer = 'xxx';
  if (
$user->mnummer) {
   
$mitgliedsnummer = str_pad(strval($user->mnummer),3,'0',STR_PAD_LEFT);
  }
 
$users[$user->uid] = $mitgliedsnummer .'| '.$user->vorname.' '.$user->nachname;
}
array_multisort($users, SORT_ASC); // sortieren
return $users;
?>

Nur so eine Überlegung... :-)

 Stefan

  • Anmelden oder Registrieren um Kommentare zu schreiben

Subselect statt Join

Eingetragen von maximago (860)
am 30.07.2008 - 07:45 Uhr

Joins sind performance-Killer, vieleicht sollte man solche Abfragen eher mit Sub-Queries machen?

Viele Grüße,

www.maximago.de

  • Anmelden oder Registrieren um Kommentare zu schreiben

Perfomancetest

Eingetragen von stBorchert (6003)
am 30.07.2008 - 08:03 Uhr

@maximago:

Zitat:

Nur so eine Überlegung... :-)

^^^ Wie gesagt. ^^^

maximago schrieb

Joins sind performance-Killer, vieleicht sollte man solche Abfragen eher mit Sub-Queries machen?

Ha, das schreit nach Performancetest und Zeitvergleich :-)

 Stefan

  • Anmelden oder Registrieren um Kommentare zu schreiben

Join haut hin

Eingetragen von sepp68 (444)
am 30.07.2008 - 08:13 Uhr

Hallo Stefan,

ja es funktioniert mit dem Join, man muß nur die Tabellen noch richtig angeben

LEFT JOIN {profile_values} p1 ON p1.uid = u.uid AND p1.fid = 1

dann klappts.

Ausserdem kann man das $users-Array nicht sortieren, da sonst die uid nicht mehr stimmt. Schade :-(

<?php
$users
= array();
$profile = array();

// JOIN für Mitgliedsnummer
$join[] = 'LEFT JOIN {profile_values} p1 ON p1.uid = u.uid AND p1.fid = 1';
// JOIN für Vorname
$join[] = 'LEFT JOIN {profile_values} p3 ON p3.uid = u.uid AND p3.fid = 3';
// JOIN für Nachname
$join[] = 'LEFT JOIN {profile_values} p4 ON p4.uid = u.uid AND p4.fid = 4';

$result = db_query('SELECT u.name, u.uid, p1.value AS mnummer, p3.value AS vorname, p4.value as nachname FROM {users} u '. implode(' ', $join) .' WHERE '. implode(' AND ', $where) .' ORDER BY u.name ASC', $args);

while (
$user = db_fetch_object($result)) {
 
$mitgliedsnummer = 'xxx';
  if (
$user->mnummer) {
   
$mitgliedsnummer = str_pad(strval($user->mnummer),3,'0',STR_PAD_LEFT);
  }
 
$users[$user->uid] = $mitgliedsnummer .'| '.$user->vorname.' '.$user->nachname;
}
return
$users;
?>

@maximago: Da ich ja nicht der SQL-Experte bin (habt iht ja sicher schon gemerkt ;-)) ) muß ich mich erstmal über subselect schlau machen. Da wir aber nur 40 Mitglieder haben (und in naher Zukunft auch nicht viel mehr haben werden) ist die Performance aber auch so ok.

Sepp

  • Anmelden oder Registrieren um Kommentare zu schreiben

Sortierung

Eingetragen von stBorchert (6003)
am 30.07.2008 - 08:23 Uhr
sepp68 schrieb

man muß nur die Tabellen noch richtig angeben
LEFT JOIN {profile_values} p1 ON p1.uid = u.uid AND p1.fid = 1

Ah, stimmt. Hatte ich nicht gesehen.

sepp68 schrieb

Ausserdem kann man das $users-Array nicht sortieren, da sonst die uid nicht mehr stimmt.

Das hätte vorher aber auch schon nicht funktionieren dürfen. array_multisort behält die Zuordnung Schlüssel => Wert nämlich grundsätzlich nicht bei. Was spricht gegen die Verwendung von asort?

 Stefan

  • Anmelden oder Registrieren um Kommentare zu schreiben

asort ist ok

Eingetragen von sepp68 (444)
am 30.07.2008 - 08:28 Uhr

Hallo Stefan,

stBorchert schrieb

Was spricht gegen die Verwendung von asort?

php überrascht mich immer wieder. Es gibt wohl für alles einen Befehl !

Funktioniert 100prozentig !!

Danke

Sepp

  • 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?
  • Update Manger läst sich nicht Installieren
Weiter

Neue Kommentare

  • melde mich mal wieder, da ich
    vor 5 Tagen 19 Stunden
  • Hey danke
    vor 6 Tagen 14 Stunden
  • Update: jetzt gibt's ein
    vor 1 Woche 8 Stunden
  • Hallo, im Prinzip habe ich
    vor 1 Woche 4 Tagen
  • Da scheint die Terminologie
    vor 1 Woche 4 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: 250233
Registrierte User: 20449

Neue User:

  • Mroppoofpaync
  • 4aficiona2
  • AppBuilder

» 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 1 Benutzer und 3 Gäste online.

Benutzer online

  • dinmikkith

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