Изменение шаблонов блоков в зависимости от контекста? перемещение заголовка в поле тела в шаблоне


Можно ли изменить мое предложение по шаблону блока в зависимости от конкретного контекста?

Например, на некоторых родительских целевых страницах (я мог бы установить вручную; потому что есть только 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

Обновление:

Эти целевые страницы - это всего лишь три узла, которые нужны клиенту. На самом деле нет рифмы или причины того, что определяет, является ли это целевой страницей. Мне просто нужно установить три идентификатора узла, чтобы вызвать изменение шаблона блока.

 1
Author: chrisjlee, 2012-10-22

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, *-пайк

 3
Author: commonpike, 2012-10-31 22:15:34

Да, самый простой способ - использовать функцию 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';
  }
}
 1
Author: Aram Boyajyan, 2012-10-22 15:59:10