2010-11-10 7 views
2

J'ai quelques non-nœud données dans un module personnalisé de mon et je voudrais invoquer un modèle pour afficher les données. Ce modèle peut être réutilisé pour la sortie de courrier électronique, et je voudrais essentiellement simplement amorcer Drupal et utiliser le modèle si nécessaire.Drupal: Comment appeler un modèle dans un module?

Je pensais que je pouvais faire quelque chose comme:

$html = theme('verysmallsnippet', $my_fancy_data_structure); 

... puis créez un fichier verysmallsnippet.tpl.php dans le dossier thème actif et attendent ensuite Drupal pour trouver le fichier de modèle et d'évaluer le modèle avec les arguments passés à la fonction de thème. Est-ce une vaste interprétation trop simpliste du fonctionnement du moteur de gabarit - ou dois-je d'abord configurer le registre de thèmes? Ou quoi? J'ai regardé this question, ainsi que la documentation theme, et je suis un peu perdu.

Répondre

3

Eh oui, un peu trop simpliste;)

Pour une meilleure introduction que la doc API vous LIÉ, commencez par le Theming Guide, et pour vos besoins spécifiques, vérifier Using the theme layer (Drupal 6.x).

Pour que votre exemple fonctionne, vous devez dire le registre thématique de votre modèle en mettant en œuvre hook_theme():

function yourModule_theme($existing, $type, $theme, $path) { 
    $items = array(); 
    $items['verysmallsnippet'] = array(
    'arguments' => array('my_fancy_data_structure' => array()), // Change array() to a fitting default 
    'template' => 'verysmallsnippet', 
); 

    return $items; 
} 

Vous pouvez définir plus de détails dans ce crochet, mais c'est le minimum dont vous avez besoin pour obtenir un fichier modèle utilisé (le moteur ajoutera la partie 'tpl.php' pour votre recherche du fichier).

REMARQUE: Vous devez déclencher une reconstruction du registre de thème chaque fois que vous ajoutez ou modifiez une implémentation hook_theme(), sinon vos modifications ne prendront pas effet.

+0

Oh, en fait cela met beaucoup de choses ensemble dans ma tête, en particulier, comment le fichier template "sait comment nommer les variables" dans le template. Je vais enquêter sur le guide thématique. J'avais vu quelque chose qui était plus clair que les deux choses que j'ai énumérées mais qui était incapable de le retrouver en cherchant. Merci beaucoup! – cgp

+0

Corrigez-moi si je me trompe ici, mais pour "informer le registre des thèmes de ma modification de l'implémentation de hook_theme", je devrais vider le cache soit par le menu admin, soit en utilisant l'appel drupal_rebuild_theme_registry(). – cgp

+0

@altCognito: Heureux d'avoir aidé. En ce qui concerne le "savoir comment nommer les variables" dans la partie template, vous pouvez jeter un oeil particulier au concept des fonctions 'template_preprocess()' dans les docs - l'idée de base est que vous passez un minimum de les données nécessaires à votre appel initial de theme(), et la fonction preprocess prend soin de 'expand' dans toutes les différentes variables nécessaires dans le template (en d'autres termes, garder la logique de codage hors du template et la mettre dans la fonction preprocess , comme par exemple créer des liens appropriés à partir de chemins, calculer des informations de pager, etc.) –

Questions connexes