anmerkung: contenido-cvs-2005-06-24.tar
Verfasst: So 26. Jun 2005, 21:32
Na, da ist noch einiges drin.
contenido\includes\include.frontend.user_menu.php:
cInclude("classes", "class.todo.php"); wird IMHO nicht benötigt. $oPage = new cPage; wird zweimal eingesetzt (eins kann entfallen).
Genereller Vorschlag: Statt
nur
Warum? Weil dann die Felder kleiner werden und man sie mit ein wenig mehr Optimierung auch verwenden kann, ohne den Frame jedesmal anpassen zu müssen (gilt natürlich auch für andere Felder/Beschriftungen/Übersetzungen und Breite von Feldern). Generell gilt auch, dass die übergebenen Werte nicht überprüft werden (e.g. elemperpage, page usw.) - wenigstens eine Überprüfung auf numerische Werte würde die Sache stabiler machen.
In der Schleife while ($feuser = $oFEUsers->next()) wird mehrfach
$feuser->get("idfrontenduser") verwendet. Da bei jedem get ein DB-Aufruf erfolgt, ist das nicht sehr performant, der Wert sollte am Anfang der Schleife in eine Variable gespeichert werden.
Ähm:
Ich bin da PHP-Array-Laie, aber ich würde zu setDefault(25) tendieren.
Für dieses Konstrukt bitte ich um Erläuterung, wie zusätzliche Felder eingebaut werden können:
Ich gehe davon aus, dass man mit $aFieldSources["spaltenname"] = ""; weitere Spalten auswählen könnte - dafür braucht man dann aber callback-Funktionen, bei denen ich nicht weiss, wie bzw. wo die definiert werden. Ich nutze das mal für konstruktive Kritik: Muss es wirklich so kompliziert sein? Reicht nicht auch ein
Die Zeile produziert im Endeffekt Murks:
Problem: Wird die Seite das erste Mal aufgerufen, stimmen die IDs, die in den Links, mit denen die FrontendUser-Namen hinterlegt sind, mit den jeweiligen FrontendUser-IDs überein. Ein Klick auf "Apply" setzt statt den DB-IDs fortlaufende IDs (schön daran zu erkennen, dass das erste Element die ID 0 erhält). Das Array enthält als Schlüssel die DB-ID - nach dem Umsortieren (welches erst nach Apply das erste Mal durchgeführt wird) ist diese Information verloren und als ID liefert das Array die aktuelle Zeigerposition im Array (0, 1, 2, ...). Damit scheitert natürlich schon der Aufruf eines Elements durch Anklicken.
Auch hier konstruktive Kritik: mySQL und alle anderen DBs sind auf die Sortierung von Werten optimiert (und ORDER BY ist ein SQL92-Standard). Ich wäre dafür, die DB-Sortierungsfähigkeiten zu nutzen (Datumseinträge werden z.B. mit array_csort auch garantiert nicht "richtig" sortiert). Das gleiche gilt für das Filtern von Werten. Dazu später mehr.
Das Löschen von Einträgen funktioniert nicht (gilt überall, wo FolderRow eingesetzt wird, also auch http://www.contenido.org/forum/viewtopi ... 0381#50381, Fehlermeldung DEDE). Ansonsten wird der Code in $deleteScript z.Z. kaum genutzt. Wenn, wäre der Funktionsname deleteModule falsch und außerdem enthält die Funktion die Zeile. Im aktuellen Code steht jedoch kein Form-Feld mit Namen page zur Verfügung (zumindest, wenn nur eine Seite zur Verfügung steht, habe es mit mehr Seiten noch nicht getestet. Damit vermute ich aber, dass das Blättern auch nicht funktioniert).
Da ich persönlich ein Fan der JS-messageBox und kein Freund der Standard-confirm-Box bin, würde ich die nächsten Tagen einen funktionierenden Code zur Verfügung stellen. Das würde dann auch ein Code zum Sortieren und Filtern enthalten (der Code zum Filtern in include.rights_menu.php ist mir zu kompliziert).
Hierzu habe ich noch eine Frage:
Woher kommt die GUID? Bzw. ich benötige eine weitere GUID für einen Bereich "Options".
Gruß
HerrB
contenido\includes\include.frontend.user_menu.php:
cInclude("classes", "class.todo.php"); wird IMHO nicht benötigt. $oPage = new cPage; wird zweimal eingesetzt (eins kann entfallen).
Genereller Vorschlag: Statt
Code: Alles auswählen
$aFieldsToSearch = array("--all--" => i18n("-- All fields --"), "username" => i18n("Username"));
Code: Alles auswählen
$aFieldsToSearch = array("all" => i18n("All"), "username" => i18n("Username"));
In der Schleife while ($feuser = $oFEUsers->next()) wird mehrfach
$feuser->get("idfrontenduser") verwendet. Da bei jedem get ein DB-Aufruf erfolgt, ist das nicht sehr performant, der Wert sollte am Anfang der Schleife in eine Variable gespeichert werden.
Ähm:
Code: Alles auswählen
$oSelectItemsPerPage->autoFill(array(25 => 25, 50 => 50, 75 => 75, 100 => 100));
if (!isset($_REQUEST["elemperpage"]))
{
$oSelectItemsPerPage->setDefault(2);
} else {
...
Für dieses Konstrukt bitte ich um Erläuterung, wie zusätzliche Felder eingebaut werden können:
Code: Alles auswählen
$aFieldSources = array();
$aFieldSources["username"] = "base";
...
while ($feuser = $oFEUsers->next())
{
foreach ($aFieldSources as $key => $field)
{
switch ($field)
{
case "base":
$aUserTable[$feuser->get("idfrontenduser")][$key] = $feuser->get("username");
break;
default:
$aUserTable[$feuser->get("idfrontenduser")][$key] = call_user_func("frontendusers_".$field."_getvalue", $key);
break;
...
Code: Alles auswählen
switch ($field)
{
case "base":
$aUserTable[$feuser->get("idfrontenduser")][$key] = $feuser->get("username");
break;
default:
$aUserTable[$feuser->get("idfrontenduser")][$key] = $feuser->get($key);
break;
...
Code: Alles auswählen
$aUserTable = array_csort($aUserTable, $_REQUEST["sortby"], $sortorder);
Auch hier konstruktive Kritik: mySQL und alle anderen DBs sind auf die Sortierung von Werten optimiert (und ORDER BY ist ein SQL92-Standard). Ich wäre dafür, die DB-Sortierungsfähigkeiten zu nutzen (Datumseinträge werden z.B. mit array_csort auch garantiert nicht "richtig" sortiert). Das gleiche gilt für das Filtern von Werten. Dazu später mehr.
Das Löschen von Einträgen funktioniert nicht (gilt überall, wo FolderRow eingesetzt wird, also auch http://www.contenido.org/forum/viewtopi ... 0381#50381, Fehlermeldung DEDE). Ansonsten wird der Code in $deleteScript z.Z. kaum genutzt. Wenn, wäre der Funktionsname deleteModule falsch und außerdem enthält die Funktion die Zeile
Code: Alles auswählen
url += \'&page=\' +form.page.value;
Da ich persönlich ein Fan der JS-messageBox und kein Freund der Standard-confirm-Box bin, würde ich die nächsten Tagen einen funktionierenden Code zur Verfügung stellen. Das würde dann auch ein Code zum Sortieren und Filtern enthalten (der Code zum Filtern in include.rights_menu.php ist mir zu kompliziert).
Hierzu habe ich noch eine Frage:
Code: Alles auswählen
$oListActionRow = new cFoldingRow("339b79d1-48f7-4ac6-ba17-b958c5b3bb2b",i18n("Actions"));
Gruß
HerrB