[phpBB Debug] PHP Warning: in file [ROOT]/ext/tas2580/seourls/event/listener.php on line 213: Undefined array key "FORUM_NAME"
REX_VALUES per foreach? - REDAXO Forum
Hallo,

Wir haben in letzter Zeit festgestellt, dass die Kommunikation via Slack viel schneller und zielführender ist als ein Beitrag im Forum. Aufgrund der neuen und besseren Möglichkeiten der Kommunikation haben wir uns entschlossen das Forum nur noch als Archiv zur Verfügung zu stellen. Somit bleibt es weiterhin möglich hier nach Lösungen zu suchen. Neue Beiträge können nicht mehr erstellt werden.

Wir empfehlen, für deine Fragen/Probleme Slack zu nutzen. Dort sind viele kompetente Benutzer aktiv und beantworten jegliche Fragen, gerne auch von REDAXO-Anfängern! Slack wird von uns sehr intensiv und meistens "rund um die Uhr" benutzt :-)
Selbst einladen kannst Du dich hier: https://redaxo.org/slack/
Konrad
Beiträge: 23
Registriert: 26. Apr 2007, 15:25

REX_VALUES per foreach?

6. Feb 2009, 16: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!

nik
Beiträge: 112
Registriert: 9. Dez 2008, 21:17

6. Feb 2009, 16: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);

Konrad
Beiträge: 23
Registriert: 26. Apr 2007, 15:25

6. Feb 2009, 18: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.

nik
Beiträge: 112
Registriert: 9. Dez 2008, 21:17

6. Feb 2009, 18: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 ;)

Benutzeravatar
Markus.Staab
Entwickler
Beiträge: 9634
Registriert: 29. Jan 2005, 15:50
Wohnort: Aschaffenburg/Germany
Kontaktdaten: ICQ Website

7. Feb 2009, 12: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

Konrad
Beiträge: 23
Registriert: 26. Apr 2007, 15:25

7. Feb 2009, 13: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

Benutzeravatar
Markus.Staab
Entwickler
Beiträge: 9634
Registriert: 29. Jan 2005, 15:50
Wohnort: Aschaffenburg/Germany
Kontaktdaten: ICQ Website

7. Feb 2009, 19:30

Ich schiebs mal rüber..

Grüße,
Markus

webdesign-www
Beiträge: 8
Registriert: 24. Apr 2010, 10:52

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

17. Okt 2010, 20: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! :)

Benutzeravatar
Markus.Staab
Entwickler
Beiträge: 9634
Registriert: 29. Jan 2005, 15:50
Wohnort: Aschaffenburg/Germany
Kontaktdaten: ICQ Website

25. Okt 2010, 16:51

Hi,

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

Gruß,
Markus

Zurück zu „Sonstiges“