Comment hook_theme ()?
Je vais avoir du mal à comprendre ce qui hook_theme().
Ma compréhension est qu'il a quelque chose à voir avec le fait de faire il possible de remplacer les modèles.
Je regardais:
$theme_hooks = array(
'poll_vote' => array(
'template' => 'poll-vote',
'render element' => 'form',
),
'poll_choices' => array(
'render element' => 'form',
),
'poll_results' => array(
'template' => 'poll-results',
'variables' => array('raw_title' => NULL, 'results' => NULL, 'votes' => NULL, 'raw_links' => NULL, 'block' => NULL, 'nid' => NULL, 'vote' => NULL),
),
'poll_bar' => array(
'template' => 'poll-bar',
'variables' => array('title' => NULL, 'votes' => NULL, 'total_votes' => NULL, 'vote' => NULL, 'block' => NULL),
),
);
Pourriez-vous fournir un exemple de comment cela fonctionne?
OriginalL'auteur Chris Muench | 2011-10-12
Vous devez vous connecter pour publier un commentaire.
Il offre une place pour un module pour définir son thèmes, qui peuvent alors être remplacés par tout autre module ou d'un thème. Il sera aussi l'occasion pour n'importe quel module utiliser un crochet comme
mymodule_preprocess_theme_name
à changer les variables passées à l'éventuel thème de fonction ou de fichier de modèle.Il y a essentiellement deux façons d'initialiser un thème de fonction:
et
Veuillez garder à l'esprit, vous devriez éviter d'appeler thème() directement (par la documentation dans le thème.inc) depuis:
Dans Drupal 8, thème de la() est une fonction privée, _theme(). Pour plus de détails, veuillez voir http://www.drupal.org/node/2173655.
Lorsque vous comparez les deux de ces le
poll_results
élément dans l'exemple que vous donnez ci-dessus, vous pouvez probablement ce qui se passe...depuis PHP n'est pas un langage fortement typé de Drupal est de fournir des "arguments nommés' par le biais d'un tableau à clé transmise à latheme
fonction, ou haché clés dans le rendu d'une matrice."Rendu d'élément", raconte essentiellement le système de thème que ce thème de la fonction sera appelée à l'aide d'un rendu de tableau, avec un argument nommé (dans ce cas
form
). Le code devrait ressembler à quelque chose comme ceci:Cela va passer quoi que dans le
$form
variable pour le thème de fonctionner comme il le seul argument.Concernant la
template
clés:définit un thème appelé
poll_vote
qui utilise un fichier de modèle (d'où letemplate
clé) avec un nom de "poll-vote.tpl.php" (c'est, par convention). Le chemin d'accès à ce fichier de modèle va être trouvés en utilisant le chemin d'accès du module qui la met en œuvre (p. ex. modules/poll/poll-vote.tpl.php), donc c'est bien de mettre les fichiers de modèle dans les sous-dossiers du module principal dossier.Il y a deux façons de le renvoyer en fait la sortie pour un thème de fonction, par la mise en œuvre de la fonction physique nom (dans ce cas, il serait
theme_poll_vote
) ou à l'aide d'un fichier de modèle. Si letemplate
clé est vide Drupal suppose que vous avez mis en œuvre une fonction physique et va essayer de l'appeler.Fichiers de modèle sont préférables si vous avez juste un peu de code HTML à la sortie d'un thème, ou tout simplement vous n'aimez pas l'écriture de code HTML dans les chaînes de caractères à l'intérieur de PHP (personnellement je n'en ai pas). Mais dans les deux cas, les variables passées lorsque vous appelez le thème (que ce soit à l'aide de
theme()
ou un rendu de tableau comme décrit ci-dessus) sont eux-mêmes passés par le fichier de modèle ou un thème en fonction. Donc:Si vous utilisez un fichier de modèle au lieu de la même méthode, les variables seraient disponibles comme
$raw_title
,$results
, etc, que Drupal fonctionneextract
sur le$vars
avant l'analyse, le fichier de modèle.Je suis sûr qu'il y a beaucoup de choses que j'ai manqué ici, mais si vous avez des questions plus spécifiques posez-vous la question et je vais essayer de les aider.
c'est le choix d'render() au lieu de thème() d'empêcher la mise en cache et javascript problèmes potentiels u ont mentionné?
OriginalL'auteur Clive
Drupal 6
J'ai été bloqué toute la journée avec cela et maintenant mis en œuvre avec succès, de sorte que le partage de mon trouver ici, peut-il aider à comprendre
hook_theme
.Il y a 3 étapes:
hook_theme
echo
/return
le thème de votre.tpl
ou tout.module
Maintenant variable sont disponibles comme par magie en vous
xxx-xxx.tpl.php
.Remarque: vous pouvez passer xxx $sous forme de tableau,objet ou quoi que ce soit 🙂
je ne pense pas que le crochet thème est bien défini: stackoverflow.com/a/12987731/1384237
OriginalL'auteur Serjas
Il y a encore une autre façon: (peut être trouvé dans le thème Bartik)
Le scénario est ici que nous avons créé notre propre module et souhaitez remplacer la sortie par défaut pour disons un nœud avec le titre 'zzz'.
Nous ne savons pas et ne prête pas vraiment attention à la manière de la sortie par défaut est généré. Tous nous avons besoin est d'indiquer à Drupal d'utiliser notre propre modèle personnalisé (fichier node--custom--name.tpl.php pour rendre cette nœud spécifique.
Voici les étapes:
Dire Drupal où notre fichier de modèle de vie. (Gardez à l'esprit que cette fonction ne pourra prendre effet qu'une fois et après compensation de Drupal cache):
Dire Drupal où et quand l'utiliser
Maintenant Drupal va utiliser notre modèle de fichier pour ce cas précis uniquement, à condition que 'node--custom--name.tpl.php' le fichier est dans la déclaration de chemin, sinon il va continuer à chercher, selon les suggestions des conventions de nommage pour un secours modèle.
OriginalL'auteur Grigoreas P.