Mehrere Checkboxes taglib aus DB holen und ausgeben

Im Entwickler-Forum können Implementierungsdetails sowie Alternativen der Umsetzung diskutiert werden. // Here, developers can discuss implementation details of features of their projects.
Antworten
welworx
Beiträge: 620
Registriert: 27.09.2010, 19:29:44

Mehrere Checkboxes taglib aus DB holen und ausgeben

Beitrag von welworx » 26.10.2010, 15:49:49

Hallo!

Ich bin mir nicht sicher ob der titel aussagekräftig ist, aber ich stehe vor folgendem problem:

Ich muss aus Db einträgen checkboxes erstellen um sie im formular nutzten zu können.

Wenn ich im Basecontroller den entsprechenden Taglib code erzeuge

Code: Alles auswählen

<form:checkbox name="extras[]" value="$ExtraID" [checked="checked"] />
und die dann an einen placeholder zurückgebe, steht der tag 1:1 dort (sprich wird nicht verarbeitet).

Auch der versuch das über einen Iterator laufen zu lassen, ging leider schief, da man ja keinen taglib in einem taglib nutzen kann.

Code: Alles auswählen

<html:iterator name="extras">
       <iterator:item >
            <item:placeholder name="titel" /><form:checkbox name="extraa[]" value='<item:placeholder name="ExtraID" />' [checked="checked"] />
       </iterator:item>
</html:iterator>
Wie kann man das problem lösen? (leider habe ich nichts passendes im forum gefunden).

Ich vermute mal, dass man im basecontroller dazu ein form_taglib_checkbox Objekt erzeugt und dann transformiert und das ergebnis mittels placeholder zurück gibt. oder?

Gibt es eine möglichkeit einen Teststring mit Taglib definitionen im basecontroller zu parsen und dann das ergebnis einfach in einen placeholder einzusetzten? (wenn ja wie macht man das?)

Anmerkung: Mir ist schon klar, dass man hier einfacherweise den html code schreiben könnte und den übergibt, aber das ist nicht das ziel.

welworx
Beiträge: 620
Registriert: 27.09.2010, 19:29:44

Re: Mehrere Checkboxes taglib aus DB holen und ausgeben

Beitrag von welworx » 26.10.2010, 16:56:38

Eine Möglichkeit:
Nach einigem suchen und probieren habe ich folgendes macht, was auch funktioniert (eingetragen im DocumentController):

$form = &$this->__getForm('AddSpeise');

$extra = array(array("titel" => "sowas", "ExtraID" => "1"), array("titel" => "test", "ExtraID" => "1"));
foreach ($extra as $elem) {
$extraBescrheibung = $form->addFormContentBeforeMarker('extras', $elem['titel'] );

$extraObjectID = $form->addFormElementBeforeMarker('extras', 'form:checkbox', array('name' => $elem['titel'], "value" => $elem['ExtraID']));
$extraElement = &$form->getFormElementByObjectID($extraObjectID);
$form->addFormContentBeforeMarker('extras', "<br />" );
}
Leider beantwortet das meine Frage nicht, ob es möglich ist, im taglibs aus der db zu holen und zu transformieren.

Diese Lösung wirft aber dafür eine weitere Frage auf. Wie könnte man das machen, dass man die so erhaltenen Felder mit dem Iterator anordnen kann? (Mir würde das deutlich besser gefallen, da man so layout und progammierung besser trennen könnte).

Benutzeravatar
dr.e.
Administrator
Beiträge: 4533
Registriert: 04.11.2007, 16:13:53

Re: Mehrere Checkboxes taglib aus DB holen und ausgeben

Beitrag von dr.e. » 27.10.2010, 23:21:16

Hallo welworx,

sorry für die verspätete Antwort.

Das APF hat aus Performance-Gründen eine Limitierung bei den verwendeten Tag-Hierarchien. Ein Tag ist zudem - das ist vor allem bei den Formular-Tags der Fall - an seine Umgebung gebunden. Er muss wegen der automatischen Befüllung, Validierung und Filterung innerhalb eines <html:form />-Tags definiert werden.

In deinem Fall lässt sich das auslesen von Werten und anbieten von Formular-Elementen sehr elegant mit dem dynamischen Formular-Feature realisieren. Iterator fällt aus, weil du den Tag dann nicht innerhalb eines Formulars erzeugst. Was die Formatierung angeht und ich denke das meinst du mit "elegant" würde ich auf "<br />"'s & Co verzichten und das per CSS stylen. Dann kannst du so viele Checkboxen wie nötig ausgeben und brauchst keine extra Formatierung zu setzen. Damit ist ebenfalls das Thema Trennung Design und Code erschlagen.

Du bist also absolut auf dem richtigen Weg und deine Lösung ist für meine Begriffe schonrichtig gut! :) Wenn du möchtest, schaue ich mir deine fertige Lösung gerne an und wir können noch kleine Optimierungen diskutieren.
Viele Grüße,
Christian

welworx
Beiträge: 620
Registriert: 27.09.2010, 19:29:44

Re: Mehrere Checkboxes taglib aus DB holen und ausgeben

Beitrag von welworx » 28.10.2010, 17:13:22

Gibt es bereits eine elegante Lösung um ein label der Checkbox tags zu realisieren? Dann könnte man dort sehr fein den beschreibungstext einfügen und das alles mit css formatieren.

Ist es, mal abgesehen von Formulartags, überhaupt möglich, tags im controller als string auszugeben und anschließend im view zu verwenden? (gibt es da irgendwie ne möglichtkeit. Eventuell das selbst zu transformieren oder so?)
... ich frage das vorallem auch, da ich mir sowas in der art in dem Post Einfach zu wartendes CMS mit GORM überlegt hätte.

Benutzeravatar
dr.e.
Administrator
Beiträge: 4533
Registriert: 04.11.2007, 16:13:53

Re: Mehrere Checkboxes taglib aus DB holen und ausgeben

Beitrag von dr.e. » 28.10.2010, 22:27:36

Hallo welworx,
Gibt es bereits eine elegante Lösung um ein label der Checkbox tags zu realisieren? Dann könnte man dort sehr fein den beschreibungstext einfügen und das alles mit css formatieren.
Diese kannst du doch auch mit addFormContent[Before|After]Marker() hinzufügen. Es scheint zwar nicht so elegant HTML im Controller zu erzeugen, aber der Umfang hält sich in Grenzen. Damit sehe ich keine Veranlassung das als "nicht elegant" anzusehen.
Ist es, mal abgesehen von Formulartags, überhaupt möglich, tags im controller als string auszugeben und anschließend im view zu verwenden?
In welcher Art möchtest du diese als Strings ausgeben? Grundsätzlich ist das auf Basis der Tag-Klassen-Signatur immer möglich und wird beispielsweise bei html_taglib_template auch so praktiziert. Sofern du dieses nicht per transformOnPlace() direkt anzeigen möchtest, kannst du dir den transformierten Output per transformTemplate() als String zurückgeben lassen und weiter verarbeiten.
(gibt es da irgendwie ne möglichtkeit. Eventuell das selbst zu transformieren oder so?)
Sofern du Zugriff auf einen Knoten des APF-DOM-Baums hast, kannst du diesen jederzeit in einer anderen Taglib oder in einem Controller per transform() transformieren. Dass diese Methode immer am Schluss rekursiv auf den Baum aufgerufen wird ist auch "nur" Konvention und verursacht nichts anderes.
... ich frage das vorallem auch, da ich mir sowas in der art in dem Post Einfach zu wartendes CMS mit GORM überlegt hätte.
Für ein CMS gelten nochmal andere Aufgabenstellungen. Aber eine kann durchaus sein, in einem Text, den ein Redakteur bearbeiten kann, Tags in Form von speziellen Platzhaltern zu ermöglichen um dadurch Module einzubinden. Hier kannst du in der jeweils zuständigen Komponente einfach die textuellen Elemente analysieren und selbst DOM-Nalaysen und Transformationen durchführen. Wenn du Interesse hast, poste ich mal ein bischen Quellcode.
Viele Grüße,
Christian

welworx
Beiträge: 620
Registriert: 27.09.2010, 19:29:44

Re: Mehrere Checkboxes taglib aus DB holen und ausgeben

Beitrag von welworx » 29.10.2010, 00:39:40

Diese kannst du doch auch mit addFormContent[Before|After]Marker() hinzufügen.
... die idee hatte ich auch schon, war mir nur nicht sicher ob es nicht vlt schon einen entsprechenden befehl oder so gibt. Damit hat sich das erledigt.

Bezüglich der Strings dachte ich daran, dass man einfach einen taglib aus der db bekommt, und denn dann halt entsprechend transformiert, damit der code erscheint, für den der tag steht (kann das leider ned besser ausdrücken, hoffe aber das dies verständlich ist.)
html_taglib_template
werd mich morgen damit beschäftigen, da ich grad ned so genau weiß was du damit meinst.

Wie meinst du das mit den textuellen elementen?

Ich dachte eigentlich daran, dass ich, als seitenersteller, in der db das view einer seite ablege und dass dann jedesmal wenns gebraucht wird geladen und entsprechend transformiert wird. So ist es einfach möglich für seiten die zb mehrere boxen oder module haben das zusammen zu bauen. (vlt ned die schönste methode aber ich glaube eine recht praktische und einfach wartbare.) Alternativ könnte man das sicher auch so machen, dass das einfach als html datei in einem unterordner von den templates ausgegeben wird, wobei mir die db version eigentlich besser gefallen würd.

Mal hypothetisch, ich hätte den folgenden Taglib als string im controller vorliegen, wie könnte ich das entsprechend ausgeben?

Code: Alles auswählen

$content='<core:importdesign namespace="modules::guestbook::pres::templates" template="guestbook" guestbookid="{GB_ID}" />';
Über ein wenig Quellcode würde ich mich sehr freun.

Du hast auch mal erwähnt, dass du für deine eigenen zwecke ein cms gemacht hast, dass halt irgendwie zusammen gebaut ist. Könntest du das vlt auch posten, damit ich mal ein bisserl reinstöbern könnte?

Benutzeravatar
dr.e.
Administrator
Beiträge: 4533
Registriert: 04.11.2007, 16:13:53

Re: Mehrere Checkboxes taglib aus DB holen und ausgeben

Beitrag von dr.e. » 29.10.2010, 10:48:39

Hallo welworx,

ich nehme mir am Wochenende die Zeit dir ein kleines beispiel zu bauen, das ist sicher einfacher als theoretische Diskussion. Das "CMS" stelle ich dir als ZIP dann zur Verfügung.
Viele Grüße,
Christian

welworx
Beiträge: 620
Registriert: 27.09.2010, 19:29:44

Re: Mehrere Checkboxes taglib aus DB holen und ausgeben

Beitrag von welworx » 29.10.2010, 16:44:10

Perfekt!

Besten Dank!

Benutzeravatar
dr.e.
Administrator
Beiträge: 4533
Registriert: 04.11.2007, 16:13:53

Re: Mehrere Checkboxes taglib aus DB holen und ausgeben

Beitrag von dr.e. » 05.11.2010, 22:19:56

Hallo welworx,

danke für den Reminder, ich hatte in der Tat noch keine Gelegenheit Quelltext zu schreiben. Versprochen ist jedoch versprochen und hier habe ich etwas vorbereitet. Das Beispiel besteht aus einem einfachen Template, das du wie folgt mit dem Page-Controller ausgeben lassen kannst:

Code: Alles auswählen

$page = new Page();
$page->loadDesign('dbform::pres::templates', 'dynamic_checkboxes');
echo $page->transform();
Der Code hängt anbei und ist ohne weitere Konfiguration lauffähig. Ich habe zunächst darauf verzichtet, die Checkboxen tatsächlich aus der Datenbank zu laden, denn das ist meiner Meinung nach nicht Fokus der Aufgabe. Sollte dir das ebenso wichtig sein, baue ich das Beispiel noch entsprechend um.

Hier der Quellcode:
dbform.zip
(1.77 KiB) 120-mal heruntergeladen
Viele Grüße,
Christian

welworx
Beiträge: 620
Registriert: 27.09.2010, 19:29:44

Re: Mehrere Checkboxes taglib aus DB holen und ausgeben

Beitrag von welworx » 06.11.2010, 01:04:02

Hallo Christian,

vielen herzlichen Dank. Ich werde mir CMS mal installieren und mir das in den nächsten Tagen ansehen. Freu mich schon!

LG

Thalo
Beiträge: 244
Registriert: 10.08.2009, 16:56:52

Re: Mehrere Checkboxes taglib aus DB holen und ausgeben

Beitrag von Thalo » 06.11.2010, 18:22:24

N'bend Doc,
@author Christian Sch�fer
@version
* Version 0.1, 08.05.2006<br />
Von wem sind denn die Sourcen nun? Leider ist ja nicht überall eine Autor-Angabe. Ferner sind die Sourcen ja auch schon ein wenig in die Jahre gekommen. :)

Benutzeravatar
dr.e.
Administrator
Beiträge: 4533
Registriert: 04.11.2007, 16:13:53

Re: Mehrere Checkboxes taglib aus DB holen und ausgeben

Beitrag von dr.e. » 07.11.2010, 14:08:25

Hallo Thalo,
Von wem sind denn die Sourcen nun? Leider ist ja nicht überall eine Autor-Angabe.
die meisten Sourcen sind von mir. Die Namens-Ändeurng lässt sich aber leicht erklären: ich habe im Jahr 2007 geheiratet und den Namen meiner Frau angenommen.
Ferner sind die Sourcen ja auch schon ein wenig in die Jahre gekommen. :)
Ich weiß nicht aus welcher Datei du das Snippet hast, aber es gibt tatsächlich Komponenten, die schon einige Jahre existieren. Einige davon haben sich so gefestigt, dass daran keine Arbeiten mehr notwendig sind (z.B. der Core des Frameworks), andere sind tatsächlich in die Jahre gekommen und bedürfen einer Überarbeitung (z.B. mailSender). Das ist aber meiner Ansicht nach kein Problem, da das APF a) offen für alle anderen Libs ist (z.B. Integration von PHPMailer) und b) es ja weiter entwickelt wird. Damit ist sichergestellt, dass "alte" Komponenten zur gegebenen Zeit einem Refresh unterzogen werden. Wenn du dich an der Aktualisierung beteiligen möchtest, bist du gerne eingeladen. Ralf und Tobias sind bereits aktive Committer. Ich freue mich daher immer über weitere Hilfe bei der Pflege des Source-Codes und der Einführung frischer Features.
Viele Grüße,
Christian

Thalo
Beiträge: 244
Registriert: 10.08.2009, 16:56:52

Re: Mehrere Checkboxes taglib aus DB holen und ausgeben

Beitrag von Thalo » 07.11.2010, 19:26:00

Hi Doc,

hieß Manko nicht auch Schäfer mit Nachnahmen? :)

Benutzeravatar
dr.e.
Administrator
Beiträge: 4533
Registriert: 04.11.2007, 16:13:53

Re: Mehrere Checkboxes taglib aus DB holen und ausgeben

Beitrag von dr.e. » 07.11.2010, 19:36:14

Nein! Leider falsch geraten. :D
Viele Grüße,
Christian

Antworten

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast