Thursday, December 14, 2017

Wie kann ich die veraltete Extension "metatags" mit TYPO3 6.2 verwenden?

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.

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: