Zum Inhalt springen

Content aus einer anderen Seite einfügen wenn Spalte leer is

Erstellt am 2. Oktober 2003 · 10 Antworten · letzte Antwort am 2. Februar 2006

Tags: Inhaltselemente, Frage

aley ·

Hallo,

Ich habe ein (eigentlich ganz kleines) Problem: Auf meiner Site ist die rechte Spalte teilweise leer, und in dem Falle soll der standardmässige Content eingefügt werden, der sich auf einer anderen Seite befindet.

Zwar habe ich es geschafft, in der leeren Spalte automatisch ein TEXT- oder HTML-Element einzufügen. Ebenfalls geklappt hat's, in der Spalte nur etwas hinzuzufügen, wenn schon Content drin ist. Aber das ist beides eben genau nicht das, was ich benötige. 😢
Weiss jemand von euch Rat?

Vielen Dank im Voraus.

aley ·

Puh. Na, wenigstens hat's doch noch geklappt - nach sicherlich 8 Stunden des Herumprobierens.
So hat's geklappt:

// Ein neues Objekt anlegen, indem nachher der Content der rechten 
// Spalte liegt - entweder der "normale" oder der von mir als Standard definierte
overlayContentRight = COA
overlayContentRight {
  // Der Inhalt der rechten Spalte wird in's Objekt 11 geladen
  11 < styles.content.getRight
  // Falls der stdWrap des Objekts 11 leer ist (also nix in der rechten Spalte 
  // war), machen wir n CONTENT-Element draus 
  11.stdWrap.ifEmpty.cObject = CONTENT
  11.stdWrap.ifEmpty.cObject {
    // Nun kommt der Standard-Inhalt rein, der sich auf 
    // einer eigenen, im Frontend unsichtbaren Seite (UID:425) befindet
    table = tt_content
    select {
      // Haben will: Alle Objekte, die sich auf eben der Seite befinden, also 
      // eine ParentID/pid von 425 haben
      pidInList=425
      orderBy = sorting
      // Nur die Objekte aus der rechten Spalte einsetzen
      where = colPos=2
      // Die Objekte mit der korrekten Sprache benutzen
      languageField = sys_language_uid
    }
  }
}


// ...und schliesslich noch den ###CONTENT_RIGHT###-Marker im Template damit füllen
page.10.subparts.CONTENT_RIGHT < overlayContentRight

So, und nun noch ohne Kommentare:

overlayContentRight = COA
overlayContentRight {
  11 < styles.content.getRight
  11.stdWrap.ifEmpty.cObject = CONTENT
  11.stdWrap.ifEmpty.cObject {
    table = tt_content
    select {
      pidInList=425
      orderBy = sorting
      where = colPos=2
      languageField = sys_language_uid
    }
  }
}


page.10.subparts.CONTENT_RIGHT < overlayContentRight

http://www.painframe.com/

thinky ·

hahaha,,,

ich dachte schon bei mir funktioniert das nicht.... aber ich hätte einfach gleich dran denken müssen das ich:
where = colPos=2

anpassen muss:-)

ich kann nur sagen ... echt smarte arbeit

Gruss

aley ·

Morgen Frank

Mit der rechten Spalte passiert im Normalfall (das heisst wenn Content in der rechten Spalte ist) gar nix. Falls nun aber kein Content in der rechten Spalte ist (und das zum Beispiel aus Designgründen schlecht aussieht), dann sollten automatisch Content-Elemente von einer bestimmten Seite in eben dieser rechten Spalte angezeigt werden.

Schlussendlich läuft's einfach darauf hinaus, dass die rechte Spalte auf diese Weise nie leer ist.

StR ·

Das gibts nicht! 8-)

VIELEN DANK für diese Lösung.
Hatte es schon fast aufgegeben, als ich Deinen Ansatz fand.

Klasse!

(Und wieder etwas mehr TS gelernt :-) )

RudiX ·

Hi @ all,

nach Stunden habe ich jetzt alle Beispiele hier im Forum ohne Erfolg durch 😢

Habe eine Seite "Sonstiges" (ID=66), mit einem Seiteninhaltselement "Text mit Bild" in meiner Struktur angelegt. In meinem HTML-Template habe ich den Marker "conRECHTS"

Ziel: bei allen Seiten, die keinen Inhalt in der rechten Spalte haben, sollen die Inhaltselemente der Seite "Sonstiges" (ID=66) angezeigt werden.

In meinem Template habe ich folgenden Code:

# Template main content

temp.bodyTempl = TEMPLATE
temp.bodyTempl {
         template =< plugin.tx_automaketemplate_pi1
         workOnSubpart = subpartBODY
         subparts {
               contentMID< styles.content.get                
               randomLEFT < templeft.50
               randomRIGHT < tempright.60
                     
conRECHTS = COA
conRECHTS {
        11 < styles.content.getRight
        11.stdWrap.ifEmpty.cObject = CONTENT
        11.stdWrap.ifEmpty.cObject {
        table = tt_content
            select {
            pidInList=66
            orderBy = sorting
            where = colPos=2
            }
         }
} 
page.10.subparts.conRECHTS < conRECHTS

Der Marker wird leider nur bei der Seite "Sonstiges" (ID=66) gefüllt und angezeigt, bei allen anderen Seiten ist die rechte Spalte leer #paralyzed#

Was habe ich da nur falsch gemacht?

Bitte um Hilfe, meine TYPO3-Version ist 3.7

vielen Dank, RudiX[/b]

theo ·
RudiX schrieb

Was habe ich da nur falsch gemacht?

sagen wir mal so:
keine ahnung, ob dein code stimmt...
...aber das verhältnis von öffnenden zu schließenden klammern ist jedenfalls nicht unbedingt konstruktiv zu nennen... 8-)

sissi ·

Dieses Skript sucht rückwärts immer eine Ebene höher ob was drin ist und wenn ja gibt es das aus. Ersetzt quasi die kb_cont_slide-Extension:

temp.bildoben = COA
temp.bildoben {
      11 < styles.content.getLeft
      11.stdWrap.ifEmpty.cObject < styles.content.getLeft 
      11.stdWrap.ifEmpty.cObject {
      stdWrap.ifEmpty.cObject < styles.content.getLeft
      stdWrap.ifEmpty.cObject {
      select.pidInList.data = leveluid:-3
      }
      select.pidInList.data = leveluid:-2
      }
      }

Kann man erweitern je nachdem wieviel Ebenen hat (das ist jetzt für 3)

Vielen Dank an Rupert der das maßgeblich mitentwickelt hat :-)

Grüssle
Sissi

localhorst ·

Hallo zusammen,

ich würde das gleiche gerne mit Templa Voila realisieren. Hat da jemand bereits Erfahrungen gemacht?
Wäre toll, wenn mir da jemand weiterhelfen könnte.

Viele Grüße
Markus

wvd at home ·

Hallo,

leider funktioniert der intelligente Ansatz auch bei mir nicht.

Mein Script:

overlayContentRight = COA
overlayContentRight {
  11 < styles.content.getRight
  11.stdWrap.ifEmpty.cObject = CONTENT
  11.stdWrap.ifEmpty.cObject {
     table = tt_content
     select {
        pidInList=12
       orderBy = sorting
       where = colPos=0
       languageField = sys_language_uid
    }
  }
}
page.99.subparts.RECHTS < overlayContentRight

Ich habe den ganzen Kram in die Spalte Normal gelegt, was aber vermutlich egal ist.

Mir ist aufgefallen, dass die im Seitenbaum sichtbare Seiten-ID nicht die PID ist. Ich habe das in PHPMyAdmin kontrolliert. aber weder die UID noch die PID haben zum Erfolg geführt. Gibt es eigentlich eine Möglichkeit, die PID zu ermitteln, ohne in die DB zu schauen (ist ja nicht jedermanns Sache).

Könnte die letzte Zeile im Script vielleicht das Problem verursachen? 'Page.10' kommt bei mir nämlich schon vor, deshalb die 99.

Zu Testzwecken habe ich die letzte Zeile mal verändert:

page.99.subparts.RECHTS = Das ist ein Test

Da hat aber auch nichts eingebracht.