Achter Schritt - Die Ausgabe in der Seite

Nun stellt sich die Frage, wie die Daten auf der Seite ausgegeben werden? Es gibt dazu mehrere Möglichkeiten:

View

Für jede Action bietet das RedSpark Framework einen View. Im Verzeichnis "Views" unterhalb des Modulverzeichnises kann für jede Action eine <action>View.tpl Datei abgelegt werden in welcher die über die Actionklasse per "Assign" zugewiesenen Daten in SMARTY ausgewertet werden können.

Inline Action

Für die Ausgabe einer Action außerhalb des Contentbereiches im Layout (z.B. Menu, Brotkrumenspur, Anzahl angemeldete Nutzer, etc.) hält RedSpark das Prinzip der Inline Actions bereit. Pro Template können in der Designkonfiguration beliebig viele Inline Actions angegeben werden. Das System ersetzt die entsprechenden Schlüsselwörter bei Erzeugung des Views durch die Ausgaben der Inline Actions.

Parser Tag

Das RedSpark System bietet einen eigenen Parser, welcher es ermöglicht, über eine spezielle Syntax Methoden unter Angabe beliebig vieler Parameter aufzurufen. Jedes Modul kann beliebig viele Parser-Tags im System registrieren. 

Das FAQ Modul muss ein Parser-Tag anbieten, um Fragen und Antworten auszugeben. Im Tag müssen zusätzlich das Ausgabetemplate und ggf. weitere Optionen angegeben werden können.

Das Parser-Tag sieht also wie folgt aus:

^[^(FAQ|<Gruppe>^


Das FAQ Modul bietet den Parser-Tag wie folgt an:

modules/faq/controllers/FaqController.php


<?php
    
...

    

    
/**

     * Liefert die Platzhalterdaten für die Parsertabelle die später in den Webseiten 

     * gegen das gerenderte Modul ausgetauscht werden.

     * Überschriebene Methode aus der Elternklasse core/modules/abstractModule.class.php .

     *

     * @name         getParserTags

     * @return         array Parser-Tags für das Modul (die Indizes entsprechen den Feldern der DB-Tabelle)     

     * @version     1.0 2008/06/16     

     */

    public function getParserTags()

    // Core

        $return_value = array

            (

                array(

                    "tag"             => 'FAQ',

                    "method"         => 'getFaqParserOutput',

                    "name"             => 'FAQ',

                    "comment"         => '<group>|<theme>',

                ),

            );

        

        
return $return_value;

    }

    

    
...



    /**

     * getFaqParserOutput -> used by parser Tag FAQ

     */

    public static function getFaqParserOutput($groups=''$theme='default') {

        /* Datebankabfrage und Auswertung */

        

        
/* Render with snippet */

        if ($theme ==''$theme 'default';

        return RedsparkCore_View::getInstance()->fillSnippet('faq',$theme,Array());

    }

        

    
...
?>


templates/meintemplate/modules/faq/default.tpl


{* ----------------------------------------------- *}

{* default.tmpl.php                                    *}

{*                                                   *}

{* DEFAULT Template für das FAQ Modul.               *}

{* Besteht aus drei Zuständen                       *}

{*     - zugeklappt und noch nie aufgeklappt gewesen  *}

{*    - aufgeklappt                                   *}

{*    - zugeklappt und schon einmal aufgeklappt       *}

{*    gewesen (Frage wird dann anders dargestellt) *}

{* ----------------------------------------------- *}



{* ----------------------------------------------------------- *}

{* Iteration über die FAQ Gruppen                               *}

{* ----------------------------------------------------------- *}



<div class="faq_dhtml">

{* {assign var="counter" value=1} *}



{foreach from=$groupData item="gruppe" key="gruppenName"}

    {if $gruppe|@count>0}

    <div class="faq_group">

        <h2>{$gruppenName}</h2>

        

        {foreach from=$gruppe item="faq_element" name="fe_item"}

            

            {random in=1 out=100000 assign="id"}

            

            <div class="question" id="faq_question_{$id}">

                <h3 id="faq_question_{$id}_headline">{$faq_element.frage}</h3>

                <a id="faq_link_{$id}" class="faq_question_showlink marked" href="javascript:void(0);" ><span>Antwort</span></a>

                <div class="clear"></div>

                <div id="faq_question_{$id}_answer" class="answer" style="display:none;">

                    <span>{$faq_element.antwort}</span>

                </div>

            </div>

            <script type="text/javascript">

            Event.observe("faq_link_{$id}", "click", function (e) {literal}{{/literal}

                var link = $("faq_link_{$id}"); //e.findElement('a');

                link.toggleClassName('read');

                Element.toggleContent(link,{literal}{src: '<span>Antwort</span>', dst: '<span>Schliessen</span>'}{/literal});

                $('faq_question_{$id}_answer').toggle();

                $('faq_question_{$id}_headline').addClassName('faq_headline_read');

                $('faq_question_{$id}_answer').addClassName('faq_answer_read');

            {literal}});{/literal}

            </script>

            

            {*

            <!-- geschlossenes div ohne zusatzinfos -->

            <div id="plugin_{$counter}_1" style="display:visible" {if !$smarty.foreach.fe_item.last}class="faq_holder"{/if}>

                <div style="float:right">

                    <a href="javascript: switch_layer(document.getElementById('plugin_{$counter}_1')); switch_layer(document.getElementById('plugin_{$counter}_2'));" title="Antwort einblenden">

                        <span class="faq_arrow">&dArr;</span>

                    </a>

                </div>

                <div>

                    <a href="javascript: switch_layer(document.getElementById('plugin_{$counter}_1')); switch_layer(document.getElementById('plugin_{$counter}_2'));">

                        <span class="faq_question">

                            F: {$faq_element.frage}

                        </span>

                    </a>

                </div>

            </div>

            

            <!-- ausgeklapptes div mit zusatzinfos -->

            <div id="plugin_{$counter}_2" style="display:none" {if !$smarty.foreach.fe_item.last}class="faq_holder"{/if}>

                <div align="right" valign="top" style="float:right">

                    &nbsp;<a href="javascript: switch_layer(document.getElementById('plugin_{$counter}_2')); switch_layer(document.getElementById('plugin_{$counter}_3'));" title="Antwort ausblenden">

                        <span class="faq_arrow">&uArr;</span>

                    </a>

                </div>

                <div>

                    <span class="faq_question_read">

                        F: {$faq_element.frage}

                    </span>

                </div>

                <div class="faq_answer" style="clear:both">

                    A: {$faq_element.antwort}

                </div>

            </div>

            

            <!-- geschlossenes div, das schon einmal geöffnet war -->            

            <div id="plugin_{$counter}_3" style="display:none" {if !$smarty.foreach.fe_item.last}class="faq_holder"{/if}>

                <div style="float:right">

                    <a href="javascript: switch_layer(document.getElementById('plugin_{$counter}_3')); switch_layer(document.getElementById('plugin_{$counter}_2'));" title="Antwort einblenden">

                        <span class="faq_arrow">&dArr;</span>

                    </a>

                </div>

                <div>

                    <span class="faq_question_read">F: {$faq_element.frage}</span>

                </div>            

            </div>

            *}

        

            {* {assign var="counter" value=$counter+1} *}

        {/foreach}

    </div>

    {/if}    

{/foreach}

</div>



Asset

Für Daten, die durch den Redakteur angepasst oder konfiguriert werden sollen, kann jedes Modul eigene Assettypen registrieren. Einer bestimmten Klassensyntax folgend kann entweder einfach ein Interface für ein Parser Tag gebaut oder auch komplexere Vorgänge über eine Assetklasse realisiert werden. Alles weitere wird im Abschnitt "Die eigenen Seitentypen" näher beschrieben.

Kuborgh GmbH

Hamburg 040 819 773 770 Köln 0221 276 66 96 info@kuborgh.de www.kuborgh.de

RedSpark Community

RedSpark Community

Community Website
RedSpark Apps

RedSpark Apps

Zur Übersicht
RedSpark Download

RedSpark Basispaket

Zum Download
Key facts