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

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

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

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

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

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

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

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

Спасибо

Комментарии

Аватар пользователя Shok211 Shok211 25 октября 2011 в 21:21

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

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

Аватар пользователя NightL NightL 25 октября 2011 в 21:04

Забыл, что в блоке <?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;
   }
}
?>

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

Аватар пользователя Shok211 Shok211 25 октября 2011 в 21:26

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

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

Аватар пользователя Shok211 Shok211 25 октября 2011 в 21:54

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

Аватар пользователя NightL NightL 25 октября 2011 в 22:03

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

Аватар пользователя Shok211 Shok211 25 октября 2011 в 22:06

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

Аватар пользователя Alex Bacart Alex Bacart 25 октября 2011 в 23:01

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

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

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

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

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 в аргументах

Аватар пользователя v1adimir@drupal.org v1adimir@drupal.org 25 октября 2011 в 23:08

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

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

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

Context?

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

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

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

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

Context?

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

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

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

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

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

Аватар пользователя Alex Bacart Alex Bacart 26 октября 2011 в 10:40

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

Аватар пользователя NightL NightL 26 октября 2011 в 13:09

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

Аватар пользователя NightL NightL 26 октября 2011 в 15:22

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

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

Аватар пользователя NightL NightL 26 октября 2011 в 16:52

<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;
   }
}
?>

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

Аватар пользователя Shok211 Shok211 26 октября 2011 в 17:24

<?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;
}

}
?>