Drupal 7 - Какая переменная в template.php определяет, какой шаблон страницы используется? - PullRequest
2 голосов
/ 12 апреля 2011

Хорошо, вот в чем дело: я создаю сайт Drupal, который имеет несколько различных разделов. Каждый раздел представляет собой представление, отображающее тип содержимого. (Каждый раздел имеет свой собственный тип контента) Например, у меня есть представление, которое указывает на ?q=blog, который отображает тип контента blog.

Все разделы выглядят немного по-другому. Не так, как «сайт внутри веб-сайта», отличающийся, но достаточно разный, чтобы все они не могли использовать один и тот же файл шаблона и каждый из них был изменен с помощью CSS. Каждый раздел нуждается в своем собственном page.tpl.php.

К сожалению, .info-файлы темы AFAIK Drupal могут либо назначить только одну page.tpl.php для всей темы, либо назначить page-node-####.tpl.php для каждого узла. На этом веб-сайте будет много контента, поэтому настройка Drupal на создание нового идентичного page-node-####.tpl.php для каждого созданного узла очень быстро станет неуправляемой.

Чтобы решить эту проблему, я собираюсь использовать pathauto для создания псевдонима для каждого типа контента. Например, все узлы типа контента blog имеют псевдоним ?q=blog/[post title]. Измените template.php, чтобы использовать page-blog.tpl.php для любой страницы, псевдоним которой начинается со слова «блог».

Другие люди пытались делать подобные вещи и создавали функции, подобные описанной. К сожалению, все, что я видел, предназначены для Drupal 6 или ниже. Я попытался изменить существующие безуспешно. Пока, однако, я думаю, что это на правильном пути:

function basic_preprocess_page(&$vars, $hook) {
    ...

    if( module_exists('path') ) {
        $alias = drupal_get_path_alias( $_GET['q'] );
        $site_section = "blog";
        if( strpos( $alias, $site_section ) === 0 ) {
            $VARIABLE_THAT_TELLS_THE_PAGE_WHAT_TEMPLATE_TO_USE = "/path/to/page-blog.php";
        }
    }
}

Я не могу найти $VARIABLE_THAT_TELLS_THE_PAGE_WHAT_TEMPLATE_TO_USE Кто-нибудь знает, что это такое?

Возможно, мой сайт плохо структурирован. Если кто-то знает, как реструктурировать мой сайт, чтобы мне было легче создать тему с отдельными разделами, поделитесь, пожалуйста, как!

Спасибо миллион! (c:

РЕДАКТИРОВАТЬ: Возможно, мне нужно вместо этого использовать предложения шаблона. Кто-нибудь знает функцию или переменную, чтобы использовать для установки этого?

Ответы [ 2 ]

3 голосов
/ 13 апреля 2011

Они изменили имя этого ключа массива в D7, и я нигде не видел его документированного.Я наконец понял это после хорошей отладки.Вы можете переопределить шаблон темы в template.php с помощью hook_preprocess_page () следующим образом:

function myTheme_preprocess_page(&$vars) {
global $node;

if ($node->type == 'blog') {
     $vars['theme_hook_suggestions'] = array('my__blog_template'); // use my--blog-template.tpl.php, note '-' = '_'
}
elseif ($node->type == 'articles') {
    $vars['theme_hook_suggestions'] = array('article__node_template'); // use article--node-template.tpl.php
}
}

Да, и не забудьте очистить кеш Drupal после внесения изменений в ваш template.php.

0 голосов
/ 13 апреля 2011

Хорошо, я нашел это: http://drupal.org/node/223440#comment-991840

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

Кредит на эту функцию переходит к пользователю mfb.

У меня было много проблем с этим, поэтому я объясню это здесь на случай, если кто-то посчитает это полезным.

Эта функция входит в ваш template.php. Он должен быть частью функции <theme name>_preprocess_page. Что он делает, так это берет псевдоним и затем разбивает его на кучу разных компонентов. Например, если вы находитесь на странице с псевдонимом ?q=blog/blog-post-title, она будет разбита на blog и blog-post-title. Затем он превращает каждый компонент в имя для шаблона предложения . Он помещает каждое предложение шаблона в массив template_files[] (внутри массива $variables[]), так что на странице теперь есть два новых предложения шаблона:

page-blog и page-blog-blog-post-title

Предложения шаблонов являются альтернативными файлами шаблонов. В этом случае они для страниц, но они не обязательно должны быть. У вас могут быть шаблоны предложений для всего, что вы можете придумать, включая блоки, узлы и тому подобное. Не позволяйте названию «шаблонное предложение» обмануть вас. Предложения шаблонов будут использоваться над шаблонами по умолчанию, пока они существуют. Я не знаю, почему это так назвали. Я думаю, что это должно быть переименовано.

Итак, теперь, когда вы настроили Drupal для поиска предложения шаблона, указывающего на ваш псевдоним, создайте новый файл шаблона, в котором все остальные находятся в вашей теме. В этом случае, скажем, я хочу создать тему для всего моего раздела блога. В папке с шаблонами я должен создать файл с именем page--blog.tpl.php (обратите внимание на --double дефис--) с нужным мне макетом.

Drupal будет использовать самый конкретный шаблон, который он может найти, поэтому, если вы хотите, вы можете сделать один пост в блоге совершенно отличным от остального сайта, если вы создадите для него шаблон с именем page--blog--blog-post-title и поместите его в каталог шаблонов вашей темы. (еще раз обратите внимание на двойные дефисы.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...