Ребят, подскажите советом стоит ли это делать

Главные вкладки

Аватар пользователя NightL NightL 26 июня 2012 в 17:44

Есть ряд блоков, которые показываются только на некоторых страницах (не более 100-150)

Вариантов сделать несколько, но стоит ли в плане производительности

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

Второй вариант не удобен, а с первым вариантом не выйдет ли затык какой по производительности? Или первый вариант заменить на модуль типа [module=themekey]

Посоветуйте, пожалуйста

Комментарии

Аватар пользователя Orion76 Orion76 26 июня 2012 в 18:09

1.Если вы просто уберете регион из шаблона, блоки в этом регионе всеравно будут "создаваться", просто выводиться не будут.
2.Если вы укажете, на каких страницах показывать блок, особенно если адрес можно задать шаблоном(node/*), это будет производительнее..

Аватар пользователя NightL NightL 26 июня 2012 в 18:28

orion76
Хм блоки будут создаваться в регионе, который не выводится в шаблоне/на странице? странно..
Увы вывести по шаблону блоки не получится, если бы это можно было бы я бы конечно сделал бы так

alex_shut
первый вариант наоборот не проблемный, а предпочтительный, просто опасаюсь в плане быстродействия от такого кода типа

function phptemplate_preprocess_page(&$vars) {
    if (isset($vars['node']) && (
        $vars['node']->nid == 56 ||
        $vars['node']->nid == 7 ||
        $vars['node']->nid == 889 ||
        $vars['node']->nid == 903 ||
        $vars['node']->nid == 5673 ||
        $vars['node']->nid == 327 ||
        $vars['node']->nid == 670 ||
        $vars['node']->nid == 116 ||
        $vars['node']->nid == 110 ||
        $vars['node']->nid == 380 ||
        $vars['node']->nid == 159 ||
        $vars['node']->nid == 3720 ||
        $vars['node']->nid == 396
        ))
    {
        $vars['template_files'][] = 'page-country';
    }
}
Аватар пользователя NightL NightL 26 июня 2012 в 19:00

увы по типу материала я так же подставляю свой шаблон.
Возможно ли интересно сделать на основе url. общего в этих страницах то что url выглядит
site/alias/page
тогда как у всех остальных страниц
site/alias/page/page
или
site/alias/page/page/page

Аватар пользователя kosilko kosilko 26 июня 2012 в 19:02

"NightL" wrote:
&& (
$vars['node']->nid == 56 ||
$vars['node']->nid == 7 ||
$vars['node']->nid == 889 ||
$vars['node']->nid == 903 ||
$vars['node']->nid == 5673 ||
$vars['node']->nid == 327 ||
$vars['node']->nid == 670 ||
$vars['node']->nid == 116 ||
$vars['node']->nid == 110 ||
$vars['node']->nid == 380 ||
$vars['node']->nid == 159 ||
$vars['node']->nid == 3720 ||
$vars['node']->nid == 396
)

in_array() ? Не, не слышал. Хотя это не прибавит к производительности, если будете подходить к решению проблем через шаблоны.

Аватар пользователя Orion76 Orion76 26 июня 2012 в 23:26

"NightL" wrote:
Хм блоки будут создаваться в регионе, который не выводится в шаблоне/на странице? странно..

ничего странного... все логично...-))
Когда Друпал "собирает" страничку, он незнает, какие регионы выводятся в шаблоне странице..
Он просто получает список регионов..
Получает информацию о блоках..
Проверяет - какие блоки отображаются на странице(например по настройке блока - отображать на определенных страницах)
Генерирует нужные блоки и "вставляет" их в регионы..
Ну а если в шаблоне регион отсутствует... то он просто не выводиться..

Аватар пользователя NightL NightL 27 июня 2012 в 21:41

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

Если вам не сложно, напишите, пожалуйста, поподробней

orion76
Получается если у меня от вьюса блоков штук 30, которые выводятся в разные регионы, то при генерировании страницы друпал генерирует все эти блоки? Или я не верно понял?

Аватар пользователя Orion76 Orion76 28 июня 2012 в 10:04

"NightL" wrote:
при генерировании страницы друпал генерирует все эти блоки?

В большинстве случаев,если в настройках блока нет других настроек видимости, то да...

PS..Кстати, для настройки "сложной" логики вывода контента есть модуль
http://drupal.org/project/context

может пригодиться..

Аватар пользователя natbampo natbampo 28 июня 2012 в 10:23

Почему бы тебе эти отдельные страницы не именовать синонимами по какому то отличному шаблону и в настройках видимости блока проставить этот шаблон?

/somepage/infa-1
/somepage/infa-2

somepage/*

Аватар пользователя NightL NightL 29 июня 2012 в 0:51

q2_faith
Вьюсом выводить эти страницы сложно так как там другие сложности появляются да и аргументы не помогут только если ввести какой-нибудь чекбокс и по нему фильтровать, но в любом случае это не удобно

orion76
В настройках модуля, как правило пишу видимость, но если не написать выходит он сгенерируется для всех страниц? Попробую потестировать на досуге, действительно ли блоки все генерируются даже если на странице нет региона в котором этот блок выводится... не верится

все хотел познакомиться с этим модулем да все как-то не сталкивался с ним.

natbampo
Этот вариант не хотел использовать так как изначально создавал цепочку url чтобы продвинутые пользователи могли видеть по url как глубоко они в сайте. Может это и глупо.

Аватар пользователя Orion76 Orion76 29 июня 2012 в 1:30

"NightL" wrote:
не верится

А что тут проверять..
Страница генерируtтся функцией theme('page', $return);(index.php).
Которая, в свою очередь, получае список регионов для текущей темы..
И для каждого региона вызывается функция theme('blocks',$region)..
В которой функцией block_list($region) получается список блоков для региона, проверяются параметры видимости блока, и генерируется его содержимое..

http://api.drupal.ru/api/function/block_list/6

Аватар пользователя NightL NightL 29 июня 2012 в 1:43

orion76
Получается, обязательно надо указывать параметры видимости блока? Чтобы этот блок не генерировался на всех страницах, если показывается он только на 10-ти страницах и только в одном разделе сайта? Иначе это лишняя нагрузка? Верно я понял?

Аватар пользователя Orion76 Orion76 29 июня 2012 в 2:02

"NightL" wrote:
Иначе это лишняя нагрузка?

теоретически - да..
А практически - если содержимое блока меняется не часто, и настроено оптимальное кеширование блока, то лишняя нагрузка незначительна-))

Вы бы объяснили принцип, по которому определяете, для какой ноды показывать блок,а для кокой нет..
И что это за блоки..
Возможно, нашли бы оптимальное решение..

Аватар пользователя NightL NightL 29 июня 2012 в 9:31

orion76
Это ноды связанные между собой через node reference
Корневая нода / нода раздела-1 / нода раздела-1-2 / нода-1-3
(Нода-1-3 имеет связь к ноде-1-2, а нода-1-2 имеет связь к ноде-1)
Блоки это вьюсы выводящие информацию по аргументам в каждой из нод + вьюсы, которые помимо что выводятся только в своем разделе выводятся на конкретной странице или группе того раздела.

Вывод их идет по аргументу + по настройке видимости, но вот для нода раздела-1 такой принцип не подойдет или в качестве фильтра или аргумента должна выступать связь к корневой ноде. Как просто со связью сделать я знаю, не знаю можно ли только указать к чему конкретно связь допустима, а к чему нет

Аватар пользователя Orion76 Orion76 29 июня 2012 в 13:04

Оно понятно.. вы отлично знакомы со структурой своего сайта и отлично представляете,что должно получиться в результате..
И то что вы написали выше - для вас очевидно...
а для нас - нет..
Короче...
практически ничего не понятно-))

Аватар пользователя NightL NightL 30 июня 2012 в 0:32

Перечитав свое же, понял, что то, что крутилось в голове не сработает...

Может добавить нужным нодам технический термин и по нему выводить? ...

Аватар пользователя NightL NightL 30 июня 2012 в 1:06

q2_faith
конечно через views! Наверное такой способ будет лучшем чем через template.php менять шаблон для части нод? Или одна малина ...