Seite 1 von 5

[3.2] Sortieren nach Liste aus den custom profile fields

Verfasst: 12.11.2017 12:57
von cpg
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

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

Verfasst: 13.11.2017 21:34
von gn#36
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.

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

Verfasst: 17.11.2017 17:30
von cpg
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

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

Verfasst: 17.11.2017 20:38
von gn#36
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.

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

Verfasst: 17.11.2017 20:53
von cpg
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

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

Verfasst: 17.11.2017 23:30
von gn#36
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

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

Verfasst: 19.11.2017 13:48
von cpg
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

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

Verfasst: 21.11.2017 20:52
von cpg
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

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

Verfasst: 21.11.2017 20:53
von Dr.Death
Hi,

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

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

Verfasst: 21.11.2017 21:12
von cpg
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