1. Extension-Dateien/-Inhalte auslagern:
- metatags/ext_typoscript_setup.ts ins eigene TypoScript (Setup) kopieren
- metatags/ext_typoscript_constants.ts ins eigene TypoScript (Constants) kopieren
- metatags/meta.php z.b. nach fileadmin/php/meta.php kopieren
2. Anpassungen TypoScript-Setup:
- PHP_SCRIPT durch USER ersetzen, und "includeLibs" und "userFunc" statt "file" verwenden:
plugin.meta = USER
plugin.meta {
#file = EXT:metatags/meta.php
includeLibs = fileadmin/php/meta.php
userFunc = user_metatags
...
- ggf. page.headerData (in plugin.meta) auskommentieren und im eigenen PAGE-Objekt neu einfuegen
3. Anpassungen PHP:
- den Inhalt von meta.php in eine Funktion gemaess "userFunc" (siehe oben) verpacken, und Referenzen auf "$this" entfernen/ersetzen:
function user_metatags($content, $conf) {
//if (!is_object($this)) die('Not called from cObj!');
...
//$localDescription = trim($this->stdWrap($local['description'],$local['description.']));
//$localKeywords = trim($this->stdWrap($local['keywords'],$local['keywords.']));
$obj = $GLOBALS['TSFE']->cObj;
$localDescription = trim($obj->stdWrap($local['description'],$local['description.']));
$localKeywords = trim($obj->stdWrap($local['keywords'],$local['keywords.']));
Das Extension-Verzeichnis "metatags" kann abschliessend geloescht werden.
Hilft Dir bei Deiner Arbeit. Zeigt Dir das was nicht im Handbuch steht. Loest unloesbare Probleme. Das Schweizer Taschenmesser und die milchgebende Eier-Sau im Wollpelz in Sachen TYPO3.
Showing posts with label typoscript. Show all posts
Showing posts with label typoscript. Show all posts
Thursday, December 14, 2017
Monday, June 26, 2017
Optionsplit verwenden
#
# BEISPIELCODE FUER OPTIONSPLIT
#
# die optionsplit-logik steht nur in wenigen properties zur verfuegung.
# beispielsweise verwendet ein CONTENT cObject diese logik nicht.
# anders aber ein TMENU oder GMENU, hier kann optionsplit verwendet werden.
# ebenso steht optionsplit bei den properties "cObj" und "wrap" der split-
# funktion zur verfuegung.
# zur ausfuehrung des untenstehenden beispielcodes sollten mind. drei pages
# vorhanden sein (zur erzeugung des HMENU), sowie auf der aktuellen seite
# mind. drei content-elemente.
temp.separator = TEXT
temp.separator.value = <hr>
page = PAGE
# optionsplit steht bei allen properties eines menuitems (NO, ACT, ...)
# zur verfuegung. via optionsplit wird der erste menu-eintrag ohne komma,
# und alle weiteren mit komma-symbol vorangestellt ausgegeben.
page.10 = HMENU
page.10 {
1 = TMENU
1 {
NO = 1
NO.allWrap = | |*| ,|
}
}
page.11 < temp.separator
# ein menu greift zunaechst nur auf daten der tabelle "pages" zu - bei anderen
# objekten / tabellen muss man anders vorgehen:
#
# via HMENU.special = userfunction und einer entspr. PHP-funktion koennen
# auch andere daten/tabellen abgefragt werden.
#
# wenn keine PHP-funktion benoetigt werden soll, dann koennen andere cObjects
# verwendet werden (bei denen stdWrap zur verfuegung steht), wie im folgenden
# demonstriert:
# 1. ein renderObj (bzw. je nach kontext) fuer die ausgabe,
# mit einem trennsymbol angehaengt
page_content_renderObj = TEXT
page_content_renderObj {
field = uid
wrap = |SPLIT_HERE
}
# (man beachte dass das trennsymbol "SPLIT_HERE" in diesem beispiel immer
# hinten angehaengt wird, auch beim letzten erzeugten renderObjs)
# 2. ein cObject - z.b. CONTENT - erzeugt den auszugebenden code,
# unter verwendung des obigen renderObj.
# via stdWrap.split wird der auszugebende code wieder aufgetrennt,
# und dabei via wrap (mit optionsplit) mit neuen individuellen
# trennsymbolen versehen:
# (hierbei werden auch leere werte gewrapped und ausgegeben - vgl. 3., unten)
page.20 = CONTENT
page.20 {
table = tt_content
select {
pidInList = this
}
renderObj = < page_content_renderObj
stdWrap {
split {
token = SPLIT_HERE
wrap = | |*| ,|
}
}
}
page.21 < temp.separator
# 3. "split" liefert auch leere werte zurueck, falls sich das trennsymbol
# am anfang oder am ende des jew. strings befindet, oder wenn zwei
# trennsymbole direkt aufeinanderfolgen.
# falls dieses verhalten nicht erwuenscht ist, kann split.wrap nicht
# direkt verwendet werden. anstelle dessen wird cObjNum (mit optionsplit)
# verwendet, und die jew. cObj's mit einer entsprechenden bedingung
# (if.isTrue) versehen.
page.30 < page.20
page.30 {
stdWrap {
split >
split {
token = SPLIT_HERE
cObjNum = 1 |*| 2
1.current = 1
1.if.isTrue.data = current
2 < .1
2.wrap = ,|
}
}
}
Ergebnis/Ausgabe:
Labels:
cobjnum,
gmenu,
hmenu,
menu,
optionsplit,
tmenu,
typoscript
Wednesday, June 24, 2015
Wie erhalte ich eine FAL Datei Referenz z.b. zur Verwendung mit TypoScript IMAGE cObject?
$relationHandler = \TYPO3\CMS\Core\Utility\GeneralUtility::makeInstance('TYPO3\\CMS\\Core\\Database\\RelationHandler');
$configuration = $GLOBALS['TCA']['tt_content']['columns']['image']['config'];
$relationHandler->start($imagedata['image'], $configuration['foreign_table'], $configuration['MM'], $imagedata['uid'], 'tt_content', $configuration);
$relationHandler->processDeletePlaceholder();
$referenceUids = $relationHandler->tableArray[$configuration['foreign_table']];
foreach ($referenceUids as $referenceUid) {
try {
$fileReference = \TYPO3\CMS\Core\Resource\ResourceFactory::getInstance()->getFileReferenceObject($referenceUid, array(), ($wsid === 0));
//$origFile = $fileReference->getOriginalFile();
$filename = $fileReference->getName();
// write back to our $imagedata element... (for compatibility)
$imagedata['image'] = $filename;
// ...and store fileReference identifier for later use:
$imagedata['fileref_uid'] = $fileReference->getUid();
} catch (\TYPO3\CMS\Core\Resource\Exception\FileDoesNotExistException $e) {
/* just catch exception, because we can't do anything about it here */
}
}
$confIMG = array(
'file' => isset($imagedata['fileref_uid']) ? $imagedata['fileref_uid'] : 'uploads/pics/'.$imagedata['image'],
'file.' => array (
'width' => $width,
'treatIdAsReference' => isset($imagedata['fileref_uid']) ? 1 : 0,
),
'params' => 'align="left" style="margin:0 10px 5px 0;"',
'titleText' => trim($imagedata['tx_team_position'].' '.$imagedata['header']),
);
Labels:
6.x,
bilder,
fal,
fal migration,
field image,
file,
image,
IMG_RESOURCE,
media,
reference,
typo3 6.2,
typoscript,
update,
upgrade
Thursday, April 3, 2014
Wie kann ich eine TypoScript-Constants Datei ohne die TYPO3-Frontend-Umgebung benutzen/lesen/parsen/auswerten?
Eine grundlegende Beschreibung zum parsen von TypoScript-Dateien befindet sich hier:
http://docs.typo3.org/typo3cms/TyposcriptSyntaxReference/TypoScriptParserApi/Index.html
Diese wendet sich aber an (Core-)Extension-Entwickler, die z.b. TypoScript-Erweiterungen implementieren moechten.
Falls man die bestehenden TypoScript-Moeglichkeiten, d.h. das bestehende Framework nutzen moechte, wird etwas mehr benoetigt.
Hier ein gekuerztes Beispiel, das aus folgender Situation entstanden ist: in einem eigenen PHP-Page-Not-Found-Handler sollen Werte aus einer TypoScript-Constants-Datei verwendet werden. Im Page-Not-Found-Handler stehen die Werte aus $GLOBALS['TSFE'] nur unvollstaendig zur Verfuegung (da ja keine Seite gefunden wurde), und vor allem kein $GLOBALS['TSFE']->tmpl->setup (d.h. ausgewertetes TypoScript-Setup).
require_once(\TYPO3\CMS\Core\Utility\ExtensionManagementUtility::extPath('core') . 'Classes/Utility/GeneralUtility.php');
require_once(\TYPO3\CMS\Core\Utility\ExtensionManagementUtility::extPath('core') . 'Classes/TypoScript/Parser/TypoScriptParser.php');
require_once(\TYPO3\CMS\Core\Utility\ExtensionManagementUtility::extPath('frontend') . 'Classes/Configuration/TypoScript/ConditionMatching/ConditionMatcher.php');
class myPhpObjectClass {
function myMethod() {
// 1. read our typoscript constants file:
$constants_ts = file_get_contents($_SERVER['DOCUMENT_ROOT'].'/path/to/your/constantsfile.ts');
// 2. build typoscript parser:
$TSparserObject = \TYPO3\CMS\Core\Utility\GeneralUtility::makeInstance('TYPO3\CMS\Core\TypoScript\Parser\TypoScriptParser');
// 3. build matchObject for TypoScript conditions to work (ooh, very typo3-ish...):
$matchObject = \TYPO3\CMS\Core\Utility\GeneralUtility::makeInstance('TYPO3\CMS\Frontend\Configuration\TypoScript\ConditionMatching\ConditionMatcher');
// 4. add to (incomplete, because page-not-found) $GLOBALS['TSFE'], required by our $matchObject
// (actually only rootLine required, but we build complete tmpl object, just for the sake of typo3-ness...):
$GLOBALS['TSFE']->tmpl = \TYPO3\CMS\Core\Utility\GeneralUtility::makeInstance('TYPO3\CMS\Core\TypoScript\TemplateService');
$GLOBALS['TSFE']->tmpl->rootLine = $pObj->rootLine;
// 5. parse typoscript (ooh, again, very typo3-ish: must check include lines... separately...)
$constants_ts = \TYPO3\CMS\Core\TypoScript\Parser\TypoScriptParser::checkIncludeLines($constants_ts);
$TSparserObject->parse($constants_ts, $matchObject);
// 6. whatever we have parsed is now in $TSparserObject->setup:
$constants = $TSparserObject->setup;
// 7. finally, we can grab the values needed! :-)
$myValue = $constants['myValueFromConstantsfile'];
}
}
(entwickelt mit TYPO3 6.1.7)
Moegliche Verbesserungen:
- Wie parsed man eine Setup-Datei einschliesslich Konstanten (z.b. {$myConstant})?
- bessere Methode (statt file_get_contents($_SERVER['DOCUMENT_ROOT']...)) zum Einlesen der TypoScript-Datei?
Tuesday, April 1, 2014
Wie kann man den Layout-Schalter eines Content-Elements nutzen?
...im TSConfig Feld einer Seite eingeben:
TCEFORM {
tt_content {
layout {
# neue eintraege hinzufuegen:
addItems {
4 = Layout fuer hervorgehobene Elemente
}
# mit "altLabels" koennen die bestehenden eintraege veraendert werden:
altLabels {
2 = Mein Layout
}
}
}
}
...im TypoScript Template Feld "Setup":
lib.layoutSwitchCObject = CASE
lib.layoutSwitchCObject {
key.field = layout
4 = TEXT
4.value = <div id="c{field:uid}" class="csc-default step-by-step-guide">|</div>
4.insertData = 1
}
# nun ergaenzen wir die ausgabe der content-elemente via styles.content.get
# durch unser cObject (siehe oben)
page = PAGE
page {
10 < styles.content.get
10 {
renderObj {
stdWrap.innerWrap.cObject < lib.layoutSwitchCObject
}
}
}
Friday, January 24, 2014
Wie gibt man ein Feld in der Standard-Sprache aus, waehrend die Seite in einer anderen Sprache angezeigt wird?
Hier ein Beispiel fuer den Titel der darueberliegenden Seite:
fuer TYPO3 v4.7 und hoeher (getestet mit v6.1):
10 = TEXT
10.data.orderedStdWrap {
10.field = pid
20.wrap = DB:pages:|:title
}
und evtl. auch in vorigen versionen von TYPO3 (nicht getestet, d.h. nur mit v6.1) :
10 = TEXT
10.data.stdWrap {
cObject = TEXT
cObject.field = pid
cObject.wrap = DB:pages:|:title
}
Subscribe to:
Posts (Atom)
