Aug 25

Seit TYPO3 4.4 werden beim Einfügen von CSS-Dateien mittels includeCSS Zeitstempel an den Dateinamen angehängt um die Eindeutigkeit zu garantieren und Cache-Problemen vorzubeugen. Die Konfiguration für ältere TYPO3-Versionen sieht wie folgt aus:

pdf_generator = PAGE
pdf_generator {
	includeCSS.pdf = fileadmin/templates/blogix/css/pdf.css
}

Die Ausgabe im Frontend von TYPO3 4.4 mit Zeitstempel sieht dann in etwa wie folgt aus:

<link rel="stylesheet" type="text/css" href="fileadmin/templates/blogix/css/pdf.css?1282730709" media="all" />

Der PDF Generator bzw. das verwendete html2ps können damit leider nicht umgehen und das CSS wird deshalb im PDF nicht verwendet. Abhilfe schafft man, indem man die Konfiguration um zwei Zeilen erweitert und eine Ersetzung mittels regulärem Ausdruck (RegExp) durchführt:

pdf_generator = PAGE
pdf_generator {
	includeCSS.pdf = fileadmin/templates/blogix/css/pdf.css
	config.pdf_generator2 {
		regexp_search1 = /pdf\.css\?([0-9]{10})/
		regexp_replace1 = pdf.css
	}
}
Jul 15

Beim Hochladen einer Extension ins TER (TYPO3 Extension Repository) muss man beachten, dass der Benutzername klein geschrieben werden muss. D.h. “Blogix” würde nicht funktionieren, stattdessen muss man “blogix” verwenden. Enthält der Benutzername Großbuchstaben, erhält man die Fehlermeldung “Access denied.”.

Mai 24

Mit den Sub-Templates von TemplaVoilà ist es möglich Layouts für spezielle Ansichten (z.B. Druckversion) festzulegen. Hierfür legt man im Modul TemplaVoilà ein neues “TemplaVoilà Template Object” an und wählt für “Make this a sub-template of” das Template aus, für das die spezielle Ansicht gültig sein soll. Für “Select a type of rendering” wählt man die gewünschte spezielle Ansicht aus. Vordefiniert ist neben der Standardansicht “Default output” nur eine Druckversion “Printer friendly”. Das ist z.B. dann nicht ausreichend, wenn auf einer Webseite auch PopUps für Hilfetexte benötigt werden.

Um nun eine PopUp-Ansicht erstellen zu können, muss zuerst ein neuer “type of rendering” definiert werden. Hierfür fügt man in der “TSconfig” der Rootpage (im Page-Modul das Kontextmenü der Rootpage öffnen und “Edit page properties” auswählen; Registerkarte “Options” anklicken) eine neue Zeile ein:

TCEFORM.tx_templavoila_tmplobj.rendertype.addItems.popup = PopUp

“PopUp” ist die Bezeichnung, die in “Select a type of rendering” angezeigt wird, “popup” ist die ID, mit welcher der “type of rendering” mit TypoScript im “Setup” angesprochen werden kann. Nach dem Speichern kann im Sub-Template der soeben erstellte “type of rendering” ausgewählt werden.

Nun muss noch die Ansicht formatiert werden. Hierfür legt man mittels TypoScript im “Setup” (im Template-Modul “Setup” der Rootpage bearbeiten) einen neuen Seiten-Typ fest:

popup = PAGE
popup < page
popup {
	typeNum = 123
	10 = USER
	10 {
		childTemplate = popup
		userFunc = tx_templavoila_pi1->main_page
	}
}

Für “childTemplate” muss die zuvor angegebene ID angegeben werden. Mit “typeNum” legt man die Type-ID fest über die die spezielle Ansicht im Browser aufgerufen werden kann (z.B.: http://www.blogix.net/page?type=123). Damit nicht alle Einstellungen für die Page “popup” erneut festgelegt werden müssen, können diese mit “popup < page” übernommen werden.

Mrz 18

Auf Shared-Hosting-Umgebungen weichen FTP- und Webserver-Benutzer häufig voneinander ab. Wird eine Datei oder ein Ordner von TYPO3 mittels PHP angelegt, so sind Besitzer (Owner) und Gruppe (Group) jene des Webservers. Die Rechte sind i.d.R. für Dateien 0644 und für Ordner 0755, d.h. dem FTP-Benutzer ist es nicht erlaubt vom Webserver angelegte Dateien zu verändern (mehr dazu: “Linux-/Unix-Rechte“).

Mit zwei Einstellungen in der Datei localconf.php kann Abhilfe geschafft werden:

$TYPO3_CONF_VARS['BE']['folderCreateMask'] = '0775';
$TYPO3_CONF_VARS['BE']['fileCreateMask'] = '0664';

Neu erzeugte Dateien und Ordner werden mit diesen Rechten angelegt. Obiges Beispiel erfordert, dass Gruppe von Webserver und FTP-Benutzer gleich sind.

Mrz 08

Fügt man in TemplaVoila mehrere Elemente vom Typ “Content Elements” in ein “Page Template” oder “Flexible Content Element (FCE)” ein, so werden diese in der Seiten-Ansicht im Backend nebeneinander dargestellt. Für den Kunden ist es allerdings nicht intuitiv, wenn er Elemente aus beispielsweise dem Header links vom Inhalt, statt über dem Inhalt im Backend vorfindet. Übersichtlicher wäre es, wenn man im Backend die selbe Anordnung der Elemente festlegt, wie sie im Frontend ausgegeben werden.

Zuerst wechselt man zum Modul “Web > TemplaVoila” und im Seitenbaum (Pagetree) zum Ordner/SysFolder, in dem die “Data Structure (DS)” und “Template Object (TO)” gespeichert sind – üblicherweise nennt sich dieser Ordner “Storage Folder”. Dort bekommt man unter anderem die XML-Konfiguration zu sehen, wenn man die entsprechende DS editiert. In diesem XML fügt man im Bereich “<meta type=”array”>” den Abschnitt “<beLayout>” mit etwas HTML ein. Das XML sieht anschließend in etwa wie folgt aus:

<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
<T3DataStructure>
	<meta type="array">
		<langDisable>1</langDisable>
		<beLayout><![CDATA[
			<table border="0" cellpadding="2" cellspacing="2" width="100%">
				<tr>
					<td valign="top" width="100%" style="border: 1px dashed #000; padding: 5px 5px 5px 5px;" colspan="2">###field_headerads###</td>
				</tr>
				<tr>
					<td valign="top" width="50%" style="border: 1px dashed #000; padding: 5px 5px 5px 5px;">###field_content###</td>
					<td valign="top" width="50%" style="border: 1px dashed #000; padding: 5px 5px 5px 5px;">###field_rightsidebar###</td>
				</tr>
			</table>
              ]]></beLayout>
	</meta>
	<ROOT type="array">
		[...]
	</ROOT>
</T3DataStructure>

Der HTML-Code ist in diesem Fall zwar nicht sauber, entspricht aber der Standardausgabe von TemplaVoila mit ein paar Modifikationen. Platzhalter setzen sich aus dem Feldnamen und drei Raute-Zeichen davor und danach zusammen. Die Elemente field_headerads und field_content bzw. field_rightsidebar werden untereinander dargestellt, d.h. field_headerads in der ersten Zeile, field_content und field_rightsidebar in der zweiten Zeile.