HaRT

REX_ARTICLE[] Abfrage ob leer

10. Mär 2011, 19:03

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.

Benutzeravatar
Thomas.Blum
Entwickler
Beiträge: 5063
Registriert: 24. Aug 2004, 22:11
Wohnort: Dresden
Kontaktdaten: Website

Re: REX_ARTICLE[] Abfrage ob leer

11. Mär 2011, 10:25

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

HaRT

Re: REX_ARTICLE[] Abfrage ob leer

11. Mär 2011, 13:06

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

Benutzeravatar
Gregor.Harlan
Entwickler
Beiträge: 1130
Registriert: 4. Jun 2007, 10:35
Wohnort: Frankfurt am Main

Re: REX_ARTICLE[] Abfrage ob leer

11. Mär 2011, 13:16

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
Zuletzt geändert von Gregor.Harlan am 11. Mär 2011, 13:28, insgesamt 1-mal geändert.
Friends Of REDAXO: Gemeinsame REDAXO-Entwicklung!

Benutzeravatar
Thomas.Blum
Entwickler
Beiträge: 5063
Registriert: 24. Aug 2004, 22:11
Wohnort: Dresden
Kontaktdaten: Website

Re: REX_ARTICLE[] Abfrage ob leer

11. Mär 2011, 13:22

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

Benutzeravatar
darwin
Beiträge: 1725
Registriert: 2. Jan 2007, 17:10
Wohnort: LA

Re: REX_ARTICLE[] Abfrage ob leer

10. Aug 2015, 14:14

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

Benutzeravatar
Thomas.Blum
Entwickler
Beiträge: 5063
Registriert: 24. Aug 2004, 22:11
Wohnort: Dresden
Kontaktdaten: Website

Re: REX_ARTICLE[] Abfrage ob leer

10. Aug 2015, 14:23

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

Zurück zu „Templates/Navigationen [R4]“