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

70
7

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


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


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


Чтобы решить эту проблему, я собираюсь использовать 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:


EDIT: Возможно, мне нужно использовать предложения шаблонов. Кто-нибудь знает, какую функцию или переменную использовать для установки?

спросил(а) 2011-04-12T00:36:00+04:00 9 лет, 5 месяцев назад
1
Решение
81

Они изменили имя этого ключа массива в 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 после внесения изменений в ваш шаблон .php.

ответил(а) 2011-04-13T04:05:00+04:00 9 лет, 5 месяцев назад
41

Хорошо, я нашел это:
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 hyphens--) с макетом, который я хочу.


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

ответил(а) 2011-04-13T01:03:00+04:00 9 лет, 5 месяцев назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема