it-swarm-ja.com

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

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

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

何が欠けていますか?

enter image description here

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

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

詳細は this thread を参照してください。

12
mingos

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-442679 を参照してください。

2
Mołot

ノード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;
  }
}
1
rcastera

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;
      }
    }
  }
_

テーマフォルダーの_template.php_のphptemplate_preprocess_page(&$vars)関数に挿入します。

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

0
Gokul N K