Theming in Drupal 8 mit TWIG
Eingetragen von AndyLicht (260)
am 22.05.2015 - 08:11 Uhr in
am 22.05.2015 - 08:11 Uhr in
Hallo Forum,
ich versuche mich gerade ein wenig mit dem Theming in Drupal 8, das klappt aus meiner Sicht ziemlich gut. TWIG scheint echt Spaß zu machen. In den Template - Dateien ist auch sehr gut einzusehen, welche Variablen genutzt werden können. Leider gibt es in Drupal noch kein Field-Permission-Modul, daher wollte ich gerne über field--node--field-fieldname.html.twig meine Felder so konfigurieren, dass Sie nur für registrierte Nutzer sichtbar sind. Leider komme ich in diesen Templates nicht an die Variablen "logged_in" und "is_admin".
Hat von euch jemand das Wissen oder eine Idee, wie ich diese Variablen durchgereicht bekomme?
mit bestem Gruß
Andy
- Anmelden oder Registrieren um Kommentare zu schreiben
Variablen
am 22.05.2015 - 08:58 Uhr
Moin.
Kannst Du mal das Template (bzw. den relevanten Ausschnitt) hier pasten?
Beide von Dir genannten Variablen werden in [api:_template_preprocess_default_variables:8] definiert und sollten damit in jedem Template zur Verfügung stehen.
Notfalls musst Du in der Funktion mal einen Breakpoint setzen und debuggen ...
Tipp: Beachte die Verhaltensregeln des DrupalCenter.
Sorrie, klar kann ich das
am 22.05.2015 - 09:33 Uhr
Sorrie,
klar kann ich das hier posten:
Vielleicht noch die Information, dass ich das Bartik-Theme kopiert habe und darauf aufbaue. Ich habe bis dato aber lediglich die CSS-Dateien geändert.
Ich benutze folgendes Template:link zur API
{% set field_name_class = field_name|clean_class %}
{%
set classes = [
'field',
'field-' ~ entity_type|clean_class ~ '--' ~ field_name_class,
'field-name-' ~ field_name_class,
'field-type-' ~ field_type|clean_class,
'field-label-' ~ label_display,
'clearfix',
]
%}
{%
set title_classes = [
'field-label',
label_display == 'inline' ? 'inline',
]
%}
<p>Dump:{{dump() }}</p>
<p>Logged-in:{{dump(logged_in) }}</p>
<p>Admin:{{dump(is_admin)}}</p>
<p>Test:{{dump(field_type)}}</p>
<div{{ attributes.addClass(classes) }}>
{% if not label_hidden %}
<h3{{ title_attributes.addClass(title_classes) }}>{{ label }}</h3>
{% endif %}
<ul{{ content_attributes.addClass('links', 'field-items','meinoverride') }}>
{% for item in items %}
<li{{ item.attributes }}>{{ item.content }}</li>
{% endfor %}
</ul>
</div>
Ich stelle mir das wie folgt vor:
{% if logged_in is 1 %}
{% set field_name_class = field_name|clean_class %}
{%
set classes = [
'field',
'field-' ~ entity_type|clean_class ~ '--' ~ field_name_class,
'field-name-' ~ field_name_class,
'field-type-' ~ field_type|clean_class,
'field-label-' ~ label_display,
'clearfix',
]
%}
{%
set title_classes = [
'field-label',
label_display == 'inline' ? 'inline',
]
%}
<p>Dump:{{dump() }}</p>
<p>Logged-in:{{dump(logged_in) }}</p>
<p>Admin:{{dump(is_admin)}}</p>
<p>Test:{{dump(field_type)}}</p>
<div{{ attributes.addClass(classes) }}>
{% if not label_hidden %}
<h3{{ title_attributes.addClass(title_classes) }}>{{ label }}</h3>
{% endif %}
<ul{{ content_attributes.addClass('links', 'field-items','meinoverride') }}>
{% for item in items %}
<li{{ item.attributes }}>{{ item.content }}</li>
{% endfor %}
</ul>
</div>
{% endif %}
mit folgendem Code funktioniert mein Gedanke schonmal, ich muss jetzt nur noch die Bedingung austauschen:
{% if 'Fabian' starts with 'F' %} oder alternativ um das Gegenteil zu testen {% if 'Fabian' starts with 'A' %}
{% set field_name_class = field_name|clean_class %}
{%
set classes = [
'field',
'field-' ~ entity_type|clean_class ~ '--' ~ field_name_class,
'field-name-' ~ field_name_class,
'field-type-' ~ field_type|clean_class,
'field-label-' ~ label_display,
'clearfix',
]
%}
{%
set title_classes = [
'field-label',
label_display == 'inline' ? 'inline',
]
%}
<p>Dump:{{dump() }}</p>
<p>Logged-in:{{dump(logged_in) }}</p>
<p>Admin:{{dump(is_admin)}}</p>
<p>Test:{{dump(field_type)}}</p>
<div{{ attributes.addClass(classes) }}>
{% if not label_hidden %}
<h3{{ title_attributes.addClass(title_classes) }}>{{ label }}</h3>
{% endif %}
<ul{{ content_attributes.addClass('links', 'field-items','meinoverride') }}>
{% for item in items %}
<li{{ item.attributes }}>{{ item.content }}</li>
{% endfor %}
</ul>
</div>
{% endif %}
vielen Dank für deine Mühen.
Aller Anfang ist schwer...
Hi, ich habe jetzt erstmal
am 22.05.2015 - 09:45 Uhr
Hi, ich habe jetzt erstmal das Debugging aktiviert, da sehe ich dass das logged_in und is_admin tatsächlich vorhanden ist, leider scheint der Wert immer true zu sein. Kann das eventuell an Caching-Funktion liegen?
Ich habe jetzt einmal den Cache gellert und die Seite erstmalig als Gast aufgerufen und siehe da ich bekomme sowohl als Gast für logged_in und is_admin false, wenn ich mich dann aber einlogge, bekomme ich ebenso false zurück, obwohl ich dann eigentlich ein true zurückkriegen sollte.
mfg
Andy
Aller Anfang ist schwer...
Cache
am 22.05.2015 - 09:57 Uhr
Hi, ich habe jetzt erstmal das Debugging aktiviert, da sehe ich dass das logged_in und is_admin tatsächlich vorhanden ist, leider scheint der Wert immer true zu sein. Kann das eventuell an Caching-Funktion liegen?
Jup, das kann durchaus sein. Ich kann mir vorstellen, dass gerade die field-Templates ziemlich stark gecached werden (die Erzeugung dauert ja relativ "lange").
Ich bin mir nicht wirklich sicher, ob man einzelne Templates vom Cache ausschliessen kann; eventuell findest Du in diesem Video eine zufriedenstellendere Antwort dazu: https://www.youtube.com/watch?v=NHe9JtIp5fk
Tipp: Beachte die Verhaltensregeln des DrupalCenter.
Super besten Dank, ein
am 22.05.2015 - 10:21 Uhr
Super besten Dank, ein ähnliches Phänomen habe ich bei einem Block der auf Random gestellt wird, solange ich den Cache nicht leere bleibt die Reihenfolge identisch, obwohl unter den advanced Settings cache auf 'none' gestellt ist. Egal ich schweife ab, gibt es einen alternativen Weg um nicht allen Usern alle Inhalte anzeigen zulassen.
mit bestem Gruß
Aller Anfang ist schwer...