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:

No comments:

Post a Comment