2012-01-02 5 views
0

Je suis en train d'essayer de développer un module dont la sortie doit être orientable d'une manière très similaire à celle du module Views, mais je n'arrive pas à le faire fonctionner. J'ai suivi en utilisant le Thème couche (http://drupal.org/node/933976) et recherché les forums drupal en vain.Drupal 7 Theming dynamique

Le crochet à thème est défini dans hook_theme comme

'beerxml_hop' => array (
    'template' => 'beerxml-hop', 
    'render element' => 'beerxml', 
    'pattern' => 'beerxml_hop__', 
    'path' => drupal_get_path('module', 'beerxml_formatter') . '/templates', 
) 

Et j'invoque le crochet à thème par

print render($element); 

dans node--beer.tpl.php (la bière est le nom du type de contenu) où $element est un tableau render aveC#theme

array(3) { 
    [0] => string(19) "beerxml_hop__simcoe" 
    [1] => string(11) "beerxml_hop" 
    [2] => string(15) "beerxml_unknown" 
} 

Le modèle qui est invoqué ed est beerxml_hop, et non beerxml_hop__simcoe comme je l'aurais espéré. Les deux beerxml-hop--simcoe.tpl.php et beerxml-unknown.tpl.php existe dans le même répertoire que beerxml-hop.tpl.php et beerxml-unknown.tpl.php est utilisé ailleurs dans la sortie.

Qu'est-ce qui me manque? :)

Répondre

0

Votre modèle doit correspondre à votre première option $element['#theme']

Vous pouvez essayer

'beerxml_hop' => array (
    'template' => 'beerxml-hop', 
    'render element' => 'beerxml', 
    'pattern' => 'beerxml_hop__[a-z]+', 
    'path' => drupal_get_path('module', 'beerxml_formatter') . '/templates', 
) 
+0

Oui, je pensais aussi qu'il y avait quelque chose à propos d'une expression régulière dans le motif. Est-ce une syntaxe d'expression régulière PHP normale? Cependant, je ne peux pas obtenir l'exemple ci-dessus pour fonctionner. Et en regardant le code source du module Views, il n'y a aucun signe d'expressions régulières dans leurs hooks de thème. Voici un exemple des hooks du module Views: '$ hooks ['views_exposed_form'] = $ base + tableau ( 'template' => 'views-exposed-form', 'pattern' => 'views_exposed_form__', 'Render element' => 'form', ); ' – Thinner

3

Drupal ne recherche pas pour les modèles avec une partie dynamique à l'intérieur du dossier du module. Vous devez le faire manuellement avec quelques lignes de code:

/** 
* Implements hook_theme_registry_alter(). 
*/ 
function MY_MODULE_theme_registry_alter(&$registry) { 
    $path = drupal_get_path('module', 'MY_MODULE') . '/subfolder/with/templates'; 
    $registry += drupal_find_theme_templates($registry, '.tpl.php', $path); 
} 

Cependant, cette astuce a quelques limitations:

  • Vous ne pouvez pas utiliser prétraitements séparés pour les modèles, seule la base prétraiter sera lancé.
  • L'extension des fichiers modèles est codée en dur.
+0

Vous aviez raison. Merci! – Capy

0

L'implémentation de hook_theme_registry_alter a été la clé pour résoudre le problème.

Une autre chose très importante est d'éviter d'utiliser '-' dans les noms de modèles!

Par exemple, cela ne fonctionnera pas:

'beerxml-hop' => array (
    'template' => 'beerxml-hop', 
    'render element' => 'beerxml', 
    'pattern' => 'beerxml-hop__', 
    'path' => drupal_get_path('module', 'beerxml_formatter') . '/templates', 
) 

Il est essentiel (comme dans la question que) à:

  • utilisation '_' au nom du crochet à thème (» beerxml_hop ') et le motif (' beerxml_hop__ ')
  • mais '-' dans le 'modèle' argument (' beerxml-hop ') et le nom de fichier modèle (' beerxml-hop - something.tpl.php ')

.

'beerxml_hop' => array (
    'template' => 'beerxml-hop', 
    'render element' => 'beerxml', 
    'pattern' => 'beerxml_hop__', 
    'path' => drupal_get_path('module', 'beerxml_formatter') . '/templates', 
) 

Rendu du fichier beerxml-hop - something.tpl.Le fichier php devrait alors être fait avec:

echo theme('beerxml-hop--something', array('n' => 10));