Drupal 7のfront.tplを別のページに使用する

かなりストレートな質問:

私はpage-front.tplとpage.tplテンプレートページをdrupal 7サイトで使用しています。しかし、もう1つのページでpage-front.tplを使用したいと思います。これは可能ですか、これを行うには別の.tplページを作成する必要がありますか?

私が取り組んでいるサイトは2つのセクションに分かれています。それは本質的に2つの別個のウェブサイトであり、消費者かビジネスオーナーかを問わず、そこで、各サイトのホームページにfront.tplテンプレートを使用したいと思います。

乾杯。

2

1 答え

テーマの template.php ファイルに theme_preprocess_page 関数を追加し、テンプレート候補リストにテンプレート名を追加することができます。

function mytheme_preprocess_page(&$vars) {
   //you can perform different if statements
   //if() {...
        $template = 'page__front';//you should replace dash sign with underscore
        $vars['theme_hook_suggestions'][] = $template;
   //}
}

編集

パス名でテンプレート名を指定する場合は、次のようなコードを書くことができます:

function phptemplate_preprocess_page(&$variables) {
    if (module_exists('path')) {
        $alias = drupal_get_path_alias($_GET['q']);
        if ($alias != $_GET['q']) {
            $template = 'page_';
            foreach (explode('/', $alias) as $part) {
                $template.= "_{$part}";
                $variables['theme_hook_suggestions'][] = $template;
            }
        }
    }
}

この機能がなければ、デフォルトで以下のノードテンプレートの提案があります:

array(
    [0] => page__node
    [1] => page__node__%
    [2] => page__node__1
)

そして、この関数はあなたのノードに以下の新しいテンプレートの提案を適用します。 node/1 パスと page/about エイリアスを持つノードの例:

array(
    [0] => page__node
    [1] => page__node__%
    [2] => page__node__1
    [3] => page__page
    [4] => page__page_about
)

そのあとで、あなたのページに page-page-about.tpl.php を使用することができます。

page - front.tpl.php node/15 に適用したい場合は、この関数でif文を追加できます。

function phptemplate_preprocess_page(&$variables) {
    if (module_exists('path')) {
        $alias = drupal_get_path_alias($_GET['q']);
        if ($alias != $_GET['q']) {
            $template = 'page_';
            foreach (explode('/', $alias) as $part) {
                $template.= "_{$part}";
                $variables['theme_hook_suggestions'][] = $template;
            }
        }
    }

    if ($_GET['q'] == 'node/15') {
        $variables['theme_hook_suggestions'][] = 'page__front';
    }
}

これにより、以下のテンプレートの提案が得られます。

array(
    [0] => page__node
    [1] => page__node__%
    [2] => page__node__1
    [3] => page__page
    [4] => page__page_about
    [5] => page__front
)

最高のインデックス - 最高のテンプレート優先度。

6
追加された
こんにちは、返信ありがとうございます。私はほとんどのことを理解していますが、特定のページに対してこの関数をアクティブにするにはどうすればいいですか? Expampleノード/ 14またはURLエイリアスのpharmacy-homepage。乾杯
追加された 著者 James Billings,
素晴らしい、非常に説明してくれてありがとう。非常に明確になりました。
追加された 著者 James Billings,
アクティブなテーマフォルダにあるテーマの template.php ファイルにこの機能が必要です。詳細については私の編集された答えを見てください。
追加された 著者 Vlad Stratulat,