テーマを作成し、テンプレートファイルをこの構造にしています
カスタムページテンプレートを作成しましたが、なんらかの理由でDrupalで取得されません。キャッシュをクリアし、テーマのtemplate.phpファイルにこのプリプロセッサ関数を追加しようとしましたが、まだ機能しません。
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);
}
任意の助けいただければ幸いです。
Drupal 7テンプレート提案 で報告されているように、デフォルトでDrupalページから7が使用されるテンプレート提案はpage-[front | internal/path] .tpl.php 。
http://www.example.com/node/1/edit に表示されるページの場合、Drupalは次のテンプレートファイルを探します。
追加の提案を追加するには、テーマに template_preprocess_page() を実装し、$variables['theme_hook_suggestions']
に新しい提案を追加する必要があります($variables
は、関数への参照によって渡される変数です)。
これを行った場合、提案されたテンプレートファイルが使用されていない唯一の理由は、ファイルの名前が正しくないためです。たとえば、ページにブックページが表示されている場合、テンプレートファイルはpage--book.tplである必要があります。 .php。テーマのコードを変更して、page--book.tpl.phpのようなテンプレートが見つからない場合は、page--node-type.tpl.phpテンプレートを使用することができます。
また、 theme_get_suggestions() (これは template_preprocess_page() によって呼び出される関数です)では、ハイフンは_
に置き換えられ、その逆は行われません。行われる理由は、機能コードで報告されるコメントで説明されます。
// When we discover templates in drupal_find_theme_templates(),
// hyphens (-) are converted to underscores (_) before the theme hook
// is registered. We do this because the hyphens used for delimiters
// in hook suggestions cannot be used in the function names of the
// associated preprocess functions. Any page templates designed to be used
// on paths that contain a hyphen are also registered with these hyphens
// converted to underscores so here we must convert any hyphens in path
// arguments to underscores here before fetching theme hook suggestions
// to ensure the templates are appropriately recognized.
$arg = str_replace(array("/", "\\", "\0", '-'), array('', '', '', '_'), $arg);
私はDrupal 7.4を使用しています。同じ問題があり、助けとなったのはこの投稿のみでした: コンテンツタイプに基づいてカスタムpage.tplを追加する方法 =
投稿から:
<?php
/**
* Variables preprocess function for the "page" theming hook.
*/
function THEME_NAME_preprocess_page(&$vars) {
// Do we have a node?
if (isset($vars['node'])) {
// Ref suggestions cuz it's stupid long.
$suggests = &$vars['theme_hook_suggestions'];
// Get path arguments.
$args = arg();
// Remove first argument of "node".
unset($args[0]);
// Set type.
$type = "page__type_{$vars['node']->type}";
// Bring it all together.
$suggests = array_merge(
$suggests,
array($type),
theme_get_suggestions($args, $type)
);
// if the url is: 'http://domain.com/node/123/edit'
// and node type is 'blog'..
//
// This will be the suggestions:
//
// - page__node
// - page__node__%
// - page__node__123
// - page__node__edit
// - page__type_blog
// - page__type_blog__%
// - page__type_blog__123
// - page__type_blog__edit
//
// Which connects to these templates:
//
// - page--node.tpl.php
// - page--node--%.tpl.php
// - page--node--123.tpl.php
// - page--node--edit.tpl.php
// - page--type-blog.tpl.php << this is what you want.
// - page--type-blog--%.tpl.php
// - page--type-blog--123.tpl.php
// - page--type-blog--edit.tpl.php
//
// Latter items take precedence.
}
}
?>
Drupal 7.22。 。これは最終的に私のために働いたコードです。
if (isset($variables['node'])) {
// $variables['theme_hook_suggestions'][] = 'page__'. str_replace('_', '--', $variables['node']->type);
//cannot get above working for some reason?
$variables['theme_hook_suggestions'][] = 'page__' . $variables['node']->type;
}
したがって、front_pageコンテンツタイプのテンプレートの提案は次のようになります。
ページ--front_cover.tpl.php
興味深いことに、「issue」コンテンツタイプのコードテンプレートの提案は、プリプロセッサスクリプトを必要とせずに、page-issue.tpl.phpとして実行されます!?私の目的では、これは同様のパスを使用するビューテンプレートをオーバーライドするようです。
つまり.
パスを表示=コンテンツタイプに基づく/ issue /#テンプレートの提案、つまり/ issue /#/ front_cover