[Решено] Вывести блок только на первой странице каталога

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

Аватар пользователя Decamone Decamone 27 января 2014 в 19:16

Здравствуйте!

На сайте есть каталог из сотни элементов, имеющих термин "элемент". Каталог реализован через 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 и так далее?

Комментарии

Аватар пользователя Decamone Decamone 27 января 2014 в 23:24

"<a href="mailto:shumod@drupal.org">shumod@drupal.org</a>" wrote:
надо выбрать в настройках блока исключить:
"*?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/"каталог"

Аватар пользователя drupby drupby 28 января 2014 в 1:30

в template.php темы

function THEMENAME_block_info_alter(&$blocks, $theme, $code_blocks) {
  if (arg[0] = 'taxonomy' && arg[1] = 'term' && isset($_GET['page'])) {
    $blocks['views']['DELTA-BLOCKA']['visibility'] = 0;
  }
}

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

Аватар пользователя Decamone Decamone 28 января 2014 в 18:06

"VasyOK" wrote:
Вот так (?):
http://presents.kiev.ua/sumki-muzhskie/sumki-muzhskie-brendovye
http://presents.kiev.ua/koshelki/portmone-muzhskie[/quote]

Нет, не так. Вот так:

"drupby" wrote:
в template.php темы

<?phpfunction THEMENAME_block_info_alter(&$blocks, $theme, $code_blocks) {
  if (arg[0] = 'taxonomy' && arg[1] = 'term' && isset($_GET['page'])) { 
    $blocks['views']['DELTA-BLOCKA']['visibility'] = 0;
  }
}?>

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

немного подправил *()* и *==*

<?phpfunction zen_theme_block_info_alter(&$blocks, $theme, $code_blocks) {
  if (arg(0) == 'taxonomy' && arg(1) == 'term' && isset($_GET['page'])) { 
    $blocks['views']['series_alterna-block']['visibility'] = 0;
  }
}?>

но эффекта нет... Блок по-прежнему выводится на всех страницах.

Аватар пользователя drupby drupby 28 января 2014 в 19:00

"Decamone" wrote:
но эффекта нет

если имя темы прописал правильно и дельту блока , то он не должен показываться
можно еще включить модуль PHP filter и в настройках блока прописать php условие

Аватар пользователя Inj Inj 28 января 2014 в 22:54

можно ещё так

<?php
function ТЕМА_block_view_МОДУЛЬ_ДЕЛЬТА_alter(&$data$block) {
  if (
arg(0) == 'taxonomy' && arg(1) == 'term' && isset($_GET['page'])) {
    
$data['content'] = array();
  }
}
?>

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

Аватар пользователя Decamone Decamone 29 января 2014 в 1:53

"Inj" wrote:
можно ещё так
<?php
function ТЕМА_block_view_МОДУЛЬ_ДЕЛЬТА_alter(&$data, $block) { if (arg(0) == 'taxonomy' && arg(1) == 'term' && isset($_GET['page'])) { $data['content'] = array(); }}
?>

к моему глубокому сожалению, это предложение тоже не дало эффекта. Название темы вписал, 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']);
?>

и стало отлично - блок выводится только на первой странице. Но! Теперь он выводится на всех первых страницах всех списков терминов, а это вот не надо, там свои блоки. Так что теперь, видимо, надо в условие добавить вывод блока только на первой странице списка определенного термина. Может кто подскажет, как это сделать? Заранее весьма благодарен!

Аватар пользователя VasyOK VasyOK 29 января 2014 в 8:49

Decamone, почему не так?
У меня же сначала views-блок вывода товаров, потом
"Мужские кошельки и портмоне - купить мужской ко..." - это поле из термина таксономии, оно на первой странице.

Аватар пользователя Inj Inj 29 января 2014 в 10:27

ТЕМА_block_view_МОДУЛЬ_ДЕЛЬТА_alter(&$data, $block)
если тема называется zen_theme
модуль, который создал блок - views
дельта блока - series_alterna-block
то тогда выглядит так: zen_theme_block_view_views_series_alterna_block_alter(&$data, $block). Тире функция не любит, поэтому меняется на подчёркивание. Понимаю что уже не актуально, но мож когда пригодится.

Аватар пользователя Decamone Decamone 29 января 2014 в 19:00

"drupby" wrote:
return arg(0) == 'taxonomy' && arg(1) == 'term' && is_numeric(arg(2)) && !isset($_GET['page']) && arg(2) == 5;// для термина с tid = 5

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

"VasyOK" wrote:
Decamone, почему не так?
У меня же сначала views-блок вывода товаров, потом
"Мужские кошельки и портмоне - купить мужской ко..." - это поле из термина таксономии, оно на первой странице.

Пардон, не сразу воспринял текст внизу как блок. Именно так. Поделитесь своим решением?

"Inj" wrote:
то тогда выглядит так: zen_theme_block_view_views_series_alterna_block_alter(&$data, $block). Тире функция не любит, поэтому меняется на подчёркивание. Понимаю что уже не актуально, но мож когда пригодится.

Да, вижу ошибся, пропустил _МОДУЛЬ_ . Насчет тире будем иметь в виду.

Не удалось воспользоваться предложенными хуками, тем не менее, всем спасибо!

Аватар пользователя VasyOK VasyOK 10 ноября 2015 в 11:49

Делаю так. (Правда мне подсказывали 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 '

'. $current->description .'

'; }
}
?>