Was ist die beste Vorgehensweise für die Verwendung eines Felds als "Attribut" in einer Knotenvorlage mit Drupal 7? Ich verwende den Begriff "Attribut" hier lose, um etwas zu bedeuten, das nicht konkret als HTML-Fragment gerendert werden kann. Vielmehr wird es in einem HTML-Fragment irgendwo in einer Vorlage gerendert.
Die Feld-API macht es sehr einfach, ein "Inhalts" -Feld mit HTML zu versehen, sodass es in einer Vorlage gerendert werden kann, ohne dass die Knotenvorlage aufgrund der Funktionsweise von Renderbäumen bearbeitet werden muss.
Betrachten Sie einen Inhaltstyp wie
- Titel (Titel)
- Körper Körper)
- Extra (field_extra)
Wobei field_extra nur etwas ist, das ich an den Knotentitel heften möchte, z
<?php if (!$page && $title): ?>
<h2><?php print $title ?> — <?php print $extra; ?></h2>
<?php endif; ?>
print render($content);
Dies ist ein sehr, sehr vereinfachtes Beispiel, um zu veranschaulichen, wovon ich spreche.
Ich konnte einfach darauf zugreifen
$extra = trim($field_extra[0]["safe_value"]);
Aber ich müsste eine show () / hide () -Logik durchlaufen, je nachdem, wie die Dinge konfiguriert wurden, und es wird davon abgeraten, direkt auf Felder zuzugreifen.
Ich könnte ein theme_field () erstellen , wie z
function mytheme_field__field_extra ($variables)
{
$items = $variables["items"];
return count($items) == 0 ? "" : trim(drupal_render($items[0]));
}
und dann render () verwenden , aber ich müsste immer noch die Shenanigans show () / hide () durchgehen und ich rendere das Feld nicht wirklich, sondern versuche nur, eine einfache Version davon zu bekommen, um sie irgendwo zu verwenden.
Oder sollte dies wirklich von einem template_preprocess_node () erledigt werden , z
function mytheme_preprocess_node (&$variables)
{
$node = $variables["node"];
$language = $node->language;
if (isset($variables["field_extra"])
&& isset($variables["field_extra"][$language])
&& isset($variables["field_extra"][$language][0])) {
$variables["extra"] = trim($variables["field_extra"][$language][0]["safe_value"]);
}
}
Ich weiß, dass all dies funktionieren wird. Ich bin wirklich interessiert daran, was hier die beste Praxis ist. Ich vermute, dass template_preprocess_node () der beste Weg ist, um damit umzugehen, aber ich habe nichts Bestimmtes über diesen Fall gesehen.
Vielen Dank.