Изменение шаблонов блоков в зависимости от контекста? перемещение заголовка в поле тела в шаблоне
Можно ли изменить мое предложение по шаблону блока в зависимости от конкретного контекста?
Например, на некоторых родительских целевых страницах (я мог бы установить вручную; потому что есть только 3 условия без определенного шаблона), мне нужно, чтобы заголовок блока входил в содержимое <div>
.
Я мог бы сделать обходной путь и добавить заголовок в поле "Тело". Хотя я не хочу изменять содержимое блока (добавлять заголовок в область/поле тела), потому что они, возможно, использовались на других страницы таксономии; и клиентам будет трудно управлять этим (звонки с вопросом, почему заголовок отображается дважды в управлении блоками).
Было бы или могло бы это быть наилучшим с точки зрения наиболее эффективного решения, достигнутого путем предварительной обработки?
Текущий вывод на страницах (шаблоны drupal по умолчанию в psuedocode):
div.block-block-{delta}
h2.block-title
div.content
Желаемый результат (на заданных родительских целевых страницах)
div.block-block-{delta}
div.content
h2.block-title
Желаемый результат (по всей другой таксономии страницы)
div.block-block-{delta}
h2.block-title
div.content
Обновление:
Эти целевые страницы - это всего лишь три узла, которые нужны клиенту. На самом деле нет рифмы или причины того, что определяет, является ли это целевой страницей. Мне просто нужно установить три идентификатора узла, чтобы вызвать изменение шаблона блока.
2 answers
Вы упоминаете слово "контекст" в первой строке своего вопроса. Взгляните на модуль контекста. Я только что перешел с этой страницы
Http://www.metachunk.com/blog/context-based-template-suggestions-drupal-7
Правка: уточнение.. вот модуль контекста http://drupal.org/project/context Установите его и создайте контекст "mycontext" для ваших 3 страниц.
Исходя из этого контекста, предоставьте предложение по шаблону, как указано в разделе "Создатели сайтов". ответ. В ваших темах template.php , это должно быть что-то вроде (не проверено)
mytheme_preprocess_block($&vars) {
$context = context_get();
if(isset($context['context']['mycontext'])) {
$vars['theme_hook_suggestions'][] = "block__mycontext";
}
}
Вы можете сделать это более обобщенно, как описано в сообщении, связанном выше. Теперь ваш блок будет отображаться с использованием block--mycontext.tpl.php, если он существует, когда показан в контексте "mycontext".
$2c, *-пайк
Да, самый простой способ - использовать функцию hook_preprocess_block()
и добавлять свои шаблоны в список в определенных контекстах.
Пример:
/**
* Implements hook_preprocess_block().
*/
function THEME_preprocess_block(&$variables) {
// Replace 1, 2, 3 with real node IDs
if (arg(0) == 'node' && in_array(arg(1), array(1, 2, 3)) && !arg(2)) {
$variables['theme_hook_suggestions'][] = 'block__custom_context';
}
}