Доброго времени суток всем!
Меня только что пронзила гениальная мысль.
Все факты я знал и до этого, но как только они сложились в одну картину я чуть не подпрыгнул на стуле.
факты
- любой вид можно экспортировать
- делается это через через специальный массив $view что то типа:
<?php
$view = new stdClass();
$view->name = 'gallery';
$view->description = '';
$view->access = array (
); ?>
- у вида есть спец. поле "argument handling code"
- в этом поле можно например задавать аргументы поумолчанию и много другого
- массив $view доступен для манипулирования в поле "argument handling code"
- вот тут меня прошибло
Фактически это значит что ЛЮБЫЕ параметры вида, начиная от названия и кончая сортировкой можно менять в зависимости от аргументов.
Вот тут хорошая схема массива $view : http://www.flickr.com/photo_zoom.gne?id=511817875&size=o
пример
Имеем вид, который отображает ноды какой либо категории. В качестве аргумента передается Term ID.
Будем менять заголовок страницы вида и делать его именем категории.
<?php
$ter=taxonomy_get_term($args[0]);
$view->page_title= $ter->name;
if (empty($view->page_title)) {
$view->page_title = 'gallery';
}
?>
Комментарии
Тема меня интересует, но я сомневаюсь, что понял, а значит - В закладки. Утро вечера мудренее...
я тоже не понял. и мне очень стыдно.
Т.е. мы отказываемся от "услуг" Views UI и делаем изменения $view программно.
Нет, я не призываю отказываться от Views UI. Более того в 90% случаев пользовательского интерфейса вполне достаточно. Програмное изменение $view позволяет покрыть оставшиеся 10%.
Ну например сделать вид с изменяющимся набором полей методами Views UI нельзя.
Что-то мне сомнительно, что это удобно и работать будет. При пересохранении же всё затрётся, разве нет? Причём заголовок страницы можно делать и стандартным GUI. Не испытывал, но на вскидку сомнительно и игра не стоит свеч и не факт, что будет работать
Вполне себе работает. При пересохранении ничего не затирается. Насчет смены заголовка думаю, что автор привел его как самый простой пример. Этот метод можно использовать для более сложных вещей (добавлять/убирать поля в зависимости от аргументов, возможно для любой другой динамики, которую не дает views ui).
"Фактически это значит что ЛЮБЫЕ параметры вида, начиная от названия и кончая сортировкой можно менять в зависимости от аргументов."
К сожелению нельзя поменять количество нод на страницу - не работает т.к. этот код срабатывает где-то раньше, чем аргументы.
Ну нет, не согласен, все должно работать.
Я так представляю работу views (по логике):
1. из адресной строки собираются аргументы
2. происходит билд объекта $view из заданных в форме параметров.
3. обработка кода для аргументов. изменение свойств объекта $view
4. сборка запроса к базе
5. запрос и выдача результата.
А ты попробуй - не получится
странно почему не в подшивке
Я недавно проглядывал старые записи на drupal.ru и как оказалось, эта мысль не оригинальна. Все это уже было, но только в частных конкретных решениях. Общую идею никто не высказывал.
Вот тут http://drupal.ru/node/2943 , например, происходит установка фильтра (конец статьи):
<?php
foreach($view->filter as $num => $item )
if($item['id'] === 'term_node_1.tid')
$view->filter[$num]['value'][0]=$tid->tid;
?>
а еще смена сортировки в зависимости от аргументов:
<?php
$view->query = $view->countquery = "";
foreach($view->field as $num => $item )
if($item['id'] == 'node.title')
$view->field[$num]['defaultsort']=arg(2);// второй аргумент: ASC или DESC
foreach($view->filter as $num => $item )
if($item['id'] == 'term_node.tid')
$view->filter[$num]['value'][0]=arg(1); // первый аргумент (номер терма)
?>
Простите, что поднимаю столь старую тему, но праздничная логика подсказывает, что тема близка к моему вопросу.
Дано:
-Вьювс (пусть путь к ней будет /myrka/)
--Аргумент id термина словаря
Например идем по адресу /myrka/50/ и видим что-то (в принципе не важно что именно). Если ввести /myrka/50/sharik (где sharik - нечто зарание не известное) то получиться тоже самое, а хочиться вывести "sharik" на страницу.
Вероятно можно в *.tpl.php написать пару строк php для этого? только какие именно?