for ($i=0;$i<5;$i++) echo "CMS_IMG[$i]"; ???

Gesperrt
pinhead84
Beiträge: 14
Registriert: Fr 14. Jan 2005, 06:15
Wohnort: Berlin
Kontaktdaten:

for ($i=0;$i<5;$i++) echo "CMS_IMG[$i]"; ???

Beitrag von pinhead84 » Fr 14. Jan 2005, 06:35

Schönen guten Morgen...
ich beschäftige mich jetzt seit ein paar Tagen mit Contenido und muss sagen, dass mir die Flexibilität des Systems sehr zusagt. Allgemein erstmal würde mich mal interessieren welche Zielgruppe Contenido primär ansprechen möchte ??? - Privat-Kunden, kleine Unternehmen, Portalbetreiber - für wen haltet ihr es angemessen ??? - Das aber nur am Rande, komme ich mal zu meinem Problem - obwohl die Titelzeile es so ziemlich auf den Punkt bringt :)

Ich verwende auf meiner Seite das Hauptnavigationsmodul (CMS_CONTAINER[1]) mit Menüpunkten verteilt auf 2 Ebenen. Klickt man nun auf einen Menüpunkt in Ebene 1 passt sich die Navigation entsprechend der Untermenüpunkte korrekt an.
Nun soll im Hauptbereich der Seite (CMS_CONTAINER[2]) eine Auflistung der existierenden Unterkategorien mit spezifischem Bild und Text realisiert werden.

Für das Problem hab ich folgendes Modul geschrieben:

Code: Alles auswählen

<?php
echo "<p>CMS_HTML[1]</p>";
echo "<table width=\"100%\">";
$rowTemplate = "<tr><td colspan=\"2\"><hr></td></tr>".
	"<tr><td>{image}</td><td>{text}</td></tr>";

$db  = new DB_Contenido;

$sql = "SELECT idcat FROM ".$cfg["tab"]["cat"]." WHERE parentid = '$idcat'";
$db->query($sql);

$i=1;
while ($db->next_record()) {
	$childid = $db->f("idcat");
	$temp	=	str_replace("{image}","<img src=\"CMS_IMG[$i]\">",$rowTemplate);
	echo str_replace("{text}","CMS_IMGDESCR[$i]",$temp);
	$i++;
}

echo "</table>";

?>
Der Ansatz ist warscheinlich nicht der eleganteste, aber er funktioniert fürs Erste. Mein Problem ist jetzt, das bei der Ausgabe der Seite die gesetzten Platzhalter CMS_IMG[$i] bzw. CMS_IMGDESCR[$i] nicht vom System nicht berücksichtigt werden. Sobald ich $i mit einem Zahlenwert ersetze funktioniert alles prächtig.

Ist das nun ein Denkfehler meinerseits, ein Bug oder gar ein konzeptioneller Fehler ??? :) - Würde mich freuen, wenn einer von euch Rat wüsste, ein Workaround täte es ja auch ;)

Mit freundlichen Grüßen
Andy

kummer
Beiträge: 2423
Registriert: Do 6. Mai 2004, 09:17
Wohnort: Bern, Schweiz
Kontaktdaten:

Beitrag von kummer » Fr 14. Jan 2005, 09:17

ein denkfehler. die cms-variablen werden mit einer regex ersetzt. und zwar nur dann, wenn sie im index einen zahlenwert aufweisen.

was du vor hast, geht so nicht.

was du machen kannst:

z.b. 10 oder 20 oder mehr cms-variablen in ein array geben und dann diesen durchlaufen.

gruss,
andreas
aitsu.org :: schnell - flexibel - komfortabel :: Version 2.2.0 (since June 22, 2011) (jetzt mit dual license GPL/kommerziell)

pinhead84
Beiträge: 14
Registriert: Fr 14. Jan 2005, 06:15
Wohnort: Berlin
Kontaktdaten:

Beitrag von pinhead84 » Fr 14. Jan 2005, 09:27

hallo...
danke für deine schnelle antwort...
kummer hat geschrieben:was du vor hast, geht so nicht.
schade, aber danke für den tipp - werd ich gleich mal ausprobiern...

ist das absichtlich so kompliziert gemacht ? ;)

timo
Beiträge: 6284
Registriert: Do 15. Mai 2003, 18:32
Wohnort: Da findet ihr mich nie!
Kontaktdaten:

Beitrag von timo » Fr 14. Jan 2005, 11:18

hmm naja sagen wir's mal so: Daran hatte keiner bei der Konzeption, die schon Jahre zurueckliegt, gedacht ;)

Aber versprochen: In einer der naechsten Versionen wird das umgebaut werden ;)

kummer
Beiträge: 2423
Registriert: Do 6. Mai 2004, 09:17
Wohnort: Bern, Schweiz
Kontaktdaten:

Beitrag von kummer » Fr 14. Jan 2005, 20:16

ein kleiner tipp für die weiterentwicklung:

ich habe für conFlakes in der neusten version (noch nicht online) die ausführung von php vorgesehen. dabei ersetze ich nicht platzhalter im phpcode, sondern lese aus einer auskommentierten bereich mittels einer regex-funktion die variablen aus, welche dem modul zur verfügung gestellt werden sollen. ich unterscheide dabei zurzeit ausschliesslich skalare variablen und arrays.

ein eigenes konfigurationsscript für jedes modul entfällt, da ich für jeden typ ein geeignetes eingabefeld automatisch erzeugen kann (allerdings ist diese freilich nicht grundsätzlich ausgeschlossen). die übergabe der variablen erfolgt durch ausführung des moduls im kontext einer funktion, wobei vor dem eval einfach die gewünschten variablen zur verfügung gestellt werden. dabei besteht dann auch nicht die gefahr, globale und für die weitere ausführung von contenido notwendige variablen zu überschreiben, da die gültigkeit dieser variablen nur innerhalb der funktion besteht. werden im modul globale variablen benötigt, müssen diese dann einfach über $GLOBALS angesprochen werden.

wie gesagt habe ich das für conFlakes bereits realisiert (einfach zurzeit noch nicht online, da in testphase). falls das im neusten cvs-snapshot nicht bereits realisiert ist, bin ich gerne bereit, mein script für die konzeptionelle weiterentwicklung des modulsystems zur verfügung zu stellen.

um die weiterverwendung bestehender module weiterhin zu ermöglichen (abwärtskompatibiltität), können beide systeme nach meiner einschätzung auch nebeneinander bestehen (sowoh bereitstellung von variablen wie auch preg_replace). und fall die erstellung eines geschlossenen ausführungskontextes aus etwelchen überlegungen nicht in frage kommen sollte, könnte man sich auch auf eine bestimmte modulvariable einigen (assoziatives array), welche die variablen aufnimmt und dem modul zur verfügung stellt.

mfg,
andreas

ps: ein kleiner nachtrag noch: die speicherung der variablen (und zwar sämtlicher auf einmal) könnte dann einfach nach serialisierung erfolgen. und die bereitstellung im geschlossenen kontext einfach durch wiederherstellung der serialisierten daten. also letztlich vermutlich einfacher (in der entwicklung) als das bisherige system.
aitsu.org :: schnell - flexibel - komfortabel :: Version 2.2.0 (since June 22, 2011) (jetzt mit dual license GPL/kommerziell)

imu
Beiträge: 26
Registriert: Fr 24. Dez 2004, 22:06
Kontaktdaten:

Beitrag von imu » Mo 17. Jan 2005, 00:37

[quote="kummer"]z.b. 10 oder 20 oder mehr cms-variablen in ein array geben und dann diesen durchlaufen.[/quote]

ähm... das würde mich näher interessieren. Worauf ich nach längerem Suchen im Quellcode kam ist, das "CMS_LINK[CMS_VALUE[0]]" funktioniert und somit das selbe Modul beliebig oft im Template verwendet werden kann, indem man die "Modulnummer" konfiguriert.

meinst du mit "in einen Array geben" im Output
$meinArray = array("CMS_VALUE[0]", "CMS_VALUE[1]", "CMS_VALUE[2]")
oder kannst du schon aus dem Input heraus einen CMS_VALUE-Array übergeben, dessen Einträge dann per regex ersetzt werden?.

kummer
Beiträge: 2423
Registriert: Do 6. Mai 2004, 09:17
Wohnort: Bern, Schweiz
Kontaktdaten:

Beitrag von kummer » Mo 17. Jan 2005, 08:30

imu hat geschrieben:$meinArray = array("CMS_VALUE[0]", "CMS_VALUE[1]", "CMS_VALUE[2]")
genau so.
aitsu.org :: schnell - flexibel - komfortabel :: Version 2.2.0 (since June 22, 2011) (jetzt mit dual license GPL/kommerziell)

Gesperrt