REX_VALUES per foreach?

Ideen/Wünsche für die neue Version

REX_VALUES per foreach?

Beitragvon Konrad » 6. Feb 2009, 15:26

Ich mag ja Tomaten auf den Augen haben, aber gibt es eine PHP-Variable, in der die REX_VALUEs zur Verfügung stehen? Um eine Tabelle anzeigen zu können, muss ich die ablaufen, finde aber keinen ordentlichen Weg, direkt auf die VALUES zuzugreifen --
Code: Alles auswählen
for(i=0; i<20; i++) {
irgendwas mit REX_VALUE[$i]; }
tut es ja aus klaren Gründen nicht.

Zu Hülfe, zu Hülfe!
Konrad
 
Beiträge: 21
Registriert: 26. Apr 2007, 14:25

Beitragvon nik » 6. Feb 2009, 15:35

Imho kann das nicht gehen, weil die Klammern Teil des Ersetzungsstrings sind. Es sind zu dem Zeitpunkt keine echten Indizies.

class.rex_var_value.inc.php hat geschrieben:$content = str_replace($var . '[' . $param_str . ']', $replace, $content);
nik
 
Beiträge: 112
Registriert: 9. Dez 2008, 20:17

Beitragvon Konrad » 6. Feb 2009, 17:26

nik hat geschrieben:Imho kann das nicht gehen, weil die Klammern Teil des Ersetzungsstrings sind. Es sind zu dem Zeitpunkt keine echten Indizies.


Na klar :D Die Substitution erfolgt ausserdem vor dem eval (in dem Sinne verhalten sich die Redaxo-Konstanten wie Konstanten, die man per define definiert hat). Damit ist jeglicher Ansatz den Index von REX_VALUE zu verwenden zum Scheitern verurteilt.

So kommt es ja auch meine Frage, ob es ein echtes PHP-Array gibt, von dem man die Werte des aktuellen Slices abfragen kann. Aber wahrscheinlich sollte ich einfach den Source Code lesen -- vielleicht kann ich im eval-Block auf die Datenstruktur zurückgreifen, die die Substitution durchführt.
Konrad
 
Beiträge: 21
Registriert: 26. Apr 2007, 14:25

Beitragvon nik » 6. Feb 2009, 17:45

Naja, das ist auch nicht vielversprechender. Paar Zeilen vorher:

Code: Alles auswählen
    foreach ($matches as $match)
    {
      list ($param_str, $id) = $match;

      if ($id > 0 && $id < 21)
      {
        $replace = $this->getValue($sql, 'value' . $id);


Also zusammengefasst:

- regulärer Ausdruck liest REX_VALUE[\d]
- interpretiert den Indexstring als Spaltennummer einer DB Abfrage
- ersetzt das Ganze

Aber wahrscheinlich sollte ich einfach den Source Code lesen

Na dann viel Spaß! Das ist so oft verschachtelt, ich war jetzt bei getBEOutput () und hab keine Lust mehr. Ich glaube, ich würde direkt auf die DB zugreifen ;)
nik
 
Beiträge: 112
Registriert: 9. Dez 2008, 20:17

Beitragvon Markus.Staab » 7. Feb 2009, 11:37

Hi,

nein es gibt kein Array, du kannst dir aber eines bauen:

Code: Alles auswählen
$arr = array('REX_VALUE[1]','REX_VALUE[2]','REX_VALUE[3]','REX_VALUE[4]',...);

Den Quellcode an dieser Stelle zu durchforsten ist keine gute Idee. Die Geschichte mit den REX-Variabeln ist wohl der komplexteste Teil im System. Die Implementierung ist soo undurchsichtig, da die Problematik sehr kompliziert ist..
Die Variablen sind alle von sehr vielen versch. Faktoren abhängig und an sehr vielen verschiedenen Stellen anders auszuwerten..

Das ganze war in den alten Versionen noch sehr viel schlechter implementiert... Das wurde mit REDAXO 4.x schonmal komplett überarbeitet...

Grüße,
Markus
Benutzeravatar
Markus.Staab
Entwickler
 
Beiträge: 9781
Registriert: 29. Jan 2005, 14:50
Wohnort: Aschaffenburg/Germany

Beitragvon Konrad » 7. Feb 2009, 12:26

Hallo Markus,

Markus.Staab hat geschrieben:
nein es gibt kein Array, du kannst dir aber eines bauen:

Code: Alles auswählen
$arr = array('REX_VALUE[1]','REX_VALUE[2]','REX_VALUE[3]','REX_VALUE[4]',...);



Auf eine ähnliche Lösung bin ich gestern abend auch schon gekommen:
Code: Alles auswählen
values = array (1 => 'REX_VALUE[1]',2 => 'REX_VALUE[2]',3 => 'REX_VALUE[3]',
                         4 => 'REX_VALUE[4]',5 => 'REX_VALUE[5]',6 => 'REX_VALUE[6]',
                         7 => 'REX_VALUE[7]',8 => 'REX_VALUE[8]',9 => 'REX_VALUE[9]');


Meine Lösung hat noch den Bequemlichkeitsvorteil, dass man mit foreach ($values as $id => $val) auch gleich noch den Index abgreifen kann.

Dass der Code nicht so ganz transparent ist ... So ist das Leben manchmal. Ich schreibe trotzdem einen Eintrag auf den Wunschzettel :-)

Danke!
Konrad
Konrad
 
Beiträge: 21
Registriert: 26. Apr 2007, 14:25

Beitragvon Markus.Staab » 7. Feb 2009, 18:30

Ich schiebs mal rüber..

Grüße,
Markus
Benutzeravatar
Markus.Staab
Entwickler
 
Beiträge: 9781
Registriert: 29. Jan 2005, 14:50
Wohnort: Aschaffenburg/Germany

$REX_VALUE[$count] => Gibt es schon eine Lösung?

Beitragvon webdesign-www » 17. Okt 2010, 19:15

Hallo zusammen,

gibt es schon eine Lösung, dass man anstatt der definierten Konstanten, wie REX_VALUE[1], REX_VALUE[2], ... usw. dies mit beispielsweise einer Variable wie in der Form $REX_VALUE[$count] automatisch hochzählen lassen kann? Oder gibt es speziell für solche Fälle etwas (außer die ganzen Konstanten in einem Array)?

Danke $ viele Grüße! :)
webdesign-www
 
Beiträge: 8
Registriert: 24. Apr 2010, 09:52

Beitragvon Markus.Staab » 25. Okt 2010, 15:51

Hi,

die oben genannte Lösung ist noch aktuell. Es gibt bisher noch keine andere Möglichkeit.

Gruß,
Markus
Benutzeravatar
Markus.Staab
Entwickler
 
Beiträge: 9781
Registriert: 29. Jan 2005, 14:50
Wohnort: Aschaffenburg/Germany


Zurück zu Wunschliste

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast