2012-01-02 125 views
0

我想開發一個模塊,其輸出是可視化的方式非常類似於視圖模塊,但我似乎無法得到它的工作。我跟着使用主題層(http://drupal.org/node/933976)並搜索了drupal論壇無濟於事。Drupal 7動態主題

主題鉤在hook_theme定義爲

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

我援引node--beer.tpl.php

print render($element); 

主題鉤(啤酒是內容的類型名稱)其中$element是一個渲染陣列#主題

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

獲取invok ed是beerxml_hop,而不是我所希望的beerxml_hop__simcoebeerxml-hop--simcoe.tpl.phpbeerxml-unknown.tpl.phpbeerxml-hop.tpl.php存在於相同的目錄中,並且beerxml-unknown.tpl.php在輸出中的其他位置使用。

我錯過了什麼? :)

回答

0

你的模式必須匹配您的第一選擇$element['#theme']

您可以嘗試

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

是的,我也認爲有一些關於模式中的正則表達式。這是正常的PHP正則表達式語法嗎? 但是,我無法得到上面的例子工作。查看Views模塊的源代碼,在主題鉤子中沒有正則表達式的標誌。這是Views模塊的鉤子的一個例子: '$ hooks ['views_exposed_form'] = $ base + array( 'template'=>'views-exposed-form', 'pattern'=>'views_exposed_form__', 'render element'=>'form', );' – Thinner 2012-01-05 19:09:28

3

Drupal是不搜索與模塊文件夾內有活力的部分模板。你必須用幾行代碼手動做到這一點:

/** 
* 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); 
} 

然而,這一招有一定的侷限性:

  • 不能使用單獨預處理的模板,只有基預處理會推出。
  • 擴展模板文件是硬編碼的。
+0

你說得對。謝謝! – Capy 2014-05-07 00:42:02

0

執行hook_theme_registry_alter是解決問題的關鍵。

另一件非常重要的事情是避免在模板名稱中使用' - '!

舉例來說,這是不行的:

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

這是關鍵(因爲是在這個問題雖然)到:

  • 使用 '_' 的主題掛鉤名(」 beerxml_hop ')和模式(' beerxml_hop__ ')
  • 但 ' - ' 中的 '模板' 的說法(' beerxml跳 ')和模板文件名(' beerxml跳 - something.tpl.php')

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

呈現beerxml-hop - something.tpl。php文件,然後應該做:

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