Hallo, Gast! (Registrieren)

Wir wünschen allen Besuchern frohe Ostern!

Letzte Ankündigung: MyBB 1.8.37 veröffentlicht (04.11.23)


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste
Automatische Liste
#31
Hallo nochmal!

Nein. Das "es sortiert nichts" war schon eine präzise Angabe, weil eben einfach nichts mit dem Klick auf den entsprechenden Link passiert ist und entsprechend nichts sortiert wurde!

Ich habe jetzt noch mal versucht, Schritt für Schritt die Dinge in meiner Datei anzupassen, sodass es nun wie folgt aussieht:

Ausschnitt listen.php
PHP-Code:
if($mybb->input['action']=="einwohner")
{

$order my_strtolower(htmlspecialchars($mybb->input['order']));
$sortby my_strtolower(htmlspecialchars($mybb->input['sortby']));

switch(
$order)
{
case 
"desc":
$order "asc";
$order_by "desc";
$oppsortnext "asc";
break;
default:
$order "desc";
$order_by "asc";
$oppsortnext "desc";
break;
}

switch(
$sortby)
{
case 
"u.username":
$sort_field "u.username";
break;
case 
"uf.fid9":
$sort_field "uf.fid9";
break;
case 
"uf.fid13":
$sort_field "uf.fid13";
break;
case 
"uf.fid11":
$sort_field "uf.fid11";
break;
case 
"uf.fid14":
$sort_field "uf.fid14";
break;
case 
"uf.fid8":
$sort_field "uf.fid8";
break;
}

eval(
"\$orderarrow['$sortby'] = \"".$templates->get("listen_orderarrow")."\";");

$bit "";
$registered $db->query("
SELECT * 
FROM mybb_users u 
LEFT JOIN mybb_userfields uf ON(u.uid=uf.ufid) 
WHERE (u.usergroup > '7') OR (u.additionalgroups > '7') 
ORDER BY 
{$sortby}
"
);

while(
$row=$db->fetch_array($registered)) 
{
$namen explode(" "$row[username]);
$nachname "$namen[1]";
if(
count($namen) == "3"$nachname "$namen[1] $namen[2]";
$altbg alt_trow();
eval(
"\$einbit .= \"".$templates->get("listen_einwohner_bit")."\";"); 
}

eval(
"\$menu .= \"".$templates->get("listen_nav")."\";");
eval(
"\$page = \"".$templates->get("listen_einwohner")."\";");
output_page($page);


Auschnitt Template "listen_einwohner"
Code:
<tr class="thead">
<td align="center">Nachname</td>
<td align="center"><a href="listen.php?action=einwohner&amp;sortby=u.username&amp;order={$order}">Vorname</a></td>
<td align="center"><a href="listen.php?action=einwohner&amp;sortby=uf.fid9&amp;order={$order}">Alter</a></td>
<td align="center">Geburtstag</td>
<td align="center">Beruf</td>
<td align="center">Wohnort</td>
<td align="center">Beziehung</td>
<td align="center">Abschlussklasse</td>
</tr>

Wenn ich die Dateien so behalte, dann funktioniert mein Link zur Seite mit listen.php&action=einwohner nicht mehr. Vermutlich, weil eine Default-Sortierung fehlt. Laut der Fehlermeldung steht hinter "ORDER BY" nämlich nichts. [Ist ja irgendwie noch verständlich...]. Als Default-Sortierung hatte ich bisher die Sortierung nach dem Nachnamen, dann Vornamen drin - über folgenden Schnippsel:

PHP-Code:
ORDER BY SUBSTRING_INDEX(username' ', -1), u.username ASC 

Wenn ich das drin lasse, dann sortiert es zwar wunderbar unter listen.php?action=einwohner meine ersten beiden Spalten der Tabelle, aber jede weitere Sortierung wird ignoriert. Nehme ich es raus und gehe unter dem Link listen.php?action=einwohner&sortby=u.username&order=desc rein, sortiert er mir ganz fein die Liste nach den Accountnamen/Vornamen. Ersetze ich das u.username allerdings durch eines meiner Profilfelder - bspw. uf.fid13 -, bekomme ich eine Fehlermeldung, dass das nicht in der "order clause" definiert sei oder dergleichen: 1054 - Unknown column 'uf.fid' in 'order clause'

Da die Sortierung über den Usernamen ja funktioniert - mittlerweile... - bin ich komplett ratlos bei dem Rest. Vor allem bei der Default-Sortierung, die mir sehr wichtig ist. [Falls es mit dem Substring nicht klappt, lege ich einfach ein neues Profilfeld an, daran soll es letztlich nicht scheitern. Aber auch das muss ja als Default-Wert irgendwo festgelegt sein.]

Vielleicht kriegen wir das ja zusammen auf die Reihe.
Zitieren
#32
Alles kann ich im Detail nicht kontrollieren, zumal meiner Meinung nach da auch Code-Zeilen fehlen. Aber Du solltest Dir mal die Nutzung der Variable $sortby und $sort_field ansehen und was Du dann damit machst. Da hast Du vermutlich nen Wurm drin....
viele Grüße
Jockl
übersetzte und eigene Plugins
Zitieren
#33
Ich verstehe leider Null, worauf du hinaus willst.
Zitieren
#34
Ich denke Jockl wollte darauf hinaus, dass $sort_field im Query gar nicht verwendet wird. Wink
[Bild: banner.png]

Bitte die Foren-Regeln beachten und im Profil die verwendete MyBB-Version angeben.
Zitieren
#35
Das hilft mir aber leider auch nicht weiter, denn ich habe - wie von Jockl selbst vorgeschlagen - mich an seinem Plugin orientiert und quasi die Sortierung umgeschrieben. Ich frage ja nicht, weil ich keine Lust habe, das selbst zu probieren, sondern weil ich keine Ahnung habe, wie man das macht...

EDIT: Okay, nach mehrmaligem drübergucken habe ich ENDLICH gesehen, was Jockl meinte. Frag mich nicht, wo das mit dem sort_field herkommt. In den letzten Wochen habe ich so viel ausprobiert... da bin ich wohl blind geworden. [Entschuldige bitte... vor allem, wenn das eben ungehalten klang.]
Soweit funktioniert die Sortierung mit DESC schon mal. Selbst die Profilfelder habe ich umgesetzt bekommen. Yay! Jetzt arbeite ich noch an der Sortierung ASC. Die mag noch nicht so. Und... wie gesagt, eine Default-Sortierung.

EDIT²: Auch die ASC-Sortierung habe ich hingekriegt. Wuhuu! Die Default-Sortierung muss ich wohl stumpf über den Link direkt aufbauen, hm?
Zitieren
#36
(24.01.2016, 20:02)SCOTTISH. schrieb: Die Default-Sortierung muss ich wohl stumpf über den Link direkt aufbauen, hm?
Die solltest Du eigentlich mit der "default" Klausel einbauen können. Bei der Variable $order hast Du sie schon, aber nicht bei $sortby....

PHP-Code:
switch($order)
{
case "desc":
$order = "asc";
$order_by = "desc";
$oppsortnext = "asc";
break;
default:
$order = "desc";
$order_by = "asc";
$oppsortnext = "desc";
break;
}

switch(
$sortby)
{
case "u.username":
$sort_field = "u.username";
break;
case "uf.fid9":
$sort_field = "uf.fid9";
break;
case "uf.fid13":
$sort_field = "uf.fid13";
break;
case "uf.fid11":
$sort_field = "uf.fid11";
break;
case "uf.fid14":
$sort_field = "uf.fid14";
break;
case "uf.fid8":
$sort_field = "uf.fid8";
break;

viele Grüße
Jockl
übersetzte und eigene Plugins
Zitieren
#37
Das war jetzt einfacher als gedacht. Danke! Funktioniert wunderbar! Smile
Zitieren
#38
Hinweis: wenn Dein Ergebnis der Abfrage dann aber länger als eine Seite ist, dann müsstest Du noch die Multipage-Fkt. einbauen, damit man auch alle Ergebnisse einsehen kann.
viele Grüße
Jockl
übersetzte und eigene Plugins
Zitieren
#39
Dazu müsste ich aber angeben, dass die Liste irgendwann ab Zeile X eine zweite Seite aufbauen soll, oder nicht? Das habe ich ja nicht drin. ^^
Zitieren
#40
Nein, das richtet sich nach den Einstellungen im ACP bzw. denen im Benutzer-CP eines jeden Users.
viele Grüße
Jockl
übersetzte und eigene Plugins
Zitieren


Möglicherweise verwandte Themen…
Thema Verfasser Antworten Ansichten Letzter Beitrag
  automatische Liste aus Profilfeld - mycode parsen? Risu 2 1.805 05.04.2014, 12:36
Letzter Beitrag: MrBrechreiz