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 ·

Hi Simon,

ja ich weiß, das würde die Sache vereinfachen, aber ich wollte einfach einmal alles von Hand machen, damit ich lerne wie es geht.

Bin gerade am überlegen, wie ich es schaffe einfach die Anzehl der Zeilen im Content pro Spalte in eine Variable zu geben, die ich dann auf > 0 oder eben nicht prüfen kann.

Würde das denn so gehen?

// Anzahl Zeilen links
10 = TEXT
10.value = 0
10.numRows
    {
    table = tt_content
    select {
        where = colPos = 1
    }
}

Dann müsste ich doch die Variablen in meinen Conditions abfragen können, oder?

Irgendwie zeigt er gad den Code seltsam an. Hinter 10.numrows kommt eigentlich nur der Zeilenumbruch und die offene geschweifte Klammer...

Bevor ichs vergesse, ich habe bisher dazu keine weiteren Infos gefunden. Ich würde ein Objekt definieren wollen, in dem 10 die Anzahl der Zeilen links, 20 die Anzahl der Zeilen mitte, 30 die Anzahl der Zeilen rechts aufnehmen soll.

Muss dieses Objekt dann erstmal als COA definiert werden oder nicht?
Muss ich das mit meiner Variable für die Template-Datei dann auch machen?
und...
:o was macht den Untershcied aus ob COA oder nicht?

Gruß
Heike

sobi555 ·

Heike, dann hast du also auch ein CMS geschrieben, bevor du mit TYPO3 angefangen hast?
Wenn du schreibst:
ich möchte, um möglichst flexibel zu sein, je nach eingetragenen Inhalten eine andere Template Datei verwenden, um dort dann die Inhalte an die passende Stelle schreiben zu können.
und dafür kein TV verwenden willst, dann klingt das in meinen Ohren wie ein 100 Metersprinter, der auf Händen laufen will. Klar, es geht auch anders...

Ich finde es mit TV super easy, einfach für die Redaktion, übersichtlich zum entwickeln... Hier kannst du dann auch einzelne Felder einfach ansprechen und auf Inhalt überprüfen. Zb. so:

<TypoScript><![CDATA[
10 = COA
10 {
  10 = TEXT
  10 {
    current = 1
    typolink.parameter.field = field_faqs
    required = 1
    wrap = <img src="fileadmin/templates/layoutImages/iconPfeil_6.png" alt="" title="Pfeil" border="0" height="12" width="14">&nbsp;|
  }
]]></TypoScript>

(Wenn das Feld FAQ ausgefüllt ist, wird davor ein Pfeil gesetzt)

LG - Simon

heikehk ·

OK ich seh ja ein, dass ich das eventuell besser mit TV machen sollte,
aber was ist meinen letzten Fragen?
Könntest Du mir die beantworten?

Gruß
Heike

etux ·

Ich habe die Beiträge auch nur schnell überflogen. Ich hoffe, ich habe das Thema nicht missverstanden.
Ich habe eine Erweiterung erstellt, die genau das und einiges mehr macht. Leider ist sie gerade nicht online und stehet nicht zum Download bereit, da ich sie zur Zeit gründlich bearbeite.
Was sie so in etwa kann, habe ich kurz angerissen:
http://emil-webdesign.net/typo3-cms/templates/template-01beta/

Als Fazit: Du kannst also alles das umsetzen, was Du Dir für Deine Installation wünschst.

Der einzige Unterschied – in meiner Erweiterung gibt es keine html-Vorlagen. Alles nur TypoScript pur.
Aus meiner Sicht spielt das aber keine Rolle. Mit TemplaVoila oder nur mit html-Vorlagen mit MARKER – alles sollte genau so unproblematisch gehen.

EDIT: Auch bei der anderen Erweiterung (die online ist)
http://emil-webdesign.net/typo3-cms/templates/template-02beta/
habe ich ein ähnliches Template verwendet – nur etwas einfacher

.
.

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