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>