3

サイトの特定のページにテーマを設定するために、node--2.tpl.php というファイルを作成しました。私が読んだ他のいくつかのチュートリアルに従って、これを私のtemplate.phpファイルに追加しました:

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

このページでは、schools_landing という領域をレンダリングしたいと考えました。そのため、node--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).

さらに、node--2.tpl.php ファイルにテキストを書き込むことができ、(デフォルトのページ コンテンツではなく) 正常に表示されますが、領域内でレンダリングするブロックをまったく取得できません。school_landing ブロックにブロックを割り当てると、ページには何も表示されません。

  1. これは、特定のページでカスタム コンテンツを定義する正しいプロセスですか?
  2. スカラー値を配列エラー メッセージとして表示するエラーを修正するにはどうすればよいですか?
  3. リージョンでブロックのレンダリングを開始するにはどうすればよいですか?
4

1 に答える 1

2

ノード テンプレートでは、$pageは配列ではなくブール値です。それが、そのエラーが発生する理由です。
template_preprocess_node()は、次のコードで設定します。

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

それはあなたが期待している値hook_preprocess_page()で変数を取得することです。template_preprocess_page()には、次のコードが含まれています。$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']: 2 番目のサイドバーの項目。
  • $page['header']: ヘッダー領域のアイテム。
  • $page['footer']: フッター領域のアイテム。

追加の領域は、テーマから実装できます。

補足として、template_preprocess_node()既に次のテンプレート名を提案しています。

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

テーマやカスタム モジュールでそれらを提案する必要はありません。

于 2012-12-10T18:12:03.150 に答える