Content Text mit dem Workflow erstellen

Die Texte müssen mit dem Schlüssel gebaut werden. Hier nicht die TID verwenden da immer mehrere Texte angelegt werden können mit dem selben Schlüssel. Welcher Text gerade angezeigt wird, entscheidet die Gültigkeit.

Hier wird am besten der Builder für Texte \Alvine\Application\Platform\Logic\Workflow\Action\Builder\Fragment\Text verwendet. Weil es nur einen Platzhalter gibt und es keinen Überflüssigen Tag im Template verbaut werden soll. Dieser TAG ist in der Regel immer störend.

<step name="do-load-data">
    <actions>
        <action class="\Alvine\Application\Platform\Logic\Workflow\Action\Builder\Datasource\SetDataset">
            <parameters>
                <parameter name="datasource">\Customisation\Builder\DataSource\Content\Text</parameter>
                <parameter name="container-dataset-key">dataset</parameter> <!-- optional -->
            </parameters>
        </action>
    </actions>
</step>
 <step name="do-build-fragments">
    <actions>
        <action class="\Alvine\Application\Platform\Logic\Workflow\Action\Builder\Fragment\Text" >
            <parameters>
                <parameter name="container-dataset-key">dataset</parameter> <!-- optional -->
                <parameter name="templateFile[0]">{CUSTOMISATIONPATH}resource/frontend/template/text.html</parameter>
                <parameter name="outputFile[0]">{CUSTOMISATIONPATH}/resource/frontend/html/content/text/{name}.html</parameter>                
            </parameters>
        </action>
    </actions>
</step>

Factory

Die Factory bekommt über das Delta die TID übermittelt die gebaut werden soll. Es ist ja nicht gesagt das diese TID auch zur Anzeige kommen soll. Die Entscheidung muss noch über die Gültigkeit ermittelt werden.

Die Factory prüft anhand der TID welche Texte über den Schlüssel noch zu treffen und filtert den Text raus der zur Anzeige kommen muss.

Beispiel:

Jetzt ist 2021-03-23 10:00:00

TID key start end raking unentlich beschreibung
1 home 0000-00-00 00:00:00 0000-00-00 00:00:00 1 ja standard Text auf der Startseite
2 home 2021-04-01 00:00:00 2021-04-31 00:00:00 100 nein im April soll dieser Text gültig sein
3 home 2021-03-23 00:00:00 2021-03-23 23:59:59 100 nein nur an diesem Tag soll dieser Text angezeigt werden

Es können mehrere Texte gepflegt werden die zu unterschiedlichen Zeiten online sein sollen. Wenn mehrere Texte gültig sind wird über die Gewichtung entschieden welcher Text genommen wird.

Datasource

<?php
/**
 * ALVINE
 * 
 * COPYRIGHT: All  title   and  proprietary  rights,  including  trade
 * secrets,   in   the   Software   and   any   copies thereof and the
 * accompanying  written   materials,   are  owned  by   schukai  GmbH
 * and  are  protected  by  German  copyright  laws,  other applicable
 * copyright   laws  and  international  treaty  provisions.
 * 
 * @category   Alvine Platform
 * @package    Alvine\Application\Platform
 * @author     schukai GmbH <[email protected]>
 * @copyright  2002 - 2021 schukai GmbH
 * @license    http://alvine.io/license/ Alvine Nutzungslizenz
 * @version    $Revision: 1511 $
 * @link       http://alvine.io/ alvine.io
 */
namespace Customisation\Builder\DataSource\Content;

/**
 * Text
 */
class Text extends \Alvine\Application\Platform\Builder\DataSource\Content\Text{
   use \Alvine\Application\Platform\Builder\DataSource\Implementation\Content\Text\Property;
   use \Alvine\Application\Platform\Bridge\Core\Property;
   use \Alvine\Application\Platform\Bridge\Persistence;


    /**
     * Diese Methode bietet die Möglichkeit 
     * die Daten für einen Datensatz
     * nach den injectMethods manipulieren zu können
     * 
     * @param \Alvine\Types\Map $data
     * 
     * @return \Alvine\Types\Map $data
     */
     public function finalize(\Alvine\Types\Map $data): \Alvine\Types\Map {
        $data=parent::finalize($data);

        if($data->getValue('type')===40) {
            /**
             * /srv/www/image/alvine/upload/content/part/86/de/
             */
            $array=\unserialize($data['propertyFlat']['text.de']['value']);

            $data->setValue('text', '<img src="/image/alvine/upload/content/part/'.$data->getValue('tid').'/de/image.jpg" >');
        } else if($data->getValue('type')===50) {

            $config=\unserialize($data['propertyFlat']['text.de']['value']);
            $content=[];

            foreach($config as $key) {
                $id=\uniqid();
                $content[]='<div class="slide alvineAjaxLoader" 
                         id="'.$id.'" 
                         data-alvineajaxloader-url="/fragment/content/text/'.$key.'" 
                         data-alvineajaxloader-targetselector="#'.$id.'" 
                         data-alvineajaxloader-immediatelycall="true"
                         ></div>';
            }

            $data->setValue('text', \implode("\n", $content));
        } else {
            $data->setValue('text', $data['propertyFlat']['text.de']['value']??null);
        }

        return $data;
    }

}

Template

Das Template besteht nur aus einem Platzhalter, dieser Platzhalter wird von der Datasource $data->setValue('text', $data['propertyFlat']['text.de']['value']) gesetzt;

{text}

Route

Die Route liefert nur den Text aus mit dem Namen (KEY) der HTML Datei

<container placeholder="chminfo">
    <file path="/var/alvine-platform/resource/frontend/html/content/text/" name="home_ueber_uns.html"></file>
</container>
<container placeholder="chminfoimage">
    <file path="/var/alvine-platform/resource/frontend/html/content/text/" name="home_ueber_uns_bild.html"></file>
</container>

Gruppen Anzeige

Die Gruppe (Type 50) ist nur für die Konfiguration und nicht für den Inhalt verantwortlich. Die Inhalte werden über den Workflow bereits gebaut und werden per Javascript nachgeladen. Eine Konfiguration wäre zum Beispiel so:

<div class="slide alvineAjaxLoader" 
                         id="60a35a03939ac" 
                         data-alvineajaxloader-url="/fragment/content/text/slide_home_pos_1" 
                         data-alvineajaxloader-targetselector="#60a35a03939ac" 
                         data-alvineajaxloader-immediatelycall="true"
                         ></div>
<div class="slide alvineAjaxLoader" 
                         id="60a35a03939b1" 
                         data-alvineajaxloader-url="/fragment/content/text/slide_home_pos_2" 
                         data-alvineajaxloader-targetselector="#60a35a03939b1" 
                         data-alvineajaxloader-immediatelycall="true"
                         ></div>
<div class="slide alvineAjaxLoader" 
                         id="60a35a03939b2" 
                         data-alvineajaxloader-url="/fragment/content/text/slide_home_pos_3" 
                         data-alvineajaxloader-targetselector="#60a35a03939b2" 
                         data-alvineajaxloader-immediatelycall="true"
                         ></div>
<div class="slide alvineAjaxLoader" 
                         id="60a35a03939b3" 
                         data-alvineajaxloader-url="/fragment/content/text/slide_home_pos_4" 
                         data-alvineajaxloader-targetselector="#60a35a03939b3" 
                         data-alvineajaxloader-immediatelycall="true"
                         ></div>