Hallo,
wie kommt man denn an diese Daten ran bzw verarbeitet die im Twig? einen Filter für deserialize scheint es in Contao bzw RSCE nicht zu geben?
Wenn das noch Zukunftsmusik ist belasse ich es vorerst bei den html5 Templates.
Druckbare Version
Hallo,
wie kommt man denn an diese Daten ran bzw verarbeitet die im Twig? einen Filter für deserialize scheint es in Contao bzw RSCE nicht zu geben?
Wenn das noch Zukunftsmusik ist belasse ich es vorerst bei den html5 Templates.
Einen json_decode Filter gibt es nicht von Haus aus in Twig. "Zukunftsmusik" ist das auch nicht, wenn es niemand in der Zukunft implementiert ;). Wenn du das brauchst, wirst du es dir selbst in deiner App hinzufügen müssen.
Aber: warum genau brauchst du das überhaupt?
Naja das Value für RSCE sieht ja scheinbar so aus
Oder steh ich grad voll auf dem Schlauch weil es noch kein Mittag gab :DHTML-Code:"rsce_data" => "{"projects":[{"title":"..."....
EDIT: hab grad gesehen das es für "projects" ja auch ne extra variable gibt.... ergo doch der Hunger schuld, oh man:rolleyes:
Die RockSolid Custom Elements übergeben ja schon die dekodierten Daten an das Template. Daher die Frage was genau du überhaupt machen willst.
Eine Sache klemmt trotzdem
wenn ich
einfüge kommt folgender FehlerCode:{% import "@ContaoCore/Image/Studio/_macros.html.twig" as studio %}
{{- studio.figure(data.image) -}}
und wie bekomme ich die Größe übermittelt die liegt ja wirklich nur in diesem Format vorZitat:
Impossible to access an attribute ("linkHref") on a string variable ("b87b4f65-85ad-11eb-880f-1c1b0d437b94").
Code:"size" => "a:3:{i:0;s:0:"";i:1;s:0:"";i:2;s:1:"6";}"
Ich hoffe, meine Frage passt hier rein, da ich versuche, eine Bildergallerie in Twig auszugeben und auf dem Schlauch stehe, wie ich nun die multiSRC aufgelöst bekomme.
Bisher habe ich das so umgesetzt
RSCE-Config
TemplateCode:'multiSRC' => array (
'label' => array('Bilder und Ordner', ''),
'inputType' => 'standardField',
'eval' => array (
'isGallery' => true,
'multiple' => true,
'fieldType' => 'checkbox',
'orderField' => 'orderSRC',
'files' => true,
'extensions' => \Config::get('validImageTypes'),
'tl_class' => 'clr',
'mandatory' => true
)
),
Code:<?php
$dataSorted = Contao\StringUtil::deserialize($this->multiSRC);
?>
<div class='ce_gallery __galleryContainer content-gallery'>
<ul>
<?php foreach($dataSorted as $data): ?>
<li>
<figure>
<?php if($image = $this->getImageObject($data, array('','', 1))): ?>
<?php $this->insert('picture_default', $image->picture); ?>
<?php endif; ?>
</figure>
</li>
<?php endforeach; ?>
</ul>
</div>
Das musst du nicht selbst deserialisieren, unabhängig davon ob du Twig nutzt oder nicht. Siehe https://community.contao.org/de/show...l=1#post582040
Du meinst, wie man im Twig bspw. eine for-Schleife umsetzt..? Die Dokumentation zu Twig kennst du schon? https://twig.symfony.com/doc/
Ja, kenn ich, ist im ein wichtigstes Werkzeug gerade ;)
So hatte ich es versucht, gibt aber nichts aus, auch keinen Fehler.
Code:{% use "@Contao/component/_figure.html.twig" %}
<ul>
{% for data in multiSRC %}
<li>
{% set galFigure = figure(data, 52, {
enableLightbox: true,
lightboxGroupIdentifier: 'galleryImages',
}) %}
{% with {figure: galFigure} %}{{ block('figure_component') }}{% endwith %}
</li>
{% endfor %}
</ul>
Die Template-Daten befinden sich in data (also bspw. data.multiSRC). Mit {% dump() %} kannst du dir die Template-Daten anzeigen.
mit dump hatte ich es bereits versucht den Aufbau zu verstehen, scheitere aber auch jetzt wieder
Dump-Ausgabe vor der Schleife
Code:
{{ dump(multiSRC) }} oder {{ dump(data.multiSRC) }} // erzeugt die gleiche Ausgabe, obwohl data noch gar nicht existiert
erzeugt:
b"
a:33:{i:0;s:16:"¬5WÓÁ3
\x11
¯®
\x04
¨·
\x1E
#
\x02
Ä";i:1;s:16:"¬5A8Á3
......
Dump-Ausgabe innerhalb der Schleife
irgendwas verstehe ich etwas falsch oder habe einen Denkfehler,sorryCode:
<ul>
{% for data in multiSRC %}
<li> // li tags werden nicht erzeugt
{{ dump(data) }}
Ausgabe->nichts
</li>
{% endfor %}
</ul>
Oder du schreibst dir deine eigene Twig-Funktion
Usage:PHP-Code:
<?php
// src/Twig/AppExtension.php
namespace App\Twig;
use Contao\StringUtil;
use Twig\Extension\AbstractExtension;
use Twig\TwigFilter;
class AppExtension extends AbstractExtension
{
public function getFunctions(): array
{
return [
new TwigFunction('deserialize', [$this, 'deserialize'])
];
}
public function deserialize(string $value): array
{
return StringUtil::deserialize($value, true);
}
}
PHP-Code:
{% set foo = deserialize(data.bar) %}
Jetzt blick ich gar nicht mehr durch: Zuerst meinte Spooky, dass ich die daten nicht mehr deserialisieren muss, was ich so verstanden habe, dass ich die Daten der multiSRC direkt in einer For-Schleife ausgegeben bekomme. Zoglo schreibt, man kann das mit Hilfe einer eigenen Funktion lösen, die aber wieder zu deserialisieren scheint. Ich will nur wissen, was ich machen muss, damit der Code-Schnipsel vereinfacht ausgedrückt irgendwie funktioniert.
Code:{% for dataImage in multiSRC %}
{{ contao_figure(dataImage, 55) }}
{% endfor %}
Evt. übergibt die Extension diese Daten doch nicht unserialized an das Template.
ich habe für mich eine sehr einfache Lösung gefunden, RSCE Gallerien in Twig Umzusetzen, vielleicht hilft es ja jemand: {{ content_element('gallery', ....) }}
RSCE-Config
RSCE-TwigCode:'multiSRC' => array (
'label' => array('Bilder und Ordner', ''),
'inputType' => 'standardField',
'eval' => array (
'isGallery' => true,
'multiple' => true,
'fieldType' => 'checkbox',
'orderField' => 'orderSRC',
'files' => true,
'extensions' => 'jpg,jpeg,png',
'tl_class' => 'clr',
'mandatory' => true
)
),
Im Twig Template wird automatisch ein Wrapper mit den entsprechenden Klassen erzeugt inkl. der Liste. Weitere Optionen, die anscheinend möglich sind habe ich bisher noch nicht gefunden. Vielleicht hilft es ja jemand.Code:
{% set imageSizeId = 8 %}
{% set lightBox = true %}
{% set columnSize = 4 %}
{{
content_element('gallery', {
multiSRC: data.multiSRC,
size: imageSizeId,
sortBy: '',
perRow: columnSize,
limit: 36,
fullsize: lightBox,
})
}}