2012-12-10 49 views
2

爲了在我的站點中爲特定頁面創建主題,我創建了一個名爲node - 2.tpl.php的文件。每其他一些教程我閱讀,我已將此添加到我的template.php文件中:警告:不能將標量值用作包含()的數組

function mtheme_preprocess_node(&$vars) { 
    if (request_path() == 'node/2') { 
    $vars['theme_hook_suggestions'][] = 'node__2'; 
    } 
} 

在這個頁面上,我想叫schools_landing要呈現的區域。因此,節點 - 2.tpl.php看起來是這樣的,沒有別的:

<?php print render($page['schools_landing']); ?> 

這樣做之後,我開始在管理員覆蓋層的頂部看到以下錯誤消息:

Warning: Cannot use a scalar value as an array in include() (line 1 of /home/something/public_html/project/sites/all/themes/mtheme/node--2.tpl.php). 

此外,我可以在節點 - 2.tpl.php文件中寫入文本,並且它顯示正常(而不是默認頁面內容),但我無法在區域內呈現塊進行渲染。如果我爲schools_landing塊分配一個塊,那麼頁面上什麼也看不到。

  1. 這是在特定頁面上定義自定義內容的正確過程嗎?
  2. 我該如何解決導致標量值作爲數組錯誤消息的錯誤?
  3. 如何讓我的區塊開始在區域中渲染?

回答

2

node template,$page是一個布爾值,而不是一個數組。這就是你得到這個錯誤的原因。
template_preprocess_node()使用以下代碼對其進行設置。

$variables['page']  = $variables['view_mode'] == 'full' && node_is_page($node); 

這是hook_preprocess_page()是獲取變量$page與你期望的值。
template_preprocess_page()包含以下代碼。

foreach (system_region_list($GLOBALS['theme']) as $region_key => $region_name) { 
    if (!isset($variables['page'][$region_key])) { 
     $variables['page'][$region_key] = array(); 
    } 
    } 

page.tpl.php描述$page爲:

地區:

  • $page['help']:動態幫助文本,主要用於管理頁面。
  • $page['highlighted']:突出顯示的內容區域的項目。
  • $page['content']:當前頁面的主要內容。
  • $page['sidebar_first']:第一個邊欄的項目。
  • $page['sidebar_second']:第二個邊欄的項目。
  • $page['header']:標題區域的項目。
  • $page['footer']:頁腳區域的項目。

其他區域可以從主題實現。

另外,template_preprocess_node()已經建議以下模板名稱。

$variables['theme_hook_suggestions'][] = 'node__' . $node->type; 
    $variables['theme_hook_suggestions'][] = 'node__' . $node->nid; 

有沒有必要建議他們爲您的主題,或在自定義模塊。

+0

好的,你的側面說明很有意義。我刪除了我的建議,因爲它沒有必要。其餘的,我應該使用頁面模板而不是節點模板嗎?也就是說,如果我想在特定頁面上呈現schools_landing區域,我應該創建一個可以這樣做的頁面模板嗎? – KinsDotNet

相關問題