Создание дополнительных регионов (region, областей сайта) в Drupal 6.0

Аватар пользователя Rel Rel 7 марта 2008 в 15:22
1

Для создания своих областей сайта в D6 необходимо прописать в файл {teme}.info темы такие строчки:

regions[left] = Left sidebar
regions[right] = Right sidebar
regions[content] = Content
regions[header] = Header
regions[footer] = Footer
regions[header2] = Header2
regions[header3] = Header3

left,right,content,header,footer уже есть по умолчанию .. header2, header3 - новые области

После этого определить их нахождение в page.tpl.php
print $header2;
?>

Не забыть нажать в Управление сайтом->Производительность->Очистить кэш

Теперь на странице управления блоками мы увидим новые области и сможем добавлять туда блоки

Комментарии

Аватар пользователя soff soff 7 марта 2008 в 22:30

еще на drupal.org рекомендуют писать конструкцию вида

<?php if ($region): ?>
<div id="region">
  <?php print $region; ?>
</div>
<?php endif; ?>
Аватар пользователя Rel Rel 8 марта 2008 в 10:40

согласен, но это уже относится больше к вёрстке и знании будет ли этот регион когда-нибудь пустой.

например на сайте с которого я привёл пример (nepsite.com) если регион пустой, то меняется не только видимость самого блока, но и ширина его дива-родителя

Аватар пользователя Oboggy Oboggy 13 июня 2008 в 23:15

Странно, но после выполненной инструкции (обеими способами), регионы не отображаются на странице блоков. В чем дело?

Аватар пользователя alekseykhrebtov alekseykhrebtov 1 июля 2008 в 18:15

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

Аватар пользователя alekseykhrebtov alekseykhrebtov 4 июля 2008 в 18:36

хех, разобрался (сам не поможешь - никто не поможет :) )
новый вопрос (видать снова только себе задаю :) )
допустим, есть два региона. У первого из них фиксированная высота, которая больше, чем высота второго региона, от чего у второго идет выравнивание по нижниему краю первого, т.е. примерно так:
_____________________
I............I......................I
I.....2.....I......................I
I............I......................I
3333333I........1............I
3333333I......................I
3333333I......................I
_______I_____________I

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

Аватар пользователя alekseykhrebtov alekseykhrebtov 4 июля 2008 в 18:46

И в догонку...
использую тему contented7 для друпал 6

в файле .инфо вместо стандартного вида присутствует вот это:

; $Id: contented7.info,v 1.1 2008/04/11 02:30:59 hswong3i Exp $
name = Contented7
description = Tableless, multi-column, fluid width theme.
version = VERSION
core = 6.x
engine = phptemplate
stylesheets[all][] = style.css
stylesheets[all][] = custom.css
; Information added by drupal.org packaging script on 2008-06-19
version = "6.x-2.12"
core = "6.x"
project = "contented7"
datestamp = "1213867807"

во-первых, мне интересно где тогда для этой темы прописаны регионы и что за файл custom.css, которого нет в папке с темой?
во-вторых, когда я добавляю свой регион (по принципу, описаному выше), то у меня один мой регион заменяет все регионы темы, в том время как при аналогичных действиях в других темах, мой регион добавляется без всяких проблем, ну, кроме тех, о которых я писал уже :)

Аватар пользователя spown spown 7 июня 2009 в 1:53
"SeDo4" wrote:

хех, разобрался (сам не поможешь - никто не поможет :) )

тогда "вопрос на засыпку": как все-же регионы разместить в строку?
спасибо за ответ :)

UPD: все, теперь и я разобрался :) расместил в строку с помощью «table» :)

Аватар пользователя NurOff NurOff 7 июня 2009 в 9:31
"SeDo4" wrote:

во-первых, мне интересно где тогда для этой темы прописаны регионы и что за файл custom.css, которого нет в папке с темой?

; $Id: contented7.info,v 1.1 2008/04/11 02:30:59 hswong3i Exp $
name = Contented7
description = Tableless, multi-column, fluid width theme.
regions[header] = Header
regions[reklama3] = Reklama 3
regions[left] = Left sidebar
regions[reklama1] = Reklama 1
regions[content] = Content
regions[reklama2] = Reklama 2
regions[right] = Right sidebar
regions[reklama4] = Reklama 4
regions[footer] = Footer
version = VERSION
core = 6.x
engine = phptemplate
stylesheets[all][] = style.css
stylesheets[all][] = custom.css

; Information added by drupal.org packaging script on 2009-05-14
version = "6.x-2.15"
core = "6.x"
project = "contented7"
datestamp = "1242291918"

Никто не мешает сделать вот так.

div id="sidebar-left" class="sidebar"><!-- begin sidebar-left -->
      <?php if ($search_box): ?><div class="block block-theme"><?php print $search_box ?></div><?php endif; ?>
      <strong><?php print $reklama3; ?></strong><?php print $left ?>

Ну и так далее.
Файл custom.css создаем сами, пишем туда все свои дополнения. И при следующем обновлении этой темы, вам не нужно будт вспоминать, что и как вы делали.

"SeDo4" wrote:

во-вторых, когда я добавляю свой регион (по принципу, описаному выше), то у меня один мой регион заменяет все регионы темы, в том время как при аналогичных действиях в других темах, мой регион добавляется без всяких проблем, ну, кроме тех, о которых я писал уже :)

Смотрим выше. Регион Reklama3 после формы поиска по сайту, но выше левых блоков.

Аватар пользователя Antoniy Antoniy 23 июня 2009 в 21:34

Ееее, у меня получилось!
Супер, можно понаделать регионов кучу :)
Большое спасибо!

Аватар пользователя NurOff NurOff 4 июля 2009 в 16:06
regions[header] = Header
regions[reklama3] = Reklama 3
regions[left] = Left sidebar
regions[reklama1] = Reklama 1
regions[content] = Content
regions[reklama2] = Reklama 2
regions[right] = Right sidebar
regions[reklama4] = Reklama 4
regions[footer] = Footer

Ну вдогонку. Я не случайно разместил в такой последовательности регионы.
Порядок размещания здесь отвечает за местонахождение регионов во вкладке БЛОКИ.
Про тот самый файл stylesheets[all][] = custom.css
Название custom - это конечно произвольное, естественно пойдет любое.
В содержимом у меня описания для рекламных блоков.
К примеру справа regions[reklama2] = Reklama 2 в регион разместил погодный информер, и чтоб дизайн информера и самого региона совпадал описания сделал в custom.css.
Вычилсительные силы, к чему это я. В общем, про то что, любые ваши наработки сделанные для одной темы можно легко переносить в другие темы. И так же не потереть свои наработочки.

Аватар пользователя Ne_L Ne_L 28 апреля 2010 в 16:19

А почему если я в Create page напишу
<?php
print $header;
?>
то у меня ничего не выводится, хочу вывести в теле материала заголовок.

Аватар пользователя Ne_L Ne_L 28 апреля 2010 в 16:22

поправил предыдущее сообщение,
но ведь в {teme}.info этот регион прописан, если в page.tpl.php работает то я думал и в теле ноды заработать должно.

Аватар пользователя chel chel 13 августа 2010 в 22:22

добавил в .info
регион:

regions[left] = Left sidebar
regions[right] = Right sidebar
regions[content] = Content
regions[header] = Header
regions[footer] = Footer
regions[mymymy] = мой

и в файл темы page.tpl.php
<?php print $mymymy; ?>

1) в блоках он отображается admin/build/block (причем просто подсвечивается цветом)
2) создал в папке своей темы файлик block-mymymy.tpl.php
в файл вставлял любой текст
3) на всякий случай скопировал в папку с темой block.tpl.php
4) чистил кэшы, отключал тему

блок не появляется на сайте, куда копать дальше?

Аватар пользователя chel chel 14 августа 2010 в 12:30

спасибо.....понял теперь, что нужно создать блок в регионе, тогда подцепляется файл block-mymymy.tpl.php, где (mymymy название региона)
удачи!!

Аватар пользователя NurOff NurOff 31 января 2011 в 3:24
"zloy-doctor" wrote:

помогите пожалуйста, все прописал
<?php print $header2; ?>

область создалась, но как то криво

"NurOff" wrote:

Про тот самый файл stylesheets[all][] = custom.css
Название custom - это конечно произвольное, естественно пойдет любое.
В содержимом у меня описания для рекламных блоков.
К примеру справа regions[reklama2] = Reklama 2 в регион разместил погодный информер, и чтоб дизайн информера и самого региона совпадал описания сделал в custom.css.

Вам хотя бы где-то надо указать где ваш регион размещать. Обтекания, отступы... В общем стили...

Или написать название используемого шаблона и куда вы хотите разместить регион. Возможно кто-о уже делал подобное и вам подскажут готовое решение для вашего шаблона.

Аватар пользователя zloy-doctor zloy-doctor 16 февраля 2011 в 1:27

Область мне нужна для меню в файле page.tpl.php я удалил
<?php if (isset($primary_links)) { ?><?php print theme('links', $primary_links, array('class' =>'links', 'id' => 'navlist')) ?><?php } ?>

и в место вставил <?php print $header2; ?>

Создалась область, я перенес в нее Superfish 6.x-1.6 дабы сделать норм меню) Но опять кривовато http://gosha.me/ скрин админки выше (((

Аватар пользователя Ateiri Ateiri 10 июля 2011 в 20:07

template.php

<?php
/**
 * Generate regions of theme.
 */
function НазваниеТемы_regions() {
  return array(
    
'right' => t('right sidebar'),
    
'content' => t('content'),
    
'header' => t('header'),
    
'footer' => t('footer'),
    
'content_header' => t('header of main content'),
    
'prefooter' => t('prefooter'),
    
'inline_for_node' => t('inline region for nodes')
  );
}
?>

НазваниеТемы.info

regions[right] = right sidebar
regions[content] = content
regions[header] = header
regions[footer] = footer
regions[content_header] = header of main content
regions[prefooter] = prefooter
regions[inline_for_node] = inline region for nodes

Следовательно и вызываем в page.tpl.php <?php if ($prefooter) print $prefooter; ?>
<?php if($inline_for_node): print $inline_for_node; endif; ?>

'right' => t('right sidebar') - Правое меню
'left' => t('left sidebar') - Левое меню
'prefooter' => t('prefooter') - Новый регион, место перед подвалом.

Аватар пользователя knife knife 29 августа 2011 в 19:46

Подниму тему. Объясните человеку незнакомому с РНР как правильно прописать регионы при помощи table чтобы они выводились в строчку?

  <?php if (!$in_overlay): // hide in overlay ?>
    <?php if ($page['tertiary_content']): ?>
      <div id="tertiary-content">
        <?php print render($page['tertiary_content']); ?>
      </div>
    <?php endif; ?> 
    <?php if ($page['tertiary2_content']): ?>
      <div id="tertiary2-content">
        <?php print render($page['tertiary2_content']); ?>
      </div>
    <?php endif; ?> 
     <?php if ($page['tertiary3_content']): ?>
      <div id="tertiary3-content">
        <?php print render($page['tertiary3_content']); ?>
      </div>
    <?php endif; ?>

Сейчас они выводятся друг за другом вертикально, хотелось бы их разместить в горизонтальном порядке.

Аватар пользователя NurOff NurOff 30 августа 2011 в 7:49

Тему засоряете. Делайте обтекание блоков - CSS/float.
Таблицы еще проще.
Кто вам мешает в строку выставить регионы?

<table>
<tr>
<td>I регион</td>
<td>II регион</td>
<td>III регион</td>
</tr>
...
<table>
"knife" wrote:

Объясните человеку незнакомому с РНР

Где тут PHP? В чистом виде работа с каскадными таблицами стилей(CSS) и с языком гипертекстовой разметки(HTML).

Аватар пользователя Zubat Zubat 12 августа 2012 в 20:49

Тоже апну тему) Так как не понимаю,помогите,пожалуйста)
1)Создал в файле инфо регион.
2)Прописал в page.tpl
<?php if ($stat): ?>

<?php print $stat; ?>

<?php endif; ?>
3) Новая область отобразилась.
В самом низу.

Вопрос-как задать теперь ее позицию,например,я хочу чтобы она была в правом углу.
Где надо прописывать эту позицию?
Тема nixer.

Только знакомлюсь с Drupal. Спасибо,заранее)

Аватар пользователя Виктор Степаньков ака RxB Виктор Степаньк... 12 августа 2012 в 20:53
"Zubat" wrote:

Только знакомлюсь с Drupal. Спасибо,заранее)

Ознакомьтесь с CSS и основами вёрстки. И не надо говорить, что в жумло всё по другому