2009-11-26 6 views
2

J'ai créé une vue (appelons-la my_view).Récupération des noms de crochets de thèmes surchargés dans les vues 2 (Drupal 6)

Dans la section thème: information si j'ai vu l'un des noms de modèles suggérés (views-view--my-view--default.tpl.php (ou proche)), et créé mon propre fichier modèle avec ce nom.

Tout cela fonctionne très bien et quand je visite le registre de thème, je peux voir qu'il y a un crochet là-bas avec le nom du modèle (views-view--my-view--default). Cependant ce crochet a un champ type de 'moteur' plutôt que 'module'. Je suppose que c'est pour voir la façon dont les vues élaborent leurs propres thèmes?

Je veux mettre en œuvre hook_registry_alter pour modifier ce crochet de thème (et d'autres créés de la même manière), mais je ne peux pas savoir comment récupérer une liste de ces crochets.

J'ai essayé d'utiliser array_keys (views_theme()) pour récupérer toutes les vues, mais cette liste ne contient pas de crochets créés en dépassant les fichiers modèles. Il contient uniquement les hooks par défaut comme views_views_field etc

Existe-t-il un moyen de ramener une liste de crochets de thèmes de vues écrasés de cette façon?

+1

Quel est votre objectif final? Je ne suis pas sûr que vous y parveniez de la bonne façon. – googletorp

+0

L'objectif final était de pouvoir indiquer au système de thèmes de rechercher d'abord des modèles de vues dans le thème par défaut des sites, suivi du thème d'administration. J'accomplirais ceci en modifiant l'attribut «chemins de thème» du crochet de thème. Cela revenait à remplacer le comportement par défaut consistant à rechercher uniquement les modèles dans le thème dans lequel la vue était affichée. Cependant, après avoir passé un peu de temps sur cela, j'ai réalisé que l'approche était erronée car les accroches du thème des vues ne sont pas utilisées de l'approche de suggestions de modèle normal. – grahamu

Répondre

1

Je réponds ici car votre dernier commentaire semble indiquer que vous n'êtes plus intéressé à poursuivre votre approche initiale, et 600 caractères ne suffiraient pas, de toute façon.

Une approche alternative pour réaliser ce que vous voulez pourrait être d'utiliser «l'héritage» des sous-thèmes de leur thème parent. Vous pouvez en d'autres termes définir votre thème utilisateur en tant que sous-thème du thème d'administration . De cette façon, le moteur de recherche recherchera des modèles - dans le cas d'un utilisateur consultant le site via le thème utilisateur - d'abord dans le dossier du thème utilisateur, puis dans le dossier du thème admin, puis dans le module annuaire.

Ceci est par exemple le même mécanisme utilisé par zen pour vous permettre de créer vos thèmes avec le kit de démarrage.

Espérons que cela aide!

+0

Merci pour cette suggestion. Malheureusement, mon cas d'utilisation est un peu inhabituel car la vue est affichée dans le thème d'administration, mais je veux quand même que le système de thèmes regarde d'abord les modèles de vue dans le thème par défaut, puis le thème admin. – grahamu

+0

@granhamu - Quelle est la différence entre les deux thèmes? Est-ce que les fusionner en un seul et insérer une logique basée sur les rôles dans la fonction thème est une option? Même si je suis sûr qu'il existe des moyens de réaliser ce que vous voulez (si ce n'est avec Drupal au moins en utilisant directement PHP), drupal est conçu pour garder les thèmes séparés et ce que vous voulez/devez faire semble aller dans la direction opposée tu as raison: tu veux forcer un thème à utiliser des morceaux d'un autre, sans rapport avec un autre). – mac

+0

@granhamu - Dans le commentaire ci-dessus, j'ai supposé que vous ** ** avez toujours un "modèle de sauvegarde" dans le thème d'administration, mais vous ne voulez l'utiliser que si le thème utilisateur n'en a pas d'autre. Si ce n'est pas le cas (ie: le thème admin n'a de templates que lorsque le thème utilisateur ne le fait pas) alors la solution est évidente: ** il suffit de prendre ma réponse originale et d'inverser la logique hiérarchique: faire du thème admin un sous-thème de l'utilisateur un **. – mac

Questions connexes