Zum Inhalt springen

Template ja nach Inhalt verwenden

Erstellt am 1. Februar 2011 · 30 Antworten · letzte Antwort am 16. Februar 2011 · Seite 1 von 2

Tags: Templates & Layouts, Frage

heikehk ·

Hallo Emil,

danke für Deine Antwort.
Leider passt Deine Lösung mit Deiner Extension für mich nicht so ganz, da ich ja erst einmal verstehen lernen möchte, wie ich in TypoScript die passenden Abfragen mache.

ob ich dann alles lieber mit TemplaVoila zusammen klicken möchte bleibt dann dahingestellt. Was ich momentan wahnsinnig schwierig finde und das trotz 4 Typo3 Büchern, die offen um mich herumliegen, ist die Tatsache, dass ich offenbar ein paar der grundlegenden Dinge nicht begriffen habe.

Punkt 1 der nicht verstandenen Dinge:
Wann muss ich ein Objekt erst einmal als COA definieren und warum?

Punkt 2:
Wo muss ich temporäre Objekte erstellen, wenn ich diese innerhalb des page-Objektes referenzieren möchte? Müssen diese Objekte dann zum page Objekt gehören oder eben nicht.

Punkt 3:
Bekomme ich mit einer if.Abfrage, wie oben beschrieben tatsächlich den Wert numRows in meine Variable oder 0, falls es leer ist, oder habe ich dieses Beispiel falsch verstanden?

Punkt 4:
An welcher Stelle sollte diese Abfrage erfolgen? Innerhalb des page-Objektes oder besser außerhalb?

Punkt 5:
Warum funktioniert das .workOnSubparts für das Template nicht, wenn ich die Datei des Templates über ein Objekt übertragen habe. Muss ich diesen Bereich dann auch in dem zu übergebenden Objekt weiter reichen?

Punkt 6:
Wenn ich im Template-Analyser mein Typoscript ansehe, dann sind manche Bereiche irgendwie grün hinterlegt. Irgendwo habe ich gelesen, dass diese Bereiche ignoriert werden. Wobei es weniger anzeigt, als tatsächlich ignoriert werden 😉.
Ist das in Bezug auf die Seite zu sehen oder allgemein?

Punkt 7:
Falls meine Idee mit einer If-Abfrage zu arbeiten völlig falsch ist, wie würdet Ihr eine solche Abfrage machen?

Mein Grund wissen scheint trotz Programmiererfahrung momentan = 0 zu sein. #angry##angry##angry# Ich habe aus diesem Grund hier in den Anfängerfragen gepostet, weil ich einfach verstehen will und nicht nur irgendwelche Extensions benutzen. Das kann ich dann ja machen, wenn ich weiß, was ich tue....:o

Bitte kann jemand meine Fragen beantworten?
😉😉😉
Gruß
Heike

etux ·
heikehk schrieb

… weil ich einfach verstehen will und nicht nur irgendwelche Extensions benutzen

So habe ich das mit meinen Erweiterungen nicht gemeint. Es sollte Dir nur Mut machen und Dir zeigen, dass alles realisierbar ist.
Ich hätte auch schreiben können, dass ich in den Templates mit if-Abfragen arbeite und Dir ein Beispiel-Code posten. Da ich es aber einerseits eilig hatte (auch jetzt) und andererseits davon ausging, dass wenn Du Code sehen willst, Dir die eine Erweiterung downloaden und importieren kannst und (ohne sie zu installieren) Dir den TypoScript-Code anschaust

.

sobi555 ·

Ist es nicht Sinn und Zweck von TYPO3 (und sonstigen CM-System), dass man von Extensions profitiert.

"Dare2share"

LG - Simon

heikehk ·

Hallo Emil,

das war nicht als Vorwurf gedacht. Ich bin nur grad völlig am hängen.
Wie kann ich mir den den Code einer Extension ansehen? Das wußte ich nicht, dass das geht. Und in der Extension, die grad zum Download verfügbar ist, ist auch mit einer solchen Abfrage?

Gruß
Heike

PS: Sind meine Fragen denn so dämlich, dass sie keine Antworten verdient haben? Die waren ja jetzt hoffentlich allgemein genug, dachte ich. #paralyzed#

etux ·
heikehk schrieb

Wie kann ich mir den den Code einer Extension ansehen?

Bei Erweiterungen im TER – auf die Überschrift klicken, alle Dateien werden aufgelistet (ganz unten). Entsprechende Datei betrachten oder downloaden.

Auf einem lokalen Server – Mit dem T3X-Viewer

In TYPO3 selbst – jede installierte oder zumindest hoch geladene Erweiterung ist in einem Ordner, der deren Name trägt. Für nicht System- und nicht global installierte Erweiterungen sucht man im Ordner „typo3conf/ext/“. TypoScript Dateien stehen meist im Unterordner „static“.

Ich habe Dir die TypoScript-Setups beiden Erweiterungen als ZIP-Datei per PN geschickt.
Ich habe leider keine Zeit die Zeilen, die Dich nicht interessieren, zu löschen. Ich hoffe dass Du Dich trotzdem zu Recht findest.
Denn die Teile mit den if-Abfragen sind etwas kompliziert. Zumindest bei der „Flex-Layout“-Ext, bei der „BrightSideOfLife“ – etwas einfacher.
Das kommt daher, dass ich bei der Aufbau der Layout-Spalten mehrere Elementen verschachteln muss. Benötigt wird das, für die von mir selbst entwickelte Methode (Technik) gleich hohe Spalten darzustellen.
Du wirst es sicher in dieser Form nicht brauchen, eher viel simpler.

heikehk schrieb

PS: Sind meine Fragen denn so dämlich, dass sie keine Antworten verdient haben? Die waren ja jetzt hoffentlich allgemein genug, dachte ich

Für mich vielleicht doch etwas zu allgemein. Da ich sie nicht mit „Ja“ oder „Nein“ beantworten kann (wenn überhaupt), kaum Zeit habe und nicht gut im Erklären bin.

heikehk ·

Lieber EMil,

vielen Dank für Deine Unterstützung.
Ich werde mich durch die Scripte durchfressen und kann ja dann vielleicht schon probieren oder gezieltere Fragen stellen.

Danke auch, dass Du Dir die Zeit genommen hast, mir direkt zu antworten und zu versuchen mir in meine Dilemma zu helfen.
Du bist der Held des heutigen Tages.

Mit ein bischen Daumendrück klappts ja eventuell beim meinem Template jetzt auch.

Ich werde berichten.

Gruß
Heike

etux ·
heikehk schrieb

Mit ein bischen Daumendrück klappts ja eventuell beim meinem Template jetzt auch.

Dir Daumen drücken, kann ich jeder Zeit und sehr gern. 😃

heikehk schrieb

… mir direkt zu antworten und zu versuchen mir in meine Dilemma zu helfen.

Eine gehörige Portion Glück muss ich dabei gehabt haben – wie gesagt, die Beiträge vor meinem Ersten habe ich kaum Wahr genommen. :o #giggle#

Viel Erfolg!

heikehk ·

Ähm,
und gleich ne Frage...

{$searchbox} und die anderen Werte mit $ voran in geschweiften Klammern - sind das Verweise auf eine Konstanten, die man eintragen muss für die Seite?

Gruß
Heike

etux ·
heikehk schrieb

... Werte mit $ voran in geschweiften Klammern ...

Ja, aber das braucht Dich nicht kümmern. Ich habe Dir ja nur die Setup-Dateien geschickt. Es gehören noch eine Menge Dateien zu den Extentions. Da wird alles schon geregelt.
Außer der Code-Teil, wo die Spalten aufgebaut werden (mit den if-Abfragen), solltest Du den Rest erst mal in "Ruhe lassen" 😃

.

heikehk ·

OK,

Ich habe mir das mal durchgesehen, wobei ich die ifs wohl noch mal berbeiten muss und sie einrücke, damit ich noch klarer sehe, wie das zusammengehört.

Du hattest recht, das Flex-Layout hat genau ein solches if, wie ich es brauche.

Kann ich denn auch solche lib.xxx anlegen oder ist das was für eine Extension?
Die Idee finde ich klasse, denn ich könnte dann auch die Definition der Template Datei dort ablegen bzw. wie ich die Sachen ersetze, oder?

Wenn ich das richtig verstanden habe kann ich die CSS Dateien und Header-Daten mit page.meta & page.headerData schon einbinden ohne, dass ich page=PAGE definiert habe?

Dann die Bereiche vorbereiten und dann erst alles zusammenfügen - ja?

Die Details kann ich mir erst später durchlesen, aber wäre lieb, wenn Du nochmal online gehst, wenn Du mirsagen könntest, ob ich ähnlich wie Du diese lib.xx anlegen kann.

Alles Liebe

Heike

etux ·

Morgen Heike,

Du hast viele Fragen und wirst wohl auch weiter welche haben. Nichts für Ungut, aber ich denke, Du solltest Dir ein TYPO3-Buch zulegen.

Zugegeben ist mein Script viel komplizierter (und mittlerweile sehr alt), als das was Du bräuchtest. Denn es geht von vier Inhaltsspalten im Backend, stell aber maximal drei Spalten im Frontend und zwar in verschiedenen Reihenfolge – ja nach dem welche Inhaltsspalten in BE Inhalt haben.

Ich weiß nicht, was Du genau erreichen willst, aber ein einfaches Beispiel:
Layout mit maximal drei Spalten (sowohl im BE als auch im FE), wobei die Hauptinhaltsspalte immer Inhalt hat (wenn nicht zumindest die „Normal“-Spalte Inhalt hat, sollte auch keine Seite erstellt, bzw. publiziert werden).

Aber Vorsicht – da auf die Schnelle erstellt, sind Schreib- und sonstige Fehler nicht aus zu schließen. Und natürlich kann man es viel kompakter schreiben.

# Normal
temp.content = CONTENT
temp.content {
	table = tt_content
	select.orderBy = sorting
	select.where = colPos = 0
	select.languageField = sys_language_uid
	stdWrap.wrap = <div id="hauptspalte"><!--TYPO3SEARCH_begin-->|<!--TYPO3SEARCH_end--></div>
	# stdWrap.required = 1
}
# Links
temp.left = CONTENT
temp.left  {
	table = tt_content
	select.orderBy = sorting
	select.where = colPos = 1
	select.languageField = sys_language_uid
	stdWrap.wrap = <div id="linke-spalte">|</div>
}
# Rechts
temp.right = CONTENT
temp.right  {
	table = tt_content
	select.orderBy = sorting
	select.where = colPos = 2
	select.languageField = sys_language_uid
	stdWrap.wrap = <div id="rechte-spalte">|</div>
}
############################
page.999 = COA
page.999 {
	# wrap = <div id="page">|</div>
	10 = COA
	10 {	### Nur die Hauptspalte ###
		wrap = <div id="content-wrap" class="normal">|</div>
		if {
			isFalse.numRows < styles.content.getLeft
			isTrue = 1
			isTrue.if {
				isFalse.numRows < styles.content.getRight
			}
		}
		10 < temp.content
	}
	20 = COA
	20 {	### Zwei Spalten - Links und Normal ###
		wrap = <div id="content-wrap" class="links-normal">|</div>
		if {
			isFalse.numRows < styles.content.getRight
			isTrue = 1
			isTrue.if {
				isTrue.numRows < styles.content.getLeft
			}
		}
		10 < temp.left
		20 < temp.content
	}
	30 = COA
	30 {	### Zwei Spalten - Normal und Rechts ###
		wrap = <div id="content-wrap" class="normal-rechts">|</div>
		if {
			isTrue.numRows < styles.content.getRight
			isTrue = 1
			isTrue.if {
				isFalse.numRows < styles.content.getLeft
			}
		}
		10 < temp.content
		20 < temp.right
	}
	40 = COA
	40 {	### Alle drei Spalten ###
		wrap = <div id="content-wrap" class="links-normal-rechts">|</div>
		if {
			isTrue.numRows < styles.content.getRight
			isTrue = 1
			isTrue.if {
				isTrue.numRows < styles.content.getLeft
			}
		}
		10 < temp.left
		20 < temp.content
		30 < temp.right
	}
}

Der Rest ist CSS. Du hast für jede Situation eine andere Klasse. Kannst also alle Elementen in Abhängigkeit dieser Klassen Formatieren, wie Du möchtest.

EDIT:
Ich weiß nicht warum Zeilen wie diese hier
isTrue.numRows < styles.content.getLeft
im Editor hier so geändert werden:
isFalse.numRows/">numRows < styles.content.getLeft

.

heikehk ·

Lieber Emil,

vielen lieben Dank für die Mühe, die Du Dir gibst und Deine freundliche Hilfe.
Zu Deiner Beruhigung / vielleicht aber auch Beunruhigung 😉 Ich habe hier sogar 4 Typo3 Bücher bei mir liegen, die ich in den letzten Tagen oft verzweifelt durchforstet habe.
Mit Hilfe dieser Bücher bin ich ja letztendlich auch weiter gekommen, als ich es ursprünglich dachte.

Unter Umständen ist es auch nicht wirklich hilfreich, dass ich schon in anderen Sprache programmiert habe, so dass ich mit der Syntax von Typoscript noch nicht wirklich warm geworden bin.

Ich hoffe, dass ich mit Hilfe Deiner Tipps und Beispiele den Knoten zum platzen bringen kann. Dass ich viele Fragen habe liegt wahrscheinlich daran, dass ich den sinnvollen Aufbau eines Templates offensichtlich noch nicht begriffen habe. Sobald ich mich durch diese Sache durchgebissen habe, werde ich hoffentlich ein etwas besseres Verständnis haben.

Darf ich Dich fragen welches Buch aus Deiner Sicht das Beste ist, welches ich zu Hand nehmen sollte? Vielleicht habe ich ja die falschen Bücher hier liegen...

Aber nur eine Frage sei noch erlaubt, damit ich weiß, dass ich auf dem richtigen Weg bin, nicht, dass ich mich schon wieder verlaufen habe...

Wenn ich Dein Script richtig verstanden habe, dann landet der komplette Inhalt der Seite, mit if-Abfragen ordentlich formatiert in dem Objekt page.999 und ich ersetze den Marker dann mit diesem Objekt?

Alles Liebe
Heike

etux ·
heikehk schrieb

4 Typo3 Bücher bei mir liegen, die ich ... oft verzweifelt durchforstet habe.

Du solltest sie besser systematisch lesen, bzw. studieren. 😃

heikehk schrieb

den sinnvollen Aufbau eines Templates offensichtlich noch nicht begriffen habe

Sind denn in den Büchern keine Beispiele oder Case-Studys?

heikehk schrieb

welches Buch aus Deiner Sicht das Beste ist, welches ich zu Hand nehmen sollte?

Das kann ich Dir nicht sagen. Ich habe nur die 2004-Ausgabe des TYPO3 ECM von Altmann, Fritz und Hinderink.
Ich kann mir aber nicht vorstellen, dass eins Deiner Bücher nicht lesenswert wäre. Also nicht wie ran. 😃
Die TYPO3 Reference gibt es auch online, sollten Deine Bücher sie nicht hergeben. Und auch sonstige Dokus findet man im Netz, so wie diese hier:
http://www.mittwald.de/typo3-dokumentation/

Auch viele Forum-User hier haben auf ihren Sites Tipps und Anleitungen zu vielen Themen.

Trotzdem solltest Du mit den Bücher anfangen. Da ist sicher alles schön strukturiert und übersichtlich.

heikehk schrieb

Wenn ich Dein Script richtig verstanden habe, dann landet der komplette Inhalt der Seite, mit if-Abfragen ordentlich formatiert in dem Objekt page.999 und ich ersetze den Marker dann mit diesem Objekt?

Nenne es meinetwegen in lib.alle-inhaltsspalten um (statt page.999) und

…........DEIN_MARKER < lib.alle-inhaltsspalten

Warum? Steht sicher in Deinen Büchern. 😃

heikehk ·

😃

Du hast Recht,

natürlich steht in den Büchern viel Information und auch Strukturiert. Mein Ansatz war vielleicht falsch, dass ich gedacht hatte, mit vorheriger Programmiererfahrung einfach die Bücher screenen zu können und dann nur dort wirklich zu lesen, wo ich eine Lösung zu einer Fragestellung gefunden habe.

Da fehlen dann natürlich die eine oder andere Grundinformation, die mir zum Verständnis hätte helfen können, weil die woanders versteckt ist :o

Aber ich bin froh, dass ich zumindest Deinen Code dann richtig verstanden habe. Das gibt einem doch gleich das Gefühl nicht ganz so dumm zu sein und wenigstens in den Kämpfen mit Typoscript nicht völlig verloren zu haben #paralyzed#

Das Problem bei Schnipseln ist, dass sie zwar einen Teilbereich zeigen, dass aber, wenn man die Grundstruktur nicht zu 100% verstanden hat, in alle Fehlertöpfe tritt, die auf dem Weg zu finden sind. Wobei ich der Meinung bin, dass man ja aus Fehlern am besten lernt. Nur ist hier Typoscript ja relativ schweigsam. 😢🙁:x

Wie auch immer, ich nehme mir alles zu Herzen und bin mir sicher, dass mir Deine Hilfe hier wirklich weitergeholfen hat. 😃

Altmann Fritz und Hinderlink sind mir leider noch nicht über den Weg gelaufen... Aber vielleicht wäre das noch eine Idee 😉

Einen schönen Tag Dir noch,
hoffentlich schaut heute mal die Sonne vorbei 😉

Heike

PS: Ach ja und falls Du jemals ein Problem mit Photoshop, InDesign oder ähnlichem hast, dann meld Dich bei mir. Ich würde mich gerne revanchieren...

heikehk ·

Also ich habe jetzt viel gelesen und auch noch einiges verändert.
Mittlerweile habe ich die Infos zu den Templates in Konstanten eingepflegt und dachte, ich wäre an der Lösung dran.

Ich denke ich muss nur noch dieses CASE-Konstrukt zum laufen bringen und statt Text dann die jeweiligen Konstanten ansprechen. die dann die Infos zu den Vorlagen-Dateien enthalten, dann wäre ich mit meinen Ideen fertig.

Das Konstrukt von key.cObject {...} funktioniert alleine einwandfrei. Nach meinem Verständnis sollte in dem Objekt, ja nach Inhalt:

LinksMitteRechts
LinksMitte
...

stehen (da waren vorher nur Buchstaben aber LR scheint irgendwie belegt zu sein).

page.temp.40 = COA
page.temp.40 {
  10 = CASE
  10 {
    key.cObject = COA
    key.cObject {
      10 = COA
      10 = TEXT
      10 {
        value = Links
        if.isTrue.numRows < styles.content.getLeft
      }
      20 = COA
      20 = TEXT
      20 {
        value = Mitte
        if.isTrue.numRows < styles.content.get
      }
      30 = COA
      30 = TEXT
      30 {
        value = Rechts
        if.isTrue.numRows < styles.content.getRight
      }
    }  
    default = TEXT
    default = Standardeinstellung

    LinksMitteRechts.10 = TEXT
    LinksMitteRechts.10 = 25_50_25
    LinksMitte.10 = TEXT
    LinksMitte.10 = 33_66
    MitteRechts.10 = TEXT
    MitteRechts.10 = 66_33
    LinksRechts.10 = TEXT
    LinksRechts.10 = 50_50
    Mitte.10 = TEXT
    Mitte.10 = 100

  }
  }

Wie auch immer, ich habe zwei Probleme:

1. Wie spreche ich das Ergebnis des CASE an?
Ist das page.temp.40.10.value?
nur page.temp.40?

Mir scheint im Object-Browser, dass ich nie auch wirklich das Ergebnis bekomme, das ich haben möchte. Übergebe ich den Inhalt z.b. in page.temp.50 mit <, dann steht im Object-Browaser bei Value TEXT und ohne Value CASE...#angry##angry#

2. Ich hab das Gefühl, dass der komplette CASE nicht funzt

Ist da oben ein gravierender Fehler?

Mit if bekomme ich das ums verrecken nicht hin#evil#, aber irgendwie denke ich, dass das doch gehen muss...

Bitte dringend nochmal um Hilfe :o

Danke

Heike

etux ·

Morgen Heike,

ehrlich gesagt, ich weiß immer noch nicht, wie Du Dein Vorhaben zu umsetzen anstrebst.
Sollten die Redakteure keine weitere Umstellungen machen, um ein Frontend-Layout zu wählen ist die Variante mit den if-Abfragen schon o.k. Je nach dem welche Spalten Inhalt haben (Backend), erscheint das entsprechende Spalten-Layout im Frontend. Voll automatisch also.

Sonst könntest Du die Layouts über „Frontend-Layout“ wählen lassen (z.B. bei der root-Seite auf „Seiteneigenschaften bearbeiten“ gehen und dann den Reiter „Erscheinungsbild“ wählen).

Die Layoutsnamen kannst Du auch ändern. Nochmal auf der root-Seite „Seiteneigenschaften bearbeiten“ und dann Reiter Ressourcen. In den Feld „Seiten-TSconfig“ kommt beispielsweise:

TCEFORM.pages {
layout.altLabels.3 = Links, Normal und Rechts
layout.altLabels.2 = Normal und Rechts
layout.altLabels.1 = Links und Normal
layout.altLabels.0 = nur Normal
}

und in Deinem root-Seite Template, was ich Dir schon gepostet habe, nur etwas umgebaut:

# Normal
temp.content = CONTENT
temp.content {
	table = tt_content
	select.orderBy = sorting
	select.where = colPos = 0
	select.languageField = sys_language_uid
	stdWrap.wrap = <div id="hauptspalte"><!--TYPO3SEARCH_begin-->|<!--TYPO3SEARCH_end--></div>
	# stdWrap.required = 1
}
# Links
temp.left = CONTENT
temp.left  {
	table = tt_content
	select.orderBy = sorting
	select.where = colPos = 1
	select.languageField = sys_language_uid
	stdWrap.wrap = <div id="linke-spalte">|</div>
}
# Rechts
temp.right = CONTENT
temp.right  {
	table = tt_content
	select.orderBy = sorting
	select.where = colPos = 2
	select.languageField = sys_language_uid
	stdWrap.wrap = <div id="rechte-spalte">|</div>
}
############################
page.999 = COA
page.999.wrap = <div id="page">|</div>


page.999.10 = COA
page.999.10 {	### Nur die Hauptspalte ###
	wrap = <div id="content-wrap" class="links-rechts">|</div>
	10 < temp.left
	20 < temp.right
}

[globalVar=TSFE:page|layout=1]
page.999.10 = COA
page.999.10 {	### Zwei Spalten - Links und Normal ###
	wrap = <div id="content-wrap" class="links-normal">|</div>
	10 < temp.left
	20 < temp.content
}
[global]

[globalVar=TSFE:page|layout=2]
page.999.10 = COA
page.999.10 {	### Zwei Spalten - Normal und Rechts ###
	wrap = <div id="content-wrap" class="normal-rechts">|</div>
	10 < temp.content
	20 < temp.right
}
[global]

[globalVar=TSFE:page|layout=3]
page.999.10 = COA
page.999.10 {	### Alle drei Spalten ###
	wrap = <div id="content-wrap" class="links-normal-rechts">|</div>
	10 < temp.left
	20 < temp.content
	30 < temp.right
}
[global]

Vorsicht. Es ist nur ein auf die Schnelle erstelltes Beispiel und entspricht nicht ganz Deine Anforderungen.

Wenn Du bei den if-Abfragen bleiben willst, dürfte das hier grob dem entsprechen, was Du erreichen willst. Auch wenn ich mir ziemlich sicher bin, dass es funktioniert, perfekt ist es nicht. Es geht auch viel kompakter und einfacher.

# Normal
temp.content = CONTENT
temp.content {
	table = tt_content
	select.orderBy = sorting
	select.where = colPos = 0
	select.languageField = sys_language_uid
	stdWrap.wrap = <div id="hauptspalte"><!--TYPO3SEARCH_begin-->|<!--TYPO3SEARCH_end--></div>
	# stdWrap.required = 1
}
# Links
temp.left = CONTENT
temp.left  {
	table = tt_content
	select.orderBy = sorting
	select.where = colPos = 1
	select.languageField = sys_language_uid
	stdWrap.wrap = <div id="linke-spalte">|</div>
}
# Rechts
temp.right = CONTENT
temp.right  {
	table = tt_content
	select.orderBy = sorting
	select.where = colPos = 2
	select.languageField = sys_language_uid
	stdWrap.wrap = <div id="rechte-spalte">|</div>
}
############################
page.999 = COA
page.999 {
	# wrap = <div id="page">|</div>
	10 = COA
	10 {	### Nur die Hauptspalte ###
		wrap = <div id="content-wrap" class="normal">|</div>
		if {
			isTrue.numRows < styles.content.get
			isTrue = 1
			isTrue.if {
				isFalse.numRows < styles.content.getRight
				isTrue = 1
				isTrue.if {
					isFalse.numRows < styles.content.getLeft
				}
			}
		}
		10 < temp.content
	}
	20 = COA
	20 {	### Zwei Spalten - Links und Rechts ###
		wrap = <div id="content-wrap" class="links-rechts">|</div>
		if {
			isFalse.numRows < styles.content.get
			isTrue = 1
			isTrue.if {
				isTrue.numRows < styles.content.getRight
				isTrue = 1
				isTrue.if {
					isTrue.numRows < styles.content.getLeft
				}
			}
		}
		10 < temp.left
		20 < temp.right
	}
	30 = COA
	30 {	### Zwei Spalten - Links und Normal ###
		wrap = <div id="content-wrap" class="links-normal">|</div>
		if {
			isFalse.numRows < styles.content.getRight
			isTrue = 1
			isTrue.if {
				isTrue.numRows < styles.content.get
				isTrue = 1
				isTrue.if {
					isTrue.numRows < styles.content.getLeft
				}
			}
		}
		10 < temp.left
		20 < temp.content
	}
	40 = COA
	40 {	### Zwei Spalten - Normal und Rechts ###
		wrap = <div id="content-wrap" class="normal-rechts">|</div>
		if {
			isTrue.numRows < styles.content.getRight
			isTrue = 1
			isTrue.if {
				isTrue.numRows < styles.content.get
				isTrue = 1
				isTrue.if {
					isFalse.numRows < styles.content.getLeft
				}
			}
		}
		10 < temp.content
		20 < temp.right
	}
	50 = COA
	50 {	### Alle drei Spalten ###
		wrap = <div id="content-wrap" class="links-normal-rechts">|</div>
		if {
			isTrue.numRows < styles.content.getRight
			isTrue = 1
			isTrue.if {
				isTrue.numRows < styles.content.get
				isTrue = 1
				isTrue.if {
					isTrue.numRows < styles.content.getLeft
				}
			}
		}
		10 < temp.left
		20 < temp.content
		30 < temp.right
	}
}

page.999 wird wohl bei Dir nicht stimmen. Was Du statt „999“ schreibst, hängt davon ab, wo Du in Deinem Template die Spalten rein haben möchtest

.

heikehk ·

Lieber Emil,

danke für Deine ausführliche Antwort.
Was mich momentan, abgesehen davon, dass Du REcht hast mir den Vorauswahlen des Layouts, interessieren würde ist, warum ich die Abfrage nicht hinbekomme.

Ich habe jetzt dieses Objekt page.temp.30 folgendermaßen angelegt:

page.temp.30 = COA
page.temp.30 {
      10 = COA
      10 = TEXT
      10 {
        value = 1
        if.isTrue.numRows < styles.content.getLeft
      }
      20 = COA
      20 = TEXT
      20 {
        value = 2
        if.isTrue.numRows < styles.content.get
      }
      30 = COA
      30 = TEXT
      30 {
        value = 3
        if.isTrue.numRows < styles.content.getRight
      }

}

Wenn ich meinen Marker z.B. INHALT_M so ersetze:

       page.20.marks.INHALT_M = TEXT
       page.20.marks.INHALT_M < page.temp.30

Dann wird, je nachdem, in welcher Spalte Text eingegeben wurde 1, oder 12, ... bis 123 oder eben nichts ausgegeben.

Das heißt für mich, dass das prinzipiell so klappt.

Jetzt würde ich gern den Inhalt dieses Objektes auswerten. Und hier gehts mir grad nicht drum, dass ich das unbedingt letztendlich so lösen möchte, sondern darum zu verstehen, warum das nicht funktioniert.

Ich habe die Werte extra in Zahlen umgewandelt, weil ich in einem meiner Bücher jetzt nach meiner Anfrage gelesen habe, das Buchstaben nicht so geschickt sind.

Ich habe jetzt mal nur testweise folgendes Objekt gebaut:

page.temp.40 = COA
page.temp.40 {
      10 = COA
      10 = TEXT
      10 {
        value = 25_50_25 Aufteilung
        if.isTrue.data = page.temp.30 = 123 
      }
      20 = COA
      20 = TEXT
      20 {
        value = sonstiges
        if.isFalse.data = page.temp.30 = 123 
      }

  }

Nach meinem Verständnis sollte jetzt doch, wenn der Wert von page.temp.30 (immernoch wie oben aufgebaut) 123 ist, page.temp.40 den Inhalt "25_50_25 Aufteilung" haben und in allen anderen Fällen "sonstiges".

Gebe ich jetzt page.temp.40 so aus:

       page.20.marks.INHALT_M = TEXT
       page.20.marks.INHALT_M < page.temp.40

dann steht auf der Seite, die klar 3 Spalten ausgefüllt hat (also bei der vorherigen Ausgabe von page.temp.30 123 gezeigt hat) trotzdem "sonstiges".

Was mache ich denn bei der Abfrage falsch?

Ich dachte eigentlich, dass ich mit diesem if.isTrue.data die möglichen Werte abfrage und dann noch am Schluss einen Standardwert setze, wenn if.isEmpty.data ist (also wenn gar keine Inhalte eingetragen sind).

Nach meinem Verständnis sollte das doch gehen.
Kannst Du mir sagen, wie ich den Inhalt von page.temp.30 richtig anspreche, so dass die Abfrage auch funktionieren kann?

Der Versuch mit CASE ist aus meiner Sicht aus dem gleichen Grund gescheitert, aber ich finde kein Beispiel, in dem das so beschrieben ist, dass ich meinen Fehler erkennen kann.

Alles Liebe
Heike

etux ·

Hallo Heike,

ich muss mich leider kurz fassen.
Ich blicke auf die Schnelle nicht durch, was Du da alles veranstaltest.

Warum testest Du mein Script nicht im Original. Du brauchst nur

page.999 = COA
page.999 {
….................
}

mit

page.20.marks.INHALT_M = COA
page.20.marks.INHALT_M {
…................
}
ersetzen.

Vorausgesetzt INHALT_M ist die Stelle in Deiner html-Vorlage, wo alle Layout-Spalten hin kommen.

Wenn es funktioniert, brauchst Du nur die Wraps anzupassen - Klassen un ID entsprechend Deiner CSS-Formatierung.

Nimm dann Deine Bücher und teste schrittweise, was Deine Änderungen bewirken. Usw....

P.S.: Ein zweiter Wrap um alle Spalten ist in meinem Script auskommentiert. Für die Spalten-CSS-Formatierung brauchst es eh nicht. Gedacht ist es, wenn da weitere Elemente rein kommen sollten – header, footer usw. Dann solltest Du aber Dein COA erweitern.

Übrigens CSS: Dir ist klar, wie Du anhand der unterschiedlichen Klassen bei dem DIV, das alle Spalten umschließt, die Spalten für die verschiedene Fälle formatierst?

.

heikehk ·

Lieber Emil,

ja, das ist mir klar.
Ich habe nur das Problem, dass ich meine Templates ja nach Inhaltselementen auswählen wollte.
Das heißt, dass die MARKS erst dann gefüllt werden, wenn in Abhängigkeit des Inhalts die richtige Template-Datei verwendet wurde.

Da ja nach Variante die Klassen der DIVs für die Inhaltsspalten völlig anders sind und das im Kontext zu den anderen Spalten, kann ich das nicht so einfach austauschen.

Meine Idee war deshalb, dass ich für jede Variante eine Template-Datei habe, die sich jeweils nur im Bereich des "Inhalts" und dessen Formatierung unterscheidet. Beim Ersetzen der Marker wollte ich dann einfach INHLAT_L INHALT_M und INHALT_R mit den entsprechenden Inhalten bestücken. Ist in der Vorlage kein Inhalt für Rechts vorhanden stört diese zusätzliche Zeile ja nicht.

Da ich ja offensichtlich nicht in der Lage bin, diese Konfigurationen aus meinem temporären Objekte (page.temp.30) auszuwerten, kann ich das Ganze auch nicht mit wraps etc. lösen, denn auch dafür müsste ich ja wissen, welche Kombination ich habe.

Das mit den vorher ausgewählten Layouts finde ich gut, was ich aber nun losgelöst von meinem ursprünglichen Vorhaben wissen möchte ist:

Wie muss ein if aussehen oder ein CASE, mit dem ich je nach Inhalt von page.temp.30 etwas anderes mache?

Ich kann mir einfach nicht vorstellen, dass das nicht gehen soll, aber ich weiß nicht, was falsch ist. Immerhin scheint in dem Objekt ja alles drin zu stehen, was ich will. Warum kann ich es dann nicht vernünftig abfragen?

Wenn Du Zeit dafür hättest, oder jemand anderer, sich das if (letzter Eintrag) anzusehen und ihr mir sagen könntet, wie ich das lösen kann, dann nerve ich auch nicht weiter, versprochen. Wirklich völlig abgelöst von dem ursprünglichen Problem.

Ich will nur wissen, wie kann ich abhängig vom Inhalt von page.temp.30 eine andere Variable mit einem Inhalt bestücken?

Alles Liebe
Heike