Modul: class.input.helper

Gesperrt
HerrB
Beiträge: 6935
Registriert: Do 22. Mai 2003, 12:44
Wohnort: Berlin
Kontaktdaten:

Modul: class.input.helper

Beitrag von HerrB » Mo 11. Jun 2007, 00:15

Eigentlich kein Modul, sondern eine Klasse mit Objekten zur vereinfachten Erstellung des Input-/Eingabe-/Konfigurationsbereichs von Templates.

Feedback und Ergänzungswünsche nehme ich gerne entgegen und baue weiteres gerne ein (es soll aber nicht die eierlegende Wollmilchsau werden... :wink: ).

Download: [V2.0]

Installation:
Entpacken und in das Mandanten-Includes-Verzeichnis hochladen (also für den Beispielmandanten nach cms/includes). Nicht in ein Verzeichnis unter contenido, nicht nach contenido/classes...

Verwendung:
Die genauen Details bitte der Klasse selbst entnehmen. Beispiel für eine Anwendung siehe unten.

Stellt folgende Klassen zur Verfügung:
- cHTMLInputSelectElement; ergibt selectbox - von cHTMLSelectElement abgeleitet
- UI_Config_Table; erzeugt eine Tabelle zur Strukturierung der Felder im Konfigurationsbereich (ohne das immer wieder neu fummeln zu müssen)

cHTMLInputSelectElement ergänzt cHTMLSelectElement um die Methoden addArticles (Artikel eines Verzeichnisses auflisten), addCategories (Kategorien und - optional - Artikel auflisten), addTypesFromArt (verfügbare Typen und IDs eines Artikels ergänzen) und setSelected (mehrere Elemente der SelectBox auswählen - die gehört eigentlich in die class.htmlelements.php, nun ja).

UI_Config_Table stellt als Leckerli auf Wunsch auch ein wenig JS zur Verfügung, um MultiSelect-Boxen zu unterstützen (d.h. mehrere Werte einer Selectbox zu speichern).

Version 2.0:
Komplette Überarbeitung, erstmals als Klasse auf Basis der cHTMLElements (class.htmlelements.php) von Contenido.

Vorgänger war die functions.input.helper.php, die bei zwei meiner Module Verwendung fand.

Beispiel:
Tabelle mit einer SelectBox (multiselect) mit Kategorien und Artikeln (in Input-/Eingabe-Bereich einfügen, Modul einem Template zuordnen und Vorkonfiguration aufrufen).

Code: Alles auswählen

   #Includes
   cInclude('classes',  'class.htmlelements.php');
   cInclude('frontend', 'includes/class.input.helper.php'); # Note, this file is located in <client-path>/includes!

   // Showing options
   $oCfgTable = new UI_Config_Table;
   $oCfgTable->setAddMultiSelJS();

   // SelectBox (note, that the selectbox gets some 'user-defined' name
   // - the data is stored using a hidden field)
   $oSelExample = new cHTMLInputSelectElement("selExample".$cnumber);

   // Add some magic ...
   $oSelExample->setMultiselect();
   $oSelExample->setSize(5);
   $oSelExample->setEvent('click', "fncUpdateSel('selExample".$cnumber."', '"."CMS_VAR[1]"."');");

   // Add data
   $oOption        = new cHTMLOptionElement(mi18n("- Please select -"), '');
   $oSelExample->addOptionElement(0, $oOption);
   $oSelExample->addCategories(0, true, false, false, true, true);
   $oSelExample->setSelected(explode(',', "CMS_VALUE[1]"));
   
   // Generate hidden field (storage)
   $oHidStorage = new cHTMLHiddenField("CMS_VAR[1]", $cnumber, "CMS_VALUE[1]");

   // Add a table line, first element is just an internal name (could be a number, too)
   // second is the column (starting with 0), third is content
   $oCfgTable->setCell('something', 0, mi18n("Example:"));
   $oCfgTable->setCell('something', 1, $oHidStorage->render().$oSelExample->render());

   // Example for color and colspan setting
   $oCfgTable->setCell('something_else', 0, mi18n("Just another line in the same color");
   $oCfgTable->setCellColspan('something_else', 0, 2);
   $oCfgTable->setRowBgColor('something_else', $cfg["color"]["table_light"]);

   // ... and there is more: borders, padding, table width, ...
   
   $oCfgTable->render(true);
(Das Beispiel habe ich gerade nicht getestet, Daumen drücken... :wink: )

Gruß
HerrB
Zuletzt geändert von HerrB am Di 12. Jun 2007, 16:37, insgesamt 1-mal geändert.
Bitte keine unaufgeforderten PMs oder E-Mails -> use da Forum!

Newsletter: V4.4.x | V4.6.0-15 (Module, Backend) | V4.6.22+
Standardartikelliste: V4.4.x | V4.6.x
http://www.contenido.org/forum/search.php | http://faq.contenido.org | http://www.communido.net

knb
Beiträge: 224
Registriert: Fr 9. Sep 2005, 14:03
Wohnort: Potsdam
Kontaktdaten:

Beitrag von knb » Mo 11. Jun 2007, 16:23

Erster! :D
Hier fehlte die zweite schliessende Klammer im Testcode:

Code: Alles auswählen

   // Example for color and colspan setting
   $oCfgTable->setCell('something_else', 0, mi18n("Just another line in the same color"));
 
Zum class.php-File ein paar Anmerkungen bzw Feinheiten:

-wär noch gut wenn man die Schriftgröße für die Selectbox-Options als Param irgendwie setzen könnte

-ich würde in die installationsanleitung bzw in den Kommentarheader der Files noch reinschreiben, dass man das verzeichnis "includes" ggf selbst anlegen soll, da es defaultmässig -glaube ich- nicht existiert . aber:

- wäre der Konsistenz zuliebe ein Verzeichnis "classes" als Speicherort für die Datei nicht besser geeignet als "includes"?
cInclude('frontend', 'classes/class.input.helper.php'); Ich meine, jeder der komplexere Sachen per API bzw im OO-stil programmiert wird früher oder später sich so eine Verzeichnisstruktur anlegen mit subdirs classes, css, includes, scripts, templates im MandantenVerzeichnis

- einige Variablen sind nicht deklariert bevor sie verwendet werden. Ich sehe dass es absicht ist, denn sie werden in "else" klauseln gesetzt. Mein Eclipse gibt aber drei Warnungen aus, für $sSelIDCat z. 159, $iIDCatArt z.224, $sBgColor z. 494

- warum soll die Klasse eigentlich nur im inputbereich eines Moduls verwendet werden? Weil die UI-ELemente mit dem Backend-Look-and-Feel gerendert werden, oder?
Oder weil die Datei "class.htmlelements.php" so schwergewichtig ist? Vielleicht noch Hinweis auf das "warum" in Header anbringen?

- sonst ein cooles 8) Stück Code. Kann ich wirklich gut gebrauchen!
Gruss,
Knut

HerrB
Beiträge: 6935
Registriert: Do 22. Mai 2003, 12:44
Wohnort: Berlin
Kontaktdaten:

Beitrag von HerrB » Di 12. Jun 2007, 09:03

-wär noch gut wenn man die Schriftgröße für die Selectbox-Options als Param irgendwie setzen könnte
Err ... eher nicht. Das würde dem Objektgedanken widersprechen (dann müsste es so viele Parameter wie Möglichkeiten in CSS geben). Ich werde mir mal ansehen, wie man das OO lösen kann.
-ich würde in die installationsanleitung bzw in den Kommentarheader der Files noch reinschreiben, dass man das verzeichnis "includes" ggf selbst anlegen soll, da es defaultmässig -glaube ich- nicht existiert . aber:
Gute Idee. Es existiert in V4.6.x, aber nicht davor.
- wäre der Konsistenz zuliebe ein Verzeichnis "classes" als Speicherort für die Datei nicht besser geeignet als "includes"?
cInclude('frontend', 'classes/class.input.helper.php'); Ich meine, jeder der komplexere Sachen per API bzw im OO-stil programmiert wird früher oder später sich so eine Verzeichnisstruktur anlegen mit subdirs classes, css, includes, scripts, templates im MandantenVerzeichnis

Ja, die Idee hatte ich auch schon. Da warte ich mal das weitere Feedback ab - die Einführung des Verzeichnis includes (und die Tatsache, dass man beim Kopieren von Mandanten an diese Verzeichnisse denken muss) bereitet vielen Nutzern immer wieder Probleme - deswegen wollte ich nicht noch ein neues Verzeichnis einführen.
- einige Variablen sind nicht deklariert bevor sie verwendet werden. Ich sehe dass es absicht ist, denn sie werden in "else" klauseln gesetzt. Mein Eclipse gibt aber drei Warnungen aus, für $sSelIDCat z. 159, $iIDCatArt z.224, $sBgColor z. 494
Sehe ich mir an.
- warum soll die Klasse eigentlich nur im inputbereich eines Moduls verwendet werden? Weil die UI-ELemente mit dem Backend-Look-and-Feel gerendert werden, oder?
Yep. Im Frontend hat ja jeder seine Wünsche, das würde es sehr kompliziert machen und ist vielleicht über Modul-Templates besser gelöst.
Vielleicht noch Hinweis auf das "warum" in Header anbringen?
Ok.
- sonst ein cooles Stück Code. Kann ich wirklich gut gebrauchen!
Na, das wollte ich hören ... :wink:

Gruß
HerrB
Bitte keine unaufgeforderten PMs oder E-Mails -> use da Forum!

Newsletter: V4.4.x | V4.6.0-15 (Module, Backend) | V4.6.22+
Standardartikelliste: V4.4.x | V4.6.x
http://www.contenido.org/forum/search.php | http://faq.contenido.org | http://www.communido.net

HerrB
Beiträge: 6935
Registriert: Do 22. Mai 2003, 12:44
Wohnort: Berlin
Kontaktdaten:

Beitrag von HerrB » Di 12. Jun 2007, 16:36

Die erwähnten Fehler (selidcatart) usw. wurden korrigiert. Bitte ggf. erneut herunterladen.

Gruß
HerrB
Bitte keine unaufgeforderten PMs oder E-Mails -> use da Forum!

Newsletter: V4.4.x | V4.6.0-15 (Module, Backend) | V4.6.22+
Standardartikelliste: V4.4.x | V4.6.x
http://www.contenido.org/forum/search.php | http://faq.contenido.org | http://www.communido.net

HerrB
Beiträge: 6935
Registriert: Do 22. Mai 2003, 12:44
Wohnort: Berlin
Kontaktdaten:

Beitrag von HerrB » Do 21. Jun 2007, 21:33

Die Klasse wurde nochmal aktualisiert und sollte nun keine schwerwiegenden Fehler mehr beinhalten. Außerdem sollte man sie nun auch im Frontend verwenden können - das Zell-Template und die Datei, die als Tabellen-Template verwendet wird, können frei bestimmt werden.

Gruß
HerrB
Bitte keine unaufgeforderten PMs oder E-Mails -> use da Forum!

Newsletter: V4.4.x | V4.6.0-15 (Module, Backend) | V4.6.22+
Standardartikelliste: V4.4.x | V4.6.x
http://www.contenido.org/forum/search.php | http://faq.contenido.org | http://www.communido.net

knb
Beiträge: 224
Registriert: Fr 9. Sep 2005, 14:03
Wohnort: Potsdam
Kontaktdaten:

Beitrag von knb » Mi 25. Jul 2007, 16:19

hier noch ein kleiner Änderungsvorschlag

">&nbsp;" ändern zu ">&nbsp;"

und zwar hier, Zeile 193:

Code: Alles auswählen

$oOption = new cHTMLOptionElement($sSpaces.">&nbsp;".urldecode($oDB->f("name")), $sValue);
Mein supersensibler HTML Validator bemängelt noch so einiges.

Kann man option Elemente so rendern lassen dass sie nicht so aufgebaut sind,

Code: Alles auswählen

<option ... /></option>
sondern so :

Code: Alles auswählen

<option ...></option>
oder besser so:

Code: Alles auswählen

<option ...></option>\n
Also es ist nicht so wichtig dies zu beheben, aber diese Warnings
verschleiern andere Fehler die bei mir auftreten, z.B. Nesting fehler und anderes.
Wäre also eine Methode setOptionTemplate auch noch möglich? Habe jetzt
setCellTemplate nicht ausprobiert, sondern den Code nur angeguckt. Probiere ich demnächst mal aus.
Gruss,
Knut

HerrB
Beiträge: 6935
Registriert: Do 22. Mai 2003, 12:44
Wohnort: Berlin
Kontaktdaten:

Beitrag von HerrB » Do 26. Jul 2007, 13:07

Kann man option Elemente so rendern lassen dass sie nicht so aufgebaut sind,
Code:
<option ... /></option>

sondern so :
Code:
<option ...></option>

oder besser so:
Code:
<option ...></option>\n
Das ist ein Bug, der in der V4.6.18 behoben ist. Über das \n am Ende muss ich mal nachdenken, da es alle HTML-Elemente betrifft - besser fände ich es persönlich aber auch.
Wäre also eine Methode setOptionTemplate auch noch möglich?
Nein, da der Aufbau eines Options-Elements aus class.htmlelements.php erfolgt, darauf habe ich keinen Einfluss.

Gruß
HerrB
Bitte keine unaufgeforderten PMs oder E-Mails -> use da Forum!

Newsletter: V4.4.x | V4.6.0-15 (Module, Backend) | V4.6.22+
Standardartikelliste: V4.4.x | V4.6.x
http://www.contenido.org/forum/search.php | http://faq.contenido.org | http://www.communido.net

knb
Beiträge: 224
Registriert: Fr 9. Sep 2005, 14:03
Wohnort: Potsdam
Kontaktdaten:

Beitrag von knb » Do 26. Jul 2007, 14:19

als Workaround benutzte ich jetzt

Code: Alles auswählen

$oOption = new cHTMLOptionElement(chr(10). $sSpaces.">&nbsp;".urldecode($oDB->f("name")), $sValue);

chr(10) ist der Newline Character.

Damit sieht der HTML Code für das option Element so aus

Code: Alles auswählen

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;>&nbsp;Goals</option><option id="m6" value="311" style="background-color: rgb(239, 239, 239);">
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;>&nbsp;History</option><option id="m7" value="312" style="background-color: rgb(239, 239, 239);">
womit ich auch leben kann.
Gruss,
Knut

delinquent
Beiträge: 184
Registriert: Fr 17. Aug 2007, 12:15
Kontaktdaten:

Beitrag von delinquent » Mo 7. Apr 2008, 13:53

@HerrB: Ist es in Ordnung, wenn ich die Datei mit in den Archiven ausliefere, die ich auf meinem Blog zum Download anbiete, oder soll ich lieber auf das Thema hier verweisen?

Konkret habe ich für die Implementierung eines Download-Modules auf Deine Klasse zurückgegriffen.

HerrB
Beiträge: 6935
Registriert: Do 22. Mai 2003, 12:44
Wohnort: Berlin
Kontaktdaten:

Beitrag von HerrB » Di 8. Apr 2008, 00:03

Kannste machen... ein Link wäre nicht schlecht für Updates...

Gruß
HerrB
Bitte keine unaufgeforderten PMs oder E-Mails -> use da Forum!

Newsletter: V4.4.x | V4.6.0-15 (Module, Backend) | V4.6.22+
Standardartikelliste: V4.4.x | V4.6.x
http://www.contenido.org/forum/search.php | http://faq.contenido.org | http://www.communido.net

delinquent
Beiträge: 184
Registriert: Fr 17. Aug 2007, 12:15
Kontaktdaten:

Beitrag von delinquent » Di 8. Apr 2008, 08:43

HerrB hat geschrieben:Kannste machen... ein Link wäre nicht schlecht für Updates...
Kein Problem. Meine Contenido-Downloads sind zu finden unter:
http://www.josupeit.com/static~downloads


Gruß,
Manuel

Gesperrt