特定のカスタムコンテンツタイプエントリの候補ページテンプレートファイル名


11

Drupal 7のWebサイトで作業しています。作品のカスタムコンテンツタイプを作成しました。多くのフィールドがあり、それらのいくつかは、各エントリの特定のページbgのようなページレイアウトに関連しています。そのため、この特定のコンテンツタイプのカスタムpage.tplが必要です。

そこで、テーマ開発者モジュールをアクティブにして開き、ボディ領域をクリックして、この特定のコンテンツタイプのページエントリの候補名を取得しました。下の画面が表示されますが、何の意味もありません:/ノード領域をクリックすると、問題ありません。node--work.tpl.php が表示されますが、ページが必要です。「page--work.tpl.php」を試しましたが、うまくいきませんでした。

私は何が欠けていますか?

ここに画像の説明を入力してください

回答:


12
function mytheme_process_page(&$variables) {
    $variables['theme_hook_suggestions'][] = 'page__'. $variables['node']->type;
}

機械で読み取り可能なコンテンツタイプ名が「work」であるとすると、page--work.tpl.phpが機能します。

詳細については、このスレッドを参照しください。


うわー!それはうまくいきました!今すぐpage--work.tpl.phpにアドレス指定できます:)正常に動作しますが、d.pr / EaMaとしてエラーメッセージが表示され ます。あなたの時間をどうもありがとう!
Drupalの男

ああ、それはテーマ開発者モジュールのせいだと思います。モジュールを無効にしてエラーが発生しました:)どうもありがとうございます!
Drupalの男

2

template.phpに追加:

function themeName_preprocess_page(&$vars) {
  if (isset($vars['node'])) {
    // If the node type is "blog" the template suggestion will be "page--blog.tpl.php".
    $vars['theme_hook_suggestions'][] = 'page__'. str_replace('_', '--',    $vars['node']->type);
  }
}

省略できstr_replace()ます。あなたに最適なバージョンをテストしてください。

次に、ファイル名がpage-[content_type] .tpl.phpのテンプレートファイルを作成します。([content_type]をコンテンツタイプのマシン名に置き換えます。)

http://drupal.org/node/1089656#comment-4426790を参照してください。


1

ノードIDも必要な場合は、これを使用します。

function mytheme_process_page(&$variables) {
  if (isset($variables['node'])) { 
    $variables['theme_hook_suggestions'][] = 'page__type__'. $variables['node']->type;
    $variables['theme_hook_suggestions'][] = 'page__node__' . $variables['node']->nid;
  }
}

0

Drupalの関係者によると、コンテンツタイプごとに異なるテンプレートを使用することはお勧めできません。これが、page--work.tpl.php候補テンプレートファイルリストに見つからない理由です。彼らは、ノードテンプレートファイルのみが異なるはずだと感じています。ただし、ハッキングしたい場合は、先に進んでください。

パスエイリアスを使用して、コンテンツタイプに基づいてパスを設定します。そして、このコードを挿入します

 if (module_exists('path')) {
    $alias = drupal_get_path_alias(str_replace('/edit','',$_GET['q']));
    if ($alias != $_GET['q']) {
      $template_filename = 'page';
      foreach (explode('/', $alias) as $path_part) {
        $template_filename = $template_filename . '-' . $path_part;
        $vars['template_files'][] = $template_filename;
      }
    }
  }

phptemplate_preprocess_page(&$vars)での機能template.phpテーマのフォルダインチ

ただし、コードを少し変更して、より効率的にすることができます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.