Как иметь область внутри формы Drupal - PullRequest
0 голосов
/ 27 сентября 2010

Я пытаюсь изменить форму комментария drupal, чтобы чуть выше формы я мог показать регионы и добавить больше блоков в этот регион (скажем, некоторые рекламные баннеры).

Я делаю это в template.php У меня есть рабочая функция themename_comment_form, и я могу установить $form['intro']['#value'] на желаемое значение. Я также знаю, как создать новый регион.

Я пытаюсь получить значение этого региона (скажем, $above_comment_form) и сделать его доступным внутри themename_comment_form (что-то вроде $form['intro']['#value'] = $above_comment_form;) Я попытался preprocess_page, preprocess_node, чтобы установить значение, как $vars['above_comment_form']=$above_comment_form, но не повезло.

Ответы [ 2 ]

2 голосов
/ 27 сентября 2010

Чтобы создать регион, вам нужно добавить его в файл .info вашего модуля. Если у вас не определены регионы, по умолчанию должно быть 5 доступных:

  • слева
  • право
  • содержание
  • заголовок
  • сноска

Если вы хотите добавить / удалить регионы, вам нужно написать все регионы, которые вы хотите в своей теме. Таким образом, чтобы включить пользовательский регион, вам нужно иметь это в файле .info:

regions[header] = "Header"
regions[left] = "Left sidebar"
regions[content] = "Content"
regions[right] = "Right sidebar"
regions[footer] = "Footer"
regions[above_comment_form] = "Above the comment form"

Теперь регионы доступны только в вашем page.tpl.php по умолчанию. Вы можете получить блоки в регионе, который доступен для пользователя, используя theme_blocks. Итак, в вашей функции preprocess_node вам нужно добавить:

$vars['above_comment_form'] = theme('blocks', 'above_comment_form');

Тогда в вашем node.tpl.php вы можете сделать это:

<div id="above_comment_form">
  <?php print $above_comment_form; ?>
</div>

Это должно выполнить вашу задачу.

1 голос
/ 30 сентября 2010

Рендеринг областей происходит очень поздно в стеке вызовов, поэтому в большинстве случаев невозможно включить их в что-то вроде функции темы или form_alter.

Однако вы можете визуализировать отдельные блоки в них, поэтому, если вы хотите добавить определенный блок, используя что-то вроде:

$block = module_invoke('block', 'block', 'view', 26);
print $block['content'];

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

...