CMS_VAR und CMS_VALUE mit Integer-Variable auslesen...

Gesperrt
hes
Beiträge: 44
Registriert: Di 3. Jan 2006, 17:01
Kontaktdaten:

CMS_VAR und CMS_VALUE mit Integer-Variable auslesen...

Beitrag von hes »

Moin,

folgende Funktion unter Contenido-Version 4.6.4 bekomme ich in einem Modul nicht zum laufen und verstehe nicht warum ... würde mich freuen, wenn mich jemand mal aufklären würde ;-) Über die Suche hier im Forum finde ich dazu nichts gescheites...

Code: Alles auswählen

function FillArrayVarAndValue($iCMSwert)
{
	if ($iCMSwert >= 0) {
		$acmswert = array();
		$acmswert[0] = "CMS_VAR[$iCMSwert]";
		$acmswert[1] = "CMS_VALUE[$iCMSwert]";
		
		return $acmswert;
	}
}

Die Funktion wird z.B. wie folgt aufgerufen: FillArrayVarAndValue(0), es wird ein Array zurückgegeben ... Wert1 ist korrekt, Wert2 ist immer leer.

Ersetze ich in der Funktion den Interger-Wert $iCMSwert direkt durch die Ziffer:
$acmswert[0] = "CMS_VAR[0]";
$acmswert[1] = "CMS_VALUE[0]";

dann funktioniert die Funktion: Wert1 ist korrekt, Wert2 ist korrekt.

Warum kann ich CMS_VAR mit einem Integer-Variable auslesen ... CMS_VALUE aber nicht?

Grmpf ...

Ich würde mich über einen kleinen Hinweis dazu freuen... Danke.
Mfg. hes
emergence
Beiträge: 10653
Registriert: Mo 28. Jul 2003, 12:49
Wohnort: Austria
Kontaktdaten:

Beitrag von emergence »

CMS_VAR und CMS_VALUE sind platzhalter die vor evaluierung des input codes entsprechend ersetzt werden...
man kann sie nicht wie variablen benützen...
*** make your own tools (wishlist :: thx)
mvf
Beiträge: 1758
Registriert: Mo 1. Aug 2005, 00:35
Wohnort: in der schönen Hallertau, mitten im Hopfen
Kontaktdaten:

Re: CMS_VAR und CMS_VALUE mit Integer-Variable auslesen...

Beitrag von mvf »

der kleine hinweis geht in richtung 'suche', wurde schon behandelt

suche mal nach
'cms_value dynamisch'
-> nach allen wörtern suchen
wenn ich recht erinner hat emergence auch mal einen workaround geschaffen

@emergence :D warst wieder schneller LOL
Grüsse, Guido

"A common mistake that people make when trying to design something completely foolproof is to underestimate the ingenuity of complete fools."
Mostly Harmless - Douglas Adams
hes
Beiträge: 44
Registriert: Di 3. Jan 2006, 17:01
Kontaktdaten:

Beitrag von hes »

danke für den Begriff "dynamisch" ... damit hab' ich auch die Treffer bekommen - die ich gesucht habe...

angeblich soll ab 4.5.x funktionieren oder ein Patch geben oder...

aaaber ...
-------------
Modul: Article List Advanced V4.6.x V1.3
Author: Björn Behrens, HerrB
Created: 05.02.2006
Specification: Rezeptionist
-------------
enthält eine Passage:

Code: Alles auswählen

...
# Detail settings
if ($aSettings["Elements"] > 0) {
   for ($i = 0; $i < $aSettings["Elements"]; $i++) {
      $iElementType       = $iDataStart + ($i * 5);
      $iElementIdentifier = $iElementType + 1;
      $iElementWidth      = $iElementType + 2;
      $iElementHeight     = $iElementType + 3;

      $aSettings["k".$i] = array();
      $aSettings["k".$i]["ElementType"]    = "CMS_VALUE[$iElementType]"; // Text, Image, ExtractedImage
      $aSettings["k".$i]["Identifier"]     = "CMS_VALUE[$iElementIdentifier]";
      $aSettings["k".$i]["ElementWidth"]   = "CMS_VALUE[$iElementWidth]"; // Textlength or ImageWidth
      $aSettings["k".$i]["ElementHeight"]  = "CMS_VALUE[$iElementHeight]";
...
warum geht's hier? ... oder sehe ich da einen kleinen aber feinen Unterschied nicht?
Mfg. hes
HerrB
Beiträge: 6935
Registriert: Do 22. Mai 2003, 12:44
Wohnort: Berlin
Kontaktdaten:

Beitrag von HerrB »

Ich würde sagen, Yep. Der Code wird immer ausgeführt. Deiner nur, wenn die Funktion ausgeführt wird.

Technisch passiert folgendes: Im ersten Schritt werden alle möglichen $iElement...-Werte ermittelt und dann in CMS_VALUE[<hier>] eingetragen. Dann werden alle CMS_VALUE[<hier>]-Werte durch die Angaben aus der DB ersetzt.

Deine Funktion wird aber erst ausgeführt, wenn alle Ersetzungen schon vorgenommen wurden - PHP beißt auf Holz.

Du musst also am Anfang Deiner Funktion alle möglichen Werte in einen reguläres Array überführen - dann gehts:

Code: Alles auswählen

$acmswert = array(); 
for ($i = 0; $i <= <DeinMaxWert>; $i++) {
      $acmswert[$i] = array();
      $acmswert[$i]["VAR"] = "CMS_VAR[$i]"; 
      $acmswert[$i]["VAL"] = "CMS_VALUE[$i]";
}
Dieser Code muss im Input außerhalb einer Funktion stehen. Aus dem Grund macht es auch Sinn, die Anzahl der Werte in einem CMS_VAR/CMS_VALUE zu speichern... :wink:

Übrigens, das geht:

Code: Alles auswählen

$iEine = 1;
$iZwei = $iEine + 1;
echo "CMS_VAR[$iZwei]";
Das geht nicht:

Code: Alles auswählen

$iEine = 1;
echo "CMS_VAR[".($iEine + 1)."]";
Das ist der Grund, warum es eigene Variablen für die Stellen gibt... :wink:

Gruß
HerrB
Zuletzt geändert von HerrB am Di 9. Mai 2006, 17:42, 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
hes
Beiträge: 44
Registriert: Di 3. Jan 2006, 17:01
Kontaktdaten:

Beitrag von hes »

danke.
Mfg. hes
Gesperrt