[3.2] Sortieren nach Liste aus den custom profile fields

In diesem Forum gibt es Starthilfe zum neuen Extension-System von phpBB 3.1/3.2. Fragen zur Entwicklung von Extensions und zur Konvertierung von phpBB 3.0.x MODs sind ebenfalls willkommen.
cpg
Mitglied
Beiträge: 390
Registriert: 24.11.2007 12:43
Kontaktdaten:

[3.2] Sortieren nach Liste aus den custom profile fields

Beitragvon cpg » 12.11.2017 12:57

Moin,

für 3.0 hatte ich eine nützliche Funktion, die memberlist nach dem Ergebnis aus einem Custom Profile Field zu sortieren.
Nun würde ich das gerne für 3.2 umschreiben; aber ich beiße mich fest.

Das Field heißt location_mysearch und wird auch in der Memberlist angezeigt, also ausgelesen. Allerdings bekomme ich, wenn ich auf den Link klicke (zum sortieren), diese Fehlermeldung:

Unknown column 'fd.cpf_location_mysearch' in 'order clause' [1054]

SQL

SELECT u.user_id FROM phpbb3_users u WHERE u.user_type IN (0, 3, 1) ORDER BY fd.cpf_location_mysearch ASC LIMIT 50


Kann mir jemand auf die Sprünge helfen; das wäre nett.

Ach ja,
Hier ist das Bild von der Memberlist. Es ist das Feld ganz rechts:

[ externes Bild ]


Gruß und schönen Sonntag
cpg

Benutzeravatar
gn#36
Administrator
Administrator
Beiträge: 9175
Registriert: 01.10.2006 16:20
Wohnort: Ganz in der Nähe...
Kontaktdaten:

Re: [3.2] Sortieren nach Liste aus den custom profile fields

Beitragvon gn#36 » 13.11.2017 21:34

Die Fehlermeldung sagt, dass es die Spalte mit diesem Namen nicht in der Datenbank gibt.

Deine SQL Abfrage sieht auch etwas seltsam aus. Es gibt keine Tabelle mit dem Alias fd, den du für die Sortierung heranziehen willst in der Abfrage, daher kannst du danach auch nicht sortieren. Du musst die SQL Abfrage so umbauen, dass du das Feld, nach dem du sortieren willst auch in der Abfrage drin hast.

Du brauchst also zum Beispiel ein LEFT JOIN tabelle_xyz fd mit der Tabelle, in der dein CPF drin ist, musst die Daten darin mit deinen Userdaten verknüpfen (ON u.user_id = fd.user_id o.ä.) und kannst dann nach dieser Spalte sortieren.
Begegnungen mit dem Chaos sind fast unvermeidlich, Aber nicht katastrophal, solange man den Durchblick behält.
Übertreiben sollte man's im Forum aber nicht mit dem Chaos, denn da sollen ja andere durchblicken und nicht nur man selbst.

cpg
Mitglied
Beiträge: 390
Registriert: 24.11.2007 12:43
Kontaktdaten:

Re: [3.2] Sortieren nach Liste aus den custom profile fields

Beitragvon cpg » 17.11.2017 17:30

Moin,

... und danke für Deine Antwort; die habe ich erst jetzt gesehen :oops:

Ich werde mal weiter probieren.

Die cpf werden doch hier schon geladen (?) in der memberlist.php


Code: Alles auswählen

// Load custom profile fields
         if ($config['load_cpf_memberlist'])
         {
            // Grab all profile fields from users in id cache for later use - similar to the poster cache
            $profile_fields_cache = $cp->grab_profile_fields_data($user_list);

            // Filter the fields we don't want to show
            foreach ($profile_fields_cache as $user_id => $user_profile_fields)
            {
               foreach ($user_profile_fields as $field_ident => $profile_field)
               {
                  if (!$profile_field['data']['field_show_on_ml'])
                  {
                     unset($profile_fields_cache[$user_id][$field_ident]);
                  }
               }
            }
         }


Gruß und danke
cpg

Benutzeravatar
gn#36
Administrator
Administrator
Beiträge: 9175
Registriert: 01.10.2006 16:20
Wohnort: Ganz in der Nähe...
Kontaktdaten:

Re: [3.2] Sortieren nach Liste aus den custom profile fields

Beitragvon gn#36 » 17.11.2017 20:38

Und was genau hat das mit deiner SQL Abfrage zu tun?

Gib mal mehr Kontext preis. Was hast du genau gemacht? Arbeitest du an einer Erweiterung oder veränderst du die phpBB Dateien...

Wenn du User in einer SQL Abfrage sortieren willst nützt es dir wenig, dass die Daten nach denen du sortieren willst schon geladen sind - die müssen trotzdem in die SQL Abfrage rein.
Begegnungen mit dem Chaos sind fast unvermeidlich, Aber nicht katastrophal, solange man den Durchblick behält.
Übertreiben sollte man's im Forum aber nicht mit dem Chaos, denn da sollen ja andere durchblicken und nicht nur man selbst.

cpg
Mitglied
Beiträge: 390
Registriert: 24.11.2007 12:43
Kontaktdaten:

Re: [3.2] Sortieren nach Liste aus den custom profile fields

Beitragvon cpg » 17.11.2017 20:53

Moin,

wahrscheinlich muss ich wohl doch versuchen, eine Extension zu schreiben.
Allerdings versuche ich es erst einmal mit der Änderung der memberlist.php

In den 3.0 Versionen konnte ich wunderbar die Userliste nach Postleitzahlen sortieren; aber "mal eben" lässt sich das wohl nicht übertragen, weil die Profilfelder anders abgefragt werden.

Gruß
cpg

Benutzeravatar
gn#36
Administrator
Administrator
Beiträge: 9175
Registriert: 01.10.2006 16:20
Wohnort: Ganz in der Nähe...
Kontaktdaten:

Re: [3.2] Sortieren nach Liste aus den custom profile fields

Beitragvon gn#36 » 17.11.2017 23:30

Nun ja, dann gilt nach wie vor das was ich über die SQL Abfrage geschrieben habe: Du musst das Feld nach dem du sortieren willst dort mit reinbringen.

Die Tatsache dass die CPF bereits geladen sind nützt dir nichts, weil du ja völlig andere User aus der DB holen musst.

Da die Custom Profile Fields in einer eigenen Tabelle liegen musst du diese Tabelle mit in die Abfrage hineinholen.

Irgendwas in der Richtung

Code: Alles auswählen

SELECT...
FROM users u
LEFT JOIN custom_profile_fields cpf ON cpf.user_id = u.user_id
ORDER BY cpf.sortierfeld
Begegnungen mit dem Chaos sind fast unvermeidlich, Aber nicht katastrophal, solange man den Durchblick behält.
Übertreiben sollte man's im Forum aber nicht mit dem Chaos, denn da sollen ja andere durchblicken und nicht nur man selbst.

cpg
Mitglied
Beiträge: 390
Registriert: 24.11.2007 12:43
Kontaktdaten:

Re: [3.2] Sortieren nach Liste aus den custom profile fields

Beitragvon cpg » 19.11.2017 13:48

Moin,

kann ich das Feld nicht hier mit einlesen; die Zeilen erweitern?

Code: Alles auswählen

// Custom Profile Fields
      $profile_fields = array();
      if ($config['load_cpf_viewprofile'])
      {
         /* @var $cp \phpbb\profilefields\manager */
         $cp = $phpbb_container->get('profilefields.manager');
         $profile_fields = $cp->grab_profile_fields_data($user_id);
         $profile_fields = (isset($profile_fields[$user_id])) ? $cp->generate_profile_fields_template_data($profile_fields[$user_id]) : array();
      }


... aber mit Deinem Posting werde ich mich auch noch weiter auseinandersetzen.

Gruß und schönen Sonntag
cpg

cpg
Mitglied
Beiträge: 390
Registriert: 24.11.2007 12:43
Kontaktdaten:

Re: [3.2] Sortieren nach Liste aus den custom profile fields

Beitragvon cpg » 21.11.2017 20:52

Moin,

ich habe es geschafft - und es scheint zu funktionieren :)
Es war eine Menge Arbeit; aber ich denke, dass der Gebrauchsnutzen - jedenfalls für unser Forum - gaz gut ist; denn die Memberliste kann nun nach "Membersuche/Wohnort" sortiert werden.
Das setzt natürlich eine gewisse Disziplin bei den Eintragungen voraus. Dazu werde ich mir noch etwas überlegen.

Zu überlegen wäre auch, ob ich versuche, daraus eine Extension zu machen.

Nochmals danke für die Hinweise und Anregungen
Gruß
cpg

Benutzeravatar
Dr.Death
Moderator
Moderator
Beiträge: 15341
Registriert: 23.04.2003 08:22
Wohnort: Xanten
Kontaktdaten:

Re: [3.2] Sortieren nach Liste aus den custom profile fields

Beitragvon Dr.Death » 21.11.2017 20:53

Hi,

lass uns und andere doch an deiner jetzigen Lösung teilhaben,... :roll: :wink:

cpg
Mitglied
Beiträge: 390
Registriert: 24.11.2007 12:43
Kontaktdaten:

Re: [3.2] Sortieren nach Liste aus den custom profile fields

Beitragvon cpg » 21.11.2017 21:12

Moin,

lass uns und andere doch an deiner jetzigen Lösung teilhaben


deshalb habe ich mich auch nicht in "stiller Freude" zurückgezogen, sondern hier noch einmal geschrieben :)

Ich weiß: Veränderungen der Dateien mit Hardcoding ist (eigentlich) nicht mehr angesagt in Zeiten der Extensions.

Trotzdem werde ich, falls Interesse ist, die Veränderungen an den von mir veränderten Dateien "ordentlich" aufschreiben und hier
an dieser Stelle zusammenfassen.

Gruß
cpg


Zurück zu „Extension Bastelstube“