8
votes

Comment remplacer la fonction thématique dans Drupal?

J'ai cherché cela mais n'a que des résultats trouvés uniquement liés à .tpl Files.I Vous souhaitez remplacer une fonction de thème (par exemple theme_user_list) de mon module.Comment puis-je faire cela?


0 commentaires

4 Réponses :


2
votes

Selon la documentation sur http://api.drupal.org/api/drupal/modules--System--Theme.api.php/group/themeable/7 :

Thèmes utilisant un moteur aura leurs fonctions de thème bien nommées automatiquement enregistré pour eux. Bien que cela puisse varier en fonction de la Moteur à thème, le standard défini par phptemplate est que ce thème fonctionne devrait être nommé themename_hook. Pour Exemple, pour le thème par défaut de Drupal (Bartik) pour mettre en œuvre la "table" crochet, la phptemplaire.Engine serait Trouver Bartik_table ().

Donc, dans votre cas, vous pouvez remplacer par la création de mythemename_user_list fonction.


1 commentaires

Merci, mais je veux faire cela dans des modules pas des thèmes.



10
votes

Vous devrez modifier le registre à l'aide de Hook_theme_registry_alter () et de remplacer la fonction utilisée. Une fois que vous remplacez l'index fonction pour la fonction en question et de manière importante, effacez votre cache, la fonction de remplacement de votre module - myModule_foo () - devrait prendre effet.

voir http: //api.drupal. Org / API / Drupal / Modules - Système - System.PI.php / Fonction / Hook_theme_registry_alter / 7 Pour plus d'informations.


3 commentaires

Merci. THEME_USER_LIST est utilisé par de nombreux modules. Certains moyens de modifier le thème d'un contexte spécifique? Par exemple, juste pour le bloc en ligne de qui est le nouveau bloc


Non que je puisse dire - mais votre implémentation peut vérifier certaines variables, puis rediriger l'exécution sur thème_user_list () si aucune de vos personnalisations n'est nécessaire.


Je vous recommanderais d'utiliser Hook_theme_registry_alter () uniquement lorsque vous êtes en particulier sur la modification de la sortie de votre fichier de module. Ne créez jamais de module juste pour cela. Une meilleure façon de le faire serait d'ajouter une fonction '(mon nom de thème ici) _func_i_am_overridding ()' à votre thème> Faites les modifications> Effacer le cache de registre thématique.



0
votes

Vous pouvez remplacer la fonction de thème pour une sortie individuelle en utilisant des suggestions. Faites cela, lorsque vous appelez la fonction thème, appendez deux traitements de soulignement et un nom, puis copiez la fonction de thème d'origine dans votre fichier .Module et renommez mythème_original_fonction_name__aname, par exemple xxx après que les caches ont été caches Effacé, vous devriez être capable de voir que dans le registre thématique, vous pouvez alors vous utilisez theme_registry_alter pour le remplacer à l'aide de votre nom de module au lieu de nom de thème.


0 commentaires

0
votes

user491844 Réponse est correct, bien qu'il soit plus simple: Modifiez votre template thème.php.

Copiez simplement la fonction de thème originale entier dans template.php le remplacer "Theme" par votre nom de thème dans la déclaration de fonction. Donc, par exemple, ceci: xxx

devient ceci: xxx

puis vide Theme Theme S'inscrire (ou rincer tous les caches). < / p>

Le seul inconvénient est que toutes vos personnalisations s'accumuleront dans un seul fichier (template.php) le rendant non si bien rangé sur de grands projets.


0 commentaires