Использование front.tpl в Drupal 7 для другой страницы - PullRequest
2 голосов
/ 25 ноября 2011

Довольно простой вопрос:

У меня есть страницы шаблонов page - front.tpl и page.tpl, используемые на сайте drupal 7. Однако я хотел бы использовать page-front.tpl на одной другой странице. Это возможно, или мне нужно создать другую страницу .tpl, чтобы сделать это.

Сайт, над которым я работаю, разделен на два раздела, по сути, это два отдельных сайта, между которыми вы можете переключаться, будь то потребитель или владелец бизнеса. Поэтому я хочу использовать шаблон front.tpl для домашней страницы каждого сайта.

Приветствие.

1 Ответ

6 голосов
/ 25 ноября 2011

Вы можете добавить функцию theme_preprocess_page в файл template.php вашей темы, а затем добавить имя шаблона в список предложений шаблонов.

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 path и page/about alias:

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
)

Самый высокий индекс - самый высокийПриоритет шаблона.

...