[phpBB Debug] PHP Warning: in file [ROOT]/ext/tas2580/seourls/event/listener.php on line 213: Undefined array key "FORUM_NAME"
REDAXO Forum • REX_ARTICLE[] Abfrage ob leer
Seite 1 von 1

REX_ARTICLE[] Abfrage ob leer

Verfasst: 10. Mär 2011, 19:03
von HaRT
Hallo liebe REDAXO-Gemeinde,

experimentiere gerade mit der Version 4.3.
Geht sowas hier eleganter in kpl. neuer Syntax für die Artikelausgabe mittels REX_ARTICLE[]:

Code: Alles auswählen

      <div id="rechts-block">
        <?
        if ($this->getArticle(1) != "") {
        ?>
          REX_ARTICLE[ctype=2]    
        <?
        } else {  
        ?>
          REX_ARTICLE[id=3]
        <?
        }
        ?>
      </div>
?
Habe schon alles durchsucht - auch die Geschichten mit "ifempty" und "instead" - aber wahrscheinlich stehe ich auf dem berühmten Schlauch.
Dies hier geht jedenfalls nicht:

Code: Alles auswählen

REX_ARTICLE[ctype=2 ifempty='REX_ARTICLE[id=3]']
Kann mich jemand aufklären? Danke.

Re: REX_ARTICLE[] Abfrage ob leer

Verfasst: 11. Mär 2011, 10:25
von Thomas.Blum
Hej,

du musst immer die id mit angeben.

Kleines Bspl.:

Code: Alles auswählen

REX_ARTICLE[id="1" ctype="2" prefix="<p>" suffix="</p>" ifempty="Kein Inhalt vorhanden"]
ein anderes Bspl. bei der Modulausgabe:

Code: Alles auswählen

REX_LINK[id="1" prefix='<a href="' suffix='">']REX_VALUE[id="1" ifempty="mehr..."]REX_LINK[id="1" instead="</a>"]
vg Thomas

Re: REX_ARTICLE[] Abfrage ob leer

Verfasst: 11. Mär 2011, 13:06
von HaRT
Hallo Thomas,

danke für deine Antwort.
Meine Fragestellung zielte aber in eine andere Richtung. Ich versuche mal zu konkretisieren:

Allgemein stellt sich mir die Frage, wie man Ausdrücke wie "REX_ARTICLE[]" innerhalb von PHP-Code verwenden kann (mit "echo" oder "print" kommt nicht des Erwartete).

Speziell (bezogen auf mein kleines Beispiel) steht die Frage, wie man Folgendes bewerkstelligen kann:
Wenn Inhalt von ctype 2 des aktuellen Artikels leer ist, dann gebe den Inhalt von Artikel 3 aus.
Das funktioniert so mit meinem Codeschnipsel - aber ich halte das so für nicht wirklich elegant. Außerdem würde ich gerne die alte Form "$this->getArticle()" in der Bedingungsabfrage vermeiden.

vG Harald

Re: REX_ARTICLE[] Abfrage ob leer

Verfasst: 11. Mär 2011, 13:16
von Gregor.Harlan
Hallo Harald,

REX_ARTICLE[] funktioniert nur außerhalb von PHP und lässt sich nicht verschachteln. $this->getArticle() gibt es zwar länger als REX_ARTICLE[], ist aber weiterhin aktuell und die PHP-Variante.

Ich würde das so lösen:

Code: Alles auswählen

<?php
$ctype2 = $this->getArticle(2);
if($ctype2 != '') {
  echo $ctype2;
} else {
  $a = new rex_article(3);
  echo $a->getArticle();
}
?>
Bei deiner Variante würde der Code des Ctype 2 doppelt ausgeführt werden (wenn nicht leer), was teilweise zu unerwünschten Ergebnissen führen kann.

Gruß, Gregor

Re: REX_ARTICLE[] Abfrage ob leer

Verfasst: 11. Mär 2011, 13:22
von Thomas.Blum
Hej,

ohne PHP kommst du nicht weiter.

Probier mal das:

Code: Alles auswählen

<?php
$a = new rex_article(3);
$c = htmlspecialchars($a->getArticle());
?>
REX_ARTICLE[ctype="2" ifempty='<?php echo $c; ?>']
vg Thomas

Re: REX_ARTICLE[] Abfrage ob leer

Verfasst: 10. Aug 2015, 14:14
von darwin
Hi,
doch nochmal in die Runde frag ...
hat sich bei der Redaxo CMS 46er schon was geändert?
mit dem Ansatz von thomas erhalte ich:

Code: Alles auswählen

REX_ARTICLE[ctype="2" ifempty='<?php echo 'leeer'; ?>']
@@@REX_SPACER@@@leeer@@@REX_SPACER@@@

klar, könnte man ja via

Code: Alles auswählen

str_replace("@@@REX_SPACER@@@", ""); 
rausfiltern.. aber machts Sinn? :oops:

Was ich machen möchte ;) :
Ich würde gerne im Template abfragen ob ein CTYPE gefüllt ist.
Wenn nicht, mach was anderes. Allerdings habe ich da noch iwas im Hinterkopf, das es bei der Verwendung von

Code: Alles auswählen

if($this->getArticle(2) != "" ){
# mach was
}
und

Code: Alles auswählen

$this->getArticle(1) 
probleme mit den xForm Formularen im Frontend (doppeltes senden etc) ... gab(gibt)... oder irr ich mich da.

Danke schonmal.
grz. Chris

Re: REX_ARTICLE[] Abfrage ob leer

Verfasst: 10. Aug 2015, 14:23
von Thomas.Blum
Hej Chris,

doppeltes senden würde so passieren

Code: Alles auswählen

if($this->getArticle(1) != "" ){
  echo $this->getArticle(1);
} 
vorausgesetzt XForm ist in Ctype 1. Daher immer den Content in eine Variable vorher speichern.

vg Thomas