2013-10-08 36 views
0

我將模塊從Drupal 6移植到Drupal 7,並試圖將自定義模塊中的變量傳遞給模板。我有這樣的事情:Drupal 7 - 將自定義模塊中的變量傳遞給模板的致命錯誤

function my_callback_function(){ 

    ... //some unrelated code 

    $page_params = array(); 
    $page_params['items_per_page'] = 25; 
    $page_params['page'] = $_GET['page'] ? $_GET['page'] : 0; 
    $page_params['total_items'] = $data_provider->getNumItems(); 
    $page_params['total_pages'] = $data_provider->getNumPages($page_params['items_per_page']); 

    return theme('my_theme', $page_params); 
} 


function my_module_theme($existing, $type, $theme, $path) { 
    return array(
    'my_theme' => array(
     'variables' => array('page_params' => NULL), 
     'template' => 'theme/my_template_file', 
    ), 
); 
} 

而* my_template_file.tpl.php內*我嘗試使用$ page_params:

<?php print $page_params['total_items']; ?> 

所有這一切使我的網站拋出了以下錯誤:

Fatal error: Unsupported operand types in C:...\includes\theme.inc on line 1075

其與代碼在這些行theme.inc對應:

// Merge in argument defaults. 
    if (!empty($info['variables'])) { 
    $variables += $info['variables']; // THIS IS THE VERY EXACT LINE 
    } 
    elseif (!empty($info['render element'])) { 
    $variables += array($info['render element'] => array()); 
    } 

如果我離開主題()調用,因爲它是在Drupal 6,錯誤不再出現,但隨後我的模板不承認我的$ page_params變量:

return theme('my_theme', array('page_params' => $page_params)); 

我有閱讀API的一半試圖找出我做錯了什麼,但據我所知,這似乎是將自定義模塊中的變量傳遞給模板的正確方法。因此,任何形式的幫助都會比歡迎。

在此先感謝。

回答

1

最後,我想出了我做錯了什麼。事實上,他們是一對夫婦的事情:

我的主題()調用是確定的:

return theme('my_theme', $page_params); 

但我hook_theme實現不是。如果$ page_params是我的變量數組,我不能使用整個數組作爲變量,我必須明確指定哪些是我的變量在數組內。事情是這樣的:

function my_module_theme($existing, $type, $theme, $path) { 
    return array(
    'my_theme' => array(
      'variables' => array(
      'items_per_page' => NULL, 
      'page' => NULL, 
      'total_items' => NULL, 
      'total_pages' => NULL, 
     ), 
    'template' => 'theme/my_template_file', 
); 
} 

最後,內部my_template_file.tpl.php我將不得不直接轉而使用它們作爲$ page_params組件的變量名:

<?php print $total_items; ?> 

它可能看起來對於有經驗的用戶來說顯而易見,但是我花了一段時間才發現這一點我希望它對像我這樣的其他初學者有用。

0

您可以使用drupal variable_set()和variable_get()將數據存儲在drupal會話中並從會話中獲取數據。

謝謝

+0

感謝您的回答,可悲的是,我從來沒有嘗試過,因爲最終我的代碼工作。但無論如何,我想知道一種方法是否比另一種更好,或者如果不選擇你選擇的方式。 – Clickhere

+2

這不是推薦的方法。不要使用variable_set作爲臨時值或會話值。 – anoopjohn

相關問題