Je veux rendre le champ d'un nœud à l'intérieur d'un bloc. Cela fonctionne comme ceci:
<?php
if ($node) {
if (isset($node->field_body_secondary) && $field = $node->field_body_secondary->value) {
$markup = render($field);
$build = array(
'#type' => 'markup',
'#markup' => $markup,
);
}
}
return $build;
Mais ce n'est pas 100% comme si je rendais simplement le champ normalement, le rendant visible dans les paramètres du mode d'affichage.
$nodeview
a#node
pour cléPour rendre un champ unique avec le paramètre d'affichage d'un mode d'affichage, vous pouvez utiliser la
view()
méthode du champ:Exemple de rendu d'image au format teaser:
Ou le corps en entier:
la source
['label' => 'inline' ]
$vars['var_name'] = $node_object->field_name->view()[0];
puis en brindille, je peux rendre {{var_name}}Cette réponse s'appuie sur https://drupal.stackexchange.com/a/208061/394
Pour rendre complètement par programmation le champ que vous terminez en appelant
renderRoot()
, ce qui établit un contexte de rendu distinct de celui que les réponses de page habituelles utiliseraient - un seul contexte de rendu pour une demande ou une sous-demande. Nous pourrions également utiliserrenderPlain()
, mais cela échapperait à tout.Dans la réponse Drush mais pas dans l'exécution de page normale, cela m'a lancé un avertissement:
la source
en relation avec la réponse d' Alex , voici comment je l'ai modifié pour utiliser config_pages et construire un bloc global_footer:
Il est probablement préférable de rendre des champs arbitraires à partir d'une configuration config_pages plutôt que d'extraire des données d'un nœud, mais je suppose que cela dépend vraiment du cas d'utilisation spécifique quant à la meilleure méthode.
la source
Grâce à la réponse de Rainer Feike, je suis parvenu à la solution:
En utilisant
$viewBuilder->viewField
Je peux rendre tous les champs dont j'ai besoin séparément. J'ai juste besoin de savoir comment ajouter la mise en cache en fonction des paramètres du mode d'affichage, mais c'est une autre question :)la source