0

[Drupal6の場合]「my_content_type」というコンテンツタイプを作成したとしましょう。「page-node-my_content_type.tpl.php」を作成することで、そのコンテンツタイプ全体のデフォルトテンプレートを上書きできます。しかし、そのコンテンツタイプの単一ノード(ノード5555など)をさらにカスタマイズするための最良の方法は何でしょうか?

次のことを試しましたが、うまくいきませんでした。

  • page-node-5555.tpl.php
  • page-node-my_content_theme-5555.tpl.php
  • node-5555.tpl.php

これらはどれも機能しません。それらはすべて、私の元のコンテンツタイプのテンプレートを引き続き使用します。

4

3 に答える 3

3

Drupalのページテンプレートは提案システムで機能します。現在のURLに基​​づいて、可能なテンプレートファイルの配列が作成されます。配列を(逆の順序で)ループして、存在するテンプレートファイルを探します。最初に見つけたものを使用します。

drupalのテーマシステムは、テンプレートの提案を変更するためのフックを提供します。template.phpを開いて検索します。

function phptemplate_preprocess_page(&$vars) {

$ vars変数は、提案、具体的には$vars['template_files']を含むものです。

デフォルトでは、利用可能なページ候補は次のとおりです。

  • page.tpl.php
  • page-node.tpl.php
  • page-node- [node_id] .tpl.php

私が知る限り、page-node- [node_type] .tpl.phpはデフォルトでは機能しないため、この機能に追加するようにpreprocess_pageテンプレートをすでに変更している可能性があります。

ただし、より具体的なテンプレートを追加したい場合は、次のようにすることができます...

function phptemplate_preprocess_page(&$variables) {
  if ($variables['node']->type != "") {
    $variables['template_files'][] = "page-node-" . $variables['node']->type;
    $variables['template_files'][] = "page-node-" . $variables['node']->type . "-" . $variables['node']->nid;
  }
}

これにより、次のテンプレート提案の階層が可能になります

  • page.tpl.php
  • page-node.tpl.php
  • page-node- [node_id] .tpl.php
  • page-node- [node_type] .tpl.php
  • ページ-ノード-[node_type]-[node_id].tpl.php
于 2012-01-21T21:39:28.917 に答える
0

Drupal 7では、をコピーしpage.tpl.php templateて名前を変更します

ページ--ノード-[ノード:id] .tpl.php

キャッシュをクリアして微調整を開始します。

于 2012-05-03T14:08:32.263 に答える
0
    関数phptemplate_preprocess_page(&$ variables){
      if($ variables ['node']-> type!= ""){
        $ variables ['template_files'] []="page-node-"。$ variables ['node']-> type;
        $ variables ['template_files'] []="page-node-"。$ variables['node']->type。"-"。$ variables ['node']-> nid;
      }
    }

hook_preprocess_page()にはノード情報が渡されないため、このコードは機能しないはずです。hook_preprocess_node()は行います。したがって、カスタムnode.tplを簡単に作成できますが、特定のノードのカスタムpage.tplを簡単に作成することはできません。とにかく理解できたわけではありません:)

後で...

デフォルトのDrupalでは、page-node-NID.tpl.phpは特別なコーディングなしで機能します。しかし、私のサイトでは機能していませんでした。次のコードを使用して機能させました。

/**
 * Implementation of hook_preprocess_page().
 */
function MYMODULE_preprocess_page(&$variables) {
  // Allow per-node theming of page.tpl
  if (arg(0) == 'node' && is_numeric(arg(1))) {
    $variables['template_files'][] = "page-node-" . arg(1);
  }
}
于 2012-06-14T15:54:05.467 に答える