Два вопроса почти одновременно родилось в голове
Есть блок - в настройках видимости можно отметить:
Показывать на всех страницах, кроме перечисленных.
Показывать только на перечисленных страницах.
Хотелось бы совместить это, то есть выбрать скажем показывать на страницах
menu/*
но не показывать
menu/tag/*
Для этого существует
Показать, если данный PHP-код возвращает TRUE
Но самостоятельно набросать код увы, помогите, пожалуйста
И второй небольшой вопрос про аргументы с примерно той же задачей:
Есть блок (views) какие аргументы с настройками необходимы, чтобы блок выводился на полной странице, но не выводился на страницах таксономии (анонсов)?
Спасибо
Комментарии
что то вроде
<?php
// Массив страниц на которых мы будем видеть блок
$access_page = array(
'menu',
);
// Получаем путь. Убираем слешы
$path = trim($_GET["q"], '/');
// Проверяем если есть елемент совпадающий с путем значи показываем блок
if(in_array($path, $access_page))
return TRUE;
?>
Можно поробывать что то вроде этого
А можно модуль какой ни будь найти уверен на 100%
Увы оно не заработало
Ошибки, Пустой экран, На до липисать <?php ?> посмотрите ?
Забыл, что в блоке <?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;
}
}
?>
Но результат ровно такой же... блок показывается везде
<?php
// Добавьте строчку
global $_GET;
// Массив страниц на которых мы будем видеть блок
$access_page = array(
'menu',
);
// Получаем путь. Убираем слешы
$path = trim($_GET["q"], '/');
// Проверяем если есть елемент совпадающий с путем значи показываем блок
if(in_array($path, $access_page))
return TRUE;
?>
Добавьте глобальную переменную сверху
увы блок точно так же выводится везде
На Drupal 6 Проверял на 2 сайтах если массив оставлять пустым то блок не выводится не где, если добавлять адреса то показывается только по ним
То есть где-то у меня не то? Странно... блок создает views и уже в настройках блока вывод
Показать, если данный PHP-код возвращает TRUE
Правильным будет если вы не возвращаете в блоке ничего то ничего и не выводиться. Экспериментируйте с другими блоками. прим. <?php return FALSE; ?> - должно вернуть пустой блок
<?php
return drupal_match_path($_GET['q'], 'menu/*') && !drupal_match_path($_GET['q'], 'menu/tag/*');
?>
Во вьюхе нет настройки видимости блоков. Поясните что имеете ввиду.
Увы код не работает, блок не выводится. Как бы его подправить? Во views нет они есть настройках видимости блоков, а про views речь, что быть может там можно было настроить аргументы, по которым бы блок выводился аналогично при использовании php в области видимости блока, но чую там так же нужно использовать php в аргументах
Попробуй модуль Context.
Context?
Судя по описанию видимо гибкое решение, но сильно избыточное в моем случае
Странно почему я подумал что в блоке надо писать без <?php ?>
без этого таки код не работает, а код полностью рабочий
Shok211 увы как ни крутил я, но ваш код у меня по каким-то причинам не заработал, блок с ним не выводится ни где. В любом случае огромное спасибо, что откликнулись
Мысль в слух Интересный был бы модуль, который бы интерпретировал простые задачи вывода блока типа (node/*) в php код с множественными условиями. Есть даже похожий модуль в плане идеи для хлебных крошек, названия только не помню
menu/tag/* - это синоним?
да, это синоним, уточню еще разок, как хотелось бы
menu/* - показываем
menu/tag/* - не показываем
Именно поэтому и не работают сниппеты, которые вам предлагают. Напишите урлы, которые стоят за этими синонимами.
За menu стоит taxonomy/term/104/all
За menu/tag ничего не стоит туда добавляются термины с алиасами menu/tag/*
А у материала проставляются алиасы menu/*
<?php
return drupal_match_path($_GET['q'], 'taxonomy/term/*/all') && !drupal_match_path($_GET['q'], 'menu/tag/*');
?>
Код работает, но не совсем так: выводится блок во всех терминах (taxonomy/term/*/all) не выводится на страницах полных нод с алиасом «menu/*»
Подобный вопрос нашел у http://xandeadx.ru/blog/drupal/360 но там больше про 7-ку, хотя насколько я понял отличия между 7-кой и 6-кой только в одной строчке, увы не ничего заработало
Может проще было 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;
}
}
?>
но это сильно частный случай, а хотелось бы общий инструмент для более сложных задач
<?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;
}
}
?>