2016-01-19 2 views
1

J'ai ajouté un champ au type de contenu de la page de base. C'est une boîte de sélection, qui est cochée ou non cochée selon que la page est du type 'Getting Started'. Je veux ajouter la classe 'getting-started' à l'élément body dans le HTML si la page est une page de démarrage, c'est-à-dire que la case est cochée. Je veux faire cela dans le fichier .theme. Donc, essentiellement, je veux vérifier aussi voir si le champ est vide, et si ce n'est pas ajouter la classe à l'élément de corps. Toute aide serait très appréciée.Comment vérifier si un champ est vide dans drupal 8?

Répondre

0

Vous pouvez utiliser la fonction template_preprocess_node (https://api.drupal.org/api/drupal/core%21modules%21node%21node.module/function/template_preprocess_node/8) pour sélectionner les variables disponibles du nœud en cours de chargement.

Dans cette fonction, vous pouvez accéder aux champs de nœuds comme ceci:

$variables['content']['field_some_name'] 

Si votre chèque passe, vous pouvez ajouter une variable personnalisée à utiliser dans le modèle de brindille:

$variables['something'] = true; 

OU: vous vérifiez la valeur du champ directement dans le modèle de brindille de noeud. La question est de savoir s'il est vraiment nécessaire pour vous d'ajouter la classe désirée à l'élément body. Peut-être que l'ajouter à l'étiquette d'article du noeud fait le travail, ce serait au moins plus facile à vérifier.

Si vous avez vraiment besoin de l'ajouter à l'élément de corps, je suppose que vous aurez besoin d'utiliser la fonction template_preprocess_page et vérifier d'abord si la page en cours de chargement est un nœud, puis savoir quel noeud etc.

+0

Malheureusement je dois ajouter la classe à l'élément body, puisque je dois changer la couleur du titre de la page en fonction de la valeur du champ que je vérifie. Je connais le processus d'ajout d'une classe au corps dans la fonction 'template_preprocess_page', mais je ne suis pas familier avec le comment et le pourquoi de ce que vous avez décrit dans la dernière partie de votre réponse, "vérifiez d'abord si la page être chargé est un nœud et ensuite découvrir quel nœud etc ". – ljolz

+0

Je ne pouvais pas simplement vérifier pour voir si le champ est avec le code que vous avez échantillonné ci-dessus, puis appliquer la classe tous dans la fonction de pré-traitement de la page? – ljolz

+0

Le "problème" est que template_preprocess_page est appelé sur toutes les pages, pas seulement les nœuds, par ex. sur les pages de catégorie, la page d'accueil ou toute autre page d'entité personnalisée. Donc la variable $ variables n'est pas toujours la même. C'est ce que je voulais dire par "vérifier d'abord si la page en cours de chargement est un nœud, puis découvrir quel nœud etc.". –

4

Pour vérifier si un champ est vide, vous pouvez utiliser la méthode intégrée isEmpty().

.: par exemple

if (!$entity->get('category')->isEmpty()) { 
    /** @var EntityInterface $category */ 
    $category = $entity->get('category')->entity; 
    $row['category']['data'] = [ 
    '#type' => 'link', 
    '#title' => $category->get('name')->value, 
    '#url' => $category->toUrl(), 
    ]; 
} 
else { 
    $row['category'] = NULL; 
} 
0

La manière suivante vous pouvez vérifier le champ est vide ou non dans le modèle TWIG.

{% if node.field_date.value %} 
    <div class="my-field-wrapper"> 
    {{ content.field_date }} 
    </div> 
{% endif %} 

ou

{% if node.field_date.value is not empty %} 
    {{ content.field_date }} 
{% endif %} 
0

Cette solution a fonctionné pour moi, le field_poster n'a pas ou valeur maximum 1.

{% if content.field_poster[0] is not empty %}