Question

J'ai plusieurs fichiers .tpl.php pour les noeuds, les champs CCK et des vues thématisation. Ces fichiers modèles ont beaucoup de logique en eux pour faire avancer les choses autour, des liens de bande, créer de nouveaux liens, etc. Je comprends que cela est mauvais développement et non pas « The Way Drupal ».

Si je comprends bien, "The Way Drupal" est d'utiliser les fonctions de préprocesseur dans votre fichier template.php pour manipuler les variables et ajouter de nouvelles variables. Quelques questions à ce sujet:

  • Y at-il une convention de nommage pour la création d'une fonction de pré-processeur pour un thème spécifique? Par exemple, si j'ai un modèle de champ CCK appelé content-field-field_transmission_make_model.tpl, comment pourrais-je nommer la fonction préprocesseur?
  • Puis-je utiliser les fonctions de préprocesseur de modèle pour les modèles de noeuds, les modèles de champ CCK, et les modèles Vues? Est-ce qu'ils ont des méthodes différentes de modifier les variables de modèle ou l'ajout de nouveaux?
Était-ce utile?

La solution

Pour un aperçu général, vous devez lire sur la manipulation des variables dans les fonctions de prétraiter .


En ce qui concerne la convention de nommage, ce qui est normalement assez simple, mais il y a un hic pour votre exemple actuel (voir ci-dessous):

A besoin signature des fonctions de prétraiter être

[yourModuleName|yourThemeName]_preprocess_[themeFunctionName](&$variables)

la mise en œuvre d'un pour le modèle de page dans un fichier template.php thèmes entraînerait

themeName_preprocess_page(&$variables)

La plupart du temps, le nom de la fonction de thème sera le nom du fichier * .tpl.php, sans .tpl.php fin et avec des underscores au lieu des traits d'union. Mais il y a un hic si le fichier modèle se sélectionné sur la base du modèle suggestions , comme la fonction de pré-traitement ne peut être mis en œuvre pour le nom de base, pas pour les autres suggestions! (Les suggestions pour les fichiers de modèles alternatifs sont ajoutés dans les fonctions prétraiter eux-mêmes.)

Votre exemple actuel est l'un de ces cas, comme content-field-field_transmission_make_model.tpl.php est une telle suggestion, avec le nom de base étant content-field.tpl.php, et la fonction de thème correspondant étant content_field. Donc, vous devez mettre en œuvre une fonction prétraiter nommée yourThemeName_preprocess_content_field(&$variables), et dans ce inspectent les entrées disponibles dans le tableau de variables $ pour vérifier si vous êtes effectivement appelé le « field_transmission_make_model », et non pour un champ CCK complètement différent, par exemple:

function yourThemeName_preprocess_content_field(&$variables) {
  // Are we called for the right field?
  if ('field_transmission_make_model' == $variables['field_name']) {
    // Yes, add/manipulate entries within the variables array
    $variables['new_entry'] = 'A useless new variable';
    $variables['label'] = 'A useless change of the existing label variable';
  }
}

(Note: Le code non testé, méfiez-vous des fautes de frappe)

Après cela, il devrait y avoir une nouvelle $new_entry variable étant disponible dans votre fichier modèle et le contenu de la variable $label aurait changé (toutes les entrées de haut niveau dans le tableau de variables $ seront transformées en variables distinctes pour le fichier modèle , du nom de l'index du tableau).


En ce qui concerne votre deuxième question, l'utilisation des fonctions de base de prétraiter est le même pour tous les fichiers de modèle, mais sachez:

  • Fonctions Prétraitez ne sont disponibles que pour les appels à thème qui utilisent les fichiers * .tpl.php, pas pour les fonctions de thème
  • Le contenu du tableau de variables $ varie fortement, en fonction de ce qui devient le thème
  • D'autres modules pourraient mettre en œuvre les fonctions de prétraiter ainsi, et ils seront appelés l'un après l'autre, donc si vous voulez changer quelque chose qui est ajouté par un autre module, vous ne pouvez le faire si votre application est appelée après (qui sera pas un problème dans votre cas, comme les mises en œuvre dans un thème sont appelés après que toutes les mises en œuvre dans les modules - je voulais juste mentionner qu'il peut y avoir de nombreuses implémentations à la fois)

Autres conseils

Afin de comprendre ce que notre fonction de pré-traitement doit être nommé, nous avons besoin de savoir quel fichier ou une fonction modèle de thème une sortie vient, et Une excellente façon de le faire est en utilisant le développeur thème module .

Voici une vidéo qui explique en détail - http://buildamodule.com/video/drupal-theming-essentials-template-files-theme-function-overrides-and-preprocessing-functions- comment-à utiliser-simples prétraitements-fonctions

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top