Здравствуйте!
На сайте есть каталог из сотни элементов, имеющих термин "элемент". Каталог реализован через view Taxonomy term, Page, Формат Grid, показать Fields, 3 колонки, Paged, 9 items, выводит поля материалов, имеющих термин "элемент". Каталог состоит из десятка страниц по 9 элементов на странице.
Потребовалось вывести на первой странице в начале каталога блок-список терминов таксономии (6 типов элементов каталога). Список реализован через view Block, Формат Grid, показать Fields, 3 колонки, 2 ряда, выводит поля терминов таксономии (типы элементов каталога).
Если в настройках блока вывести блок только на странице taxonomy/term/"каталог", то блок выводится на всех страницах taxonomy/term/"каталог"?page=1 , taxonomy/term/"каталог"?page=2 и так далее.
Подскажите, пожалуйста, существует ли простой способ вывести блок-список терминов таксономии только на первой странице каталога taxonomy/term/"каталог" и не выводить его на страницах taxonomy/term/"каталог"?page=1 , taxonomy/term/"каталог"?page=2 и так далее?
Комментарии
надо выбрать в настройках блока исключить:
"*?page*"
Если вы имеете в виду "administer/structure/blocks/Показывать блок на определенных страницах - Все страницы, кроме перечисленных", то перечислять надо будет все страницы, кроме одной, на которой нужен вывод блока. Как-то громоздко. Если "Только на перечисленных страницах" и указать адрес taxonomy/term/"каталог", то блок выводится на всех страницах типа taxonomy/term/"каталог"?page=1 , taxonomy/term/"каталог"?page=2 и так далее. А надо только на первой.
Похоже, при выборе показа блока на определенных страницах фрагмент адреса *?page=* игнорируется, и исключить такие страницы не получается.
Может быть, имеется в виду "administer/structure/views/view "мой блок":Block/Block settings или Advanced"? Тогда никак не могу понять, где там можно исключить вывод блока на страницах типа taxonomy/term/"каталог"?page=1 , оставив вывод на taxonomy/term/"каталог"
Вот так (?):
http://presents.kiev.ua/sumki-muzhskie/sumki-muzhskie-brendovye
http://presents.kiev.ua/koshelki/portmone-muzhskie
в template.php темы
if (arg[0] = 'taxonomy' && arg[1] = 'term' && isset($_GET['page'])) {
$blocks['views']['DELTA-BLOCKA']['visibility'] = 0;
}
}
дельту блока можно посмотреть на странице настройки блока в урле
если имя темы прописал правильно и дельту блока , то он не должен показываться
можно еще включить модуль PHP filter и в настройках блока прописать php условие
можно ещё так
<?php
function ТЕМА_block_view_МОДУЛЬ_ДЕЛЬТА_alter(&$data, $block) {
if (arg(0) == 'taxonomy' && arg(1) == 'term' && isset($_GET['page'])) {
$data['content'] = array();
}
}
?>
ну а пустой блок уже не выводится. И не забывайте чистить кэш после изменений
П.С. писать там же в template.php темы
к моему глубокому сожалению, это предложение тоже не дало эффекта. Название темы вписал, block_delta внёс из урла на странице настройки блока, в template.php вставил, кэш очистил.
<?php
function zen_theme_block_view_series_alterna-block_alter(&$data, $block) {
if (arg(0) == 'taxonomy' && arg(1) == 'term' && isset($_GET['page'])) {
$data['content'] = array();
}
}
?>
Далее ругань
Parse error: syntax error, unexpected '-', expecting '(' in /home/virtwww/хххххх/http/sites/all/themes/zen/template.php on line 46
Я так понял, что почему-то помешал дефис в названии block_delta
Принято решение идти через PHP filter и РНР-условие.
В настройках блока был внедрён код:
<?php
return arg(0) == 'taxonomy' && arg(1) == 'term' && is_numeric(arg(2)) && !isset($_GET['page']);
?>
и стало отлично - блок выводится только на первой странице. Но! Теперь он выводится на всех первых страницах всех списков терминов, а это вот не надо, там свои блоки. Так что теперь, видимо, надо в условие добавить вывод блока только на первой странице списка определенного термина. Может кто подскажет, как это сделать? Заранее весьма благодарен!
return arg(0) == 'taxonomy' && arg(1) == 'term' && is_numeric(arg(2)) && !isset($_GET['page']) && arg(2) == 5;// для термина с tid = 5
Decamone, почему не так?
У меня же сначала views-блок вывода товаров, потом
"Мужские кошельки и портмоне - купить мужской ко..." - это поле из термина таксономии, оно на первой странице.
ТЕМА_block_view_МОДУЛЬ_ДЕЛЬТА_alter(&$data, $block)
если тема называется zen_theme
модуль, который создал блок - views
дельта блока - series_alterna-block
то тогда выглядит так: zen_theme_block_view_views_series_alterna_block_alter(&$data, $block). Тире функция не любит, поэтому меняется на подчёркивание. Понимаю что уже не актуально, но мож когда пригодится.
Спасибо! Именно то, что надо. Теперь блок из терминов выводится на первой странице таксономии и не выводится на остальных. А поскольку много терминов, то потребовалось уточнить термин страницы вывода. Отлично.
Пардон, не сразу воспринял текст внизу как блок. Именно так. Поделитесь своим решением?
Да, вижу ошибся, пропустил _МОДУЛЬ_ . Насчет тире будем иметь в виду.
Не удалось воспользоваться предложенными хуками, тем не менее, всем спасибо!
Делаю так. (Правда мне подсказывали drupby, Enemy и ХулиGUN).
http://presents.kiev.ua/koshelki/portmone-muzhskie
Код который блок выводит. В подвале или заголовке вьюхи добавляется примерно такое.
Но у меня фильтры еще добавлены во вьюху.
if(
!isset($_GET['page'])
/*Фильтры выбора если есть:*/
&& (!isset($_POST['field_pro_tid_selective']) || $_POST['field_pro_tid_selective'] == 'All')
&& (!isset($_POST['sort_bef_combine']) || $_POST['sort_bef_combine'] == 'sell_price_1 ASC')
&& (!isset($_POST['sell_price']) || $_POST['sell_price'] == ' ')
&& (!isset($_POST['sell_price_1']) || $_POST['sell_price_1'] == ' ')
)
{
$current = taxonomy_term_load(arg(2));
if ($current->description) {print '
'; }
}
?>