Как создать пользовательские области в теме?

58

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

palbakulich
источник
подробный блог: goo.gl/kD3TZu
Суреш Камруши

Ответы:

68

Вы определяете регионы в вашем файле .info. Смотрите: Структура .info файла

Затем вам нужно поместить соответствующие теги шаблона в ваш файл page.tpl.php.

Так, например, если вы определили регион sidebarв файле .info тем, вы бы добавили: <?php print render($page['sidebar']); ?>в соответствующее место на вашем page.tpl.php.

Camsoft
источник
6
Если ваша тема не имеет файла page.tpl.php, вы можете скопировать настройки по умолчанию из системного модуля в вашу тему и изменить эту копию.
Майки П
5
Omega не нуждается в части page.tpl.php, просто объявите регион в .info И CLEAR CACHES.
Capi Etheriel
20

Еще один момент: не пропустите необходимые регионы!

regions[content] = Content
regions[help] = Help
regions[page_top] = Page top
regions[page_bottom] = Page bottom

Подробнее об этом можно узнать по адресу http://drupal.org/update/themes/6/7#closure .

Чтобы прояснить этот момент: если вы определяете свои собственные регионы, вам нужно определить все, что вы используете, включая те, которые требуются. Другими словами, вы не можете просто определить дополнительные регионы: если вы определяете какие-либо, вы должны определить их все.

Лора
источник
9

Создание региона для темы Drupal 7 ничем не отличается от создания региона для региона Drupal 6; различия между Drupal 7 и предыдущими версиями по существу:

  • Регионы не определяются с помощью mytheme_regions()функции, как это было сделано в Drupal 5, но они определяются в mytheme.info с использованием regions[]директив, что также делается с темами Drupal 6.
  • Области отображаются с использованием функции Drupal render()вместо печати содержимого переменной.

По умолчанию Drupal 7 регионов следующие:

regions[header] = Header
regions[highlighted] = Highlighted
regions[help] = Help
regions[content] = Content
regions[sidebar_first] = Left sidebar
regions[sidebar_second] = Right sidebar
regions[footer] = Footer

Основные темы Drupal 7 теперь включают регион с именем «подсвеченный», который использует тот же дисплей, что и область формулировки миссии в Drupal 6; они также включают регион с именем 'help', который по умолчанию содержит то же содержимое, что и $helpпеременная, используемая в Drupal 6.

киамалуно
источник
4

Области темы определены в вашем информационном файле темы - см. Документацию . Просто добавьте строку с, regions[corner] = Cornerчтобы получить угол области.

Затем вам нужно отредактировать файл page.tpl.php и добавить, <php print render($corner); ?>где вы хотите, чтобы регион отображался. Если ваша тема не имеет page.tpl.php, скопируйте ее из базовой темы или из системного модуля.

Общие подводные камни:

  • Если в файле theme.info не было объявлено ни одного региона, он использовал регионы по умолчанию в Drupal. Если вы хотите добавить, вам придется повторно объявить регионы по умолчанию. Вы можете, конечно, удалить любой регион, но, пожалуйста, поддержите необходимые регионы. Смотрите документы снова.

  • Изменения в файле .info или добавление новых файлов в тему (например, page.tpl.php) будут замечены только после очистки кешей.

  • Omega, очень популярная базовая тема, не нуждается в каких-либо изменениях в файле page.tpl.php, только в файле .info. Но вам придется посетить настройки темы в пользовательском интерфейсе и назначить свой регион для зоны.

Capi Etheriel
источник
Это обобщение ответов с общими подводными камнями.
Capi Etheriel
Является regions[content] = Contentединственным в регионе требуется D7? drupal.org/node/171205#regions , кажется, подразумевает, но затем drupal.org/node/171224 говорит , что требуемые регионы content, help, page_topиpage_bottom
Джим Гаррисон
Я не знаю, проверяет ли Drupal какой-либо из регионов, но contentэто определенно очень важно. helpподдерживается ядром (для вывода справочных сообщений), page_bottomвероятно, там, где печатается нижняя js, и, page_topкажется, она используется для панелей навигации, таких как панели инструментов ядра.
Capi Etheriel
2

Выполните следующие шаги, чтобы создать пользовательский регион в своей теме:

  1. Перейдите в файл theme.info и добавьте эту строку.

    regions[machine_name_of_your_region] = Name of your region
  2. Хотя вы также можете вызывать блоки регионов в шаблоне узла, вы обычно добавляете регион в шаблон страницы темы. Обычно это page.tpl.php, или, если у вас есть файлы шаблонов для разных страниц, отредактируйте их тоже. Новый регион появится только на страницах, построенных вокруг шаблона, к которому вы добавляете новый регион. Вставьте его туда, где вы хотите, чтобы появился новый регион.

    <?php if ($page['machine_name_of_your_region']): ?>
      <div id="sidebar-first" class="column sidebar"><div class="section">
      <?php print render($page['machine_name_of_your_region']); ?>
      </div></div> <!-- /.section, /#sidebar-first -->
     <?php endif; ?>
  3. Конфигурация - Производительность - Очистить все кэши

Астха чаухан
источник
0

Создать новый регион в теме

Вам просто нужно определить его в двух файлах.

  • Theme.info
  • page.tpl.php

Theme.info

;;;;;;;;;;;;;;;;;;;;;
;; Regions
;;;;;;;;;;;;;;;;;;;;;

regions[navigation]      = 'Navigation'
regions[header]          = 'Top Bar'
regions[highlighted]     = 'Highlighted'
regions[new_region_name] = 'Region Name' ;; Add New Region

page.tpl.php

Теперь рендер этого региона

  <?php if ($page['new_region']): ?>
      <div class="new_region_class">
        <?php print render($page['new_region']); ?>
     </div>
  <?php endif; ?>

Теперь очистите весь кэш. Теперь у вас есть новый регион в вашей теме. Вы можете увидеть это на странице конфигурации вашего блока.

Для получения дополнительной информации посетите http://drupal.org/node/171205

gsjha
источник