Двойной вопрос | views аргументы и блоки

25 октября 2011 в 17:12
Аватар пользователя NightL NightL 0 23

Два вопроса почти одновременно родилось в голове

Есть блок - в настройках видимости можно отметить:
Показывать на всех страницах, кроме перечисленных.
Показывать только на перечисленных страницах.

Хотелось бы совместить это, то есть выбрать скажем показывать на страницах
menu/*
но не показывать
menu/tag/*

Для этого существует
Показать, если данный PHP-код возвращает TRUE
Но самостоятельно набросать код увы, помогите, пожалуйста

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

Спасибо

Комментарии

что то вроде
<?php
// Массив страниц на которых мы будем видеть блок
$access_page = array(
'menu',
);
// Получаем путь. Убираем слешы
$path = trim($_GET["q"], '/');
// Проверяем если есть елемент совпадающий с путем значи показываем блок
if(in_array($path, $access_page))
return TRUE;
?>

Можно поробывать что то вроде этого
А можно модуль какой ни будь найти уверен на 100%

25 октября 2011 в 21:21

Забыл, что в блоке <?php ?> лишнее
Код вывода работает точно так же как если блок показывать на всех страницах

Один из аргументов в моем случае это показ блока только в полных нодах
пробовал так

<?php
if (arg(0) == 'node' and is_numeric(arg(1)) and arg(2)!='edit') {
   
$node node_load(arg(1));
   if (
$node->type=='video'){
      return 
true;
   }
}
?>

Но результат ровно такой же... блок показывается везде

25 октября 2011 в 21:04

<?php
// Добавьте строчку
global $_GET;
// Массив страниц на которых мы будем видеть блок
$access_page = array(
'menu',
);
// Получаем путь. Убираем слешы
$path = trim($_GET["q"], '/');
// Проверяем если есть елемент совпадающий с путем значи показываем блок
if(in_array($path, $access_page))
return TRUE;
?>

Добавьте глобальную переменную сверху

25 октября 2011 в 21:26

На Drupal 6 Проверял на 2 сайтах если массив оставлять пустым то блок не выводится не где, если добавлять адреса то показывается только по ним

25 октября 2011 в 21:54

То есть где-то у меня не то? Странно... блок создает views и уже в настройках блока вывод
Показать, если данный PHP-код возвращает TRUE

25 октября 2011 в 22:03

Правильным будет если вы не возвращаете в блоке ничего то ничего и не выводиться. Экспериментируйте с другими блоками. прим. <?php return FALSE; ?> - должно вернуть пустой блок

25 октября 2011 в 22:06

"NightL" wrote:
menu/*
но не показывать
menu/tag/*

<?php
return drupal_match_path($_GET['q'], 'menu/*') && !drupal_match_path($_GET['q'], 'menu/tag/*');
?>
"NightL" wrote:
Есть блок (views) какие аргументы с настройками необходимы, чтобы блок выводился на полной странице, но не выводился на страницах таксономии (анонсов)?

Во вьюхе нет настройки видимости блоков. Поясните что имеете ввиду.

25 октября 2011 в 23:01

Vydrin_AP wrote:
"NightL" wrote:
menu/*
но не показывать
menu/tag/*

<?php
return drupal_match_path($_GET['q'], 'menu/*') && !drupal_match_path($_GET['q'], 'menu/tag/*');
?>
"NightL" wrote:
Есть блок (views) какие аргументы с настройками необходимы, чтобы блок выводился на полной странице, но не выводился на страницах таксономии (анонсов)?

Во вьюхе нет настройки видимости блоков. Поясните что имеете ввиду.

Увы код не работает, блок не выводится. Как бы его подправить? Во views нет они есть настройках видимости блоков, а про views речь, что быть может там можно было настроить аргументы, по которым бы блок выводился аналогично при использовании php в области видимости блока, но чую там так же нужно использовать php в аргументах

25 октября 2011 в 23:15

"NightL" wrote:
Хотелось бы совместить это,

Попробуй модуль Context.

"NightL" wrote:
чтобы блок выводился на полной странице, но не выводился на страницах таксономии

Context?

25 октября 2011 в 23:08

<a href="mailto:v1adimir@drupal.org">v1adimir@drupal.org</a> wrote:
"NightL" wrote:
Хотелось бы совместить это,

Попробуй модуль Context.

"NightL" wrote:
чтобы блок выводился на полной странице, но не выводился на страницах таксономии

Context?

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

25 октября 2011 в 23:19

Странно почему я подумал что в блоке надо писать без <?php ?>
без этого таки код не работает, а код полностью рабочий

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

Мысль в слух Интересный был бы модуль, который бы интерпретировал простые задачи вывода блока типа (node/*) в php код с множественными условиями. Есть даже похожий модуль в плане идеи для хлебных крошек, названия только не помню

25 октября 2011 в 23:09

Именно поэтому и не работают сниппеты, которые вам предлагают. Напишите урлы, которые стоят за этими синонимами.

26 октября 2011 в 10:40

За menu стоит taxonomy/term/104/all
За menu/tag ничего не стоит туда добавляются термины с алиасами menu/tag/*
А у материала проставляются алиасы menu/*

26 октября 2011 в 13:09

Код работает, но не совсем так: выводится блок во всех терминах (taxonomy/term/*/all) не выводится на страницах полных нод с алиасом «menu/*»

Подобный вопрос нашел у http://xandeadx.ru/blog/drupal/360 но там больше про 7-ку, хотя насколько я понял отличия между 7-кой и 6-кой только в одной строчке, увы не ничего заработало Sad

26 октября 2011 в 15:22

<a href="mailto:v1adimir@drupal.org">v1adimir@drupal.org</a> wrote:
"NightL" wrote:
увы не ничего заработало

Может проще было Context поставить? )

Не задачу я решил


<?php
if (arg(0) == 'node' and is_numeric(arg(1)) and arg(2)!='edit') {
   
$node node_load(arg(1));
   if (
$node->type=='video'){
      return 
true;
   }
}
?>

но это сильно частный случай, а хотелось бы общий инструмент для более сложных задач

26 октября 2011 в 16:52

<?php
global $_GET;
// Массив страниц на которых мы будем видеть блок
$access_page = array(
'menu/*',
);
// Получаем путь. Убираем слешы
$path = trim($_GET["q"], '/');
// Проверяем если есть елемент совпадающий с путем значи показываем блок
if(in_array($path, $access_page) || chek_alias($path, $access_page) > 0)
return TRUE;
// Проверякм ссылку на похожесть
function chek_alias($path, $access_page) {
foreach($access_page as $page) {
// Разбиваем допустимую ссылку на части
$page_parts = explode($page, '/');
// Разбиваем ссылку страницы на части
$url_parts = explode($path, '/');
// Проходимся по всем частям ссылки и сверяем их с допустимой ссылкой
for($i = 0; $i < count($url_parts); $i++) {
// Провряем часть нашей ссылки соответсвуе допустимой части или допустимая часть имеет любое значение
if($url_parts[$i] == $page_parts || $page_parts[$i] == '*')
// Если нет
else
$error = 1;
}
// Возвращаем 1 если нашли дпустимую ссылку и 0 если не одна из допустимых сслок не подошла
if($error < 0)
return 1;
else
return 0;
}

}
?>

26 октября 2011 в 17:24