Verwenden von Feldern als Attribute in Knotenvorlagen

7

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 ?> &mdash; <?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.

mpdonadio
quelle

Antworten:

1

Gibt es einen Grund, das Format nicht einfach "<hidden>"in der "Anzeige verwalten" des Inhaltstyps festzulegen? Dann wird es nie gerendert, aber Sie haben es immer noch, wenn Sie es wollen.

Wenn Sie dies wirklich programmatisch tun möchten, ist es für mich die beste Vorgehensweise, ein Modul zu verwenden, das nicht Ihrem Thema entspricht. Warum? Denn wenn sich Ihr Thema ändert ... möchten Sie zusätzliche zeigen? Nein, machen Sie es unabhängig vom Thema, indem Sie es in ein Modul einfügen.

Jonathan Rowny
quelle