[Решено] Выводить в пути анонсы материалов, если аргумента нет

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

Аватар пользователя Айдар Айдар 27 декабря 2011 в 14:01

о/

Что требуется:
1. выводить ноды с урлом 'news/?ID=nid' (именно с такими символами)
2. чтобы при этом по урлу 'news' отображался список анонсов всех этих нод

Что сделано:
1. Созданы 2 вьюхи:
1.1. с аргументом Node: nid → Provide default argument → PHP-код
в коде следующее:

<?php
if($_GET['ID']) return $_GET['ID']; else {
views_embed_view('dfj''page_1');
}
?>

→ Action to take if argument does not validate: Display empty text.
1.2. Вторая вьюха как раз и есть 'dfj', 'page_1' с урлом у страницы 'news'

В чем трабла:
1. Вторая вьюха не ембедится - отображается пустой текст, а если в Action to take if argument does not validate выставить 404, то так и будет отдавать.
2. Попробовал сделать такую страницу через hook_menu, но поведение такое же, как в п.1 - видимо, вьюха приоритетнее.

Вопросы:
1. Как все же заставить эмбеддиться вьюху?
2. Может есть какой вариант подставить после оператора else, чтобы ничего не делало?

И, пожалуйста, не спрашивайте, нахрена мне все это! Smile

Комментарии

Аватар пользователя Айдар Айдар 27 декабря 2011 в 17:52

Как раз, предвидя Ваш совет, попробовал так сделать - но тогда по пути news/?ID=nid отдает ту самую вторую вьюху (что неудивительно, т.к. вьюха та перехватывает все адерса 'news*'), а первая вьюха с аргументом, видимо, выглядит наподобие 'news/%?ID=nid' - но там уже nginx отдает 400 ошибку.

Аватар пользователя ydv ydv 27 декабря 2011 в 18:06

затупил я тут)) не будет так работать конечно, голова уже не варит сегодня))
единственное что приходит сразу так в голову это оставить одну views по адресу news, и в ее шаблоне проверять если есть $_GET['ID'], то загружать view которая с аргументом по id, а если нет ничего в $_GET, то показывать анонсы

Аватар пользователя Айдар Айдар 27 декабря 2011 в 18:44

И снова Вы читаете мои мысли! Smile

Как раз пытаюсь составить правильный синтаксис (жалко, что я не прогер).

UPD: Или также просто прописать <?php if($_GET['ID']) return $_GET['ID']; ?>

Аватар пользователя ydv ydv 27 декабря 2011 в 18:55

нужно в переопределенном шаблоне view просто написать
<?php
if(!$_GET['ID']){
print views_embed_view('view_name', $display_id = 'default', $arg);
}
elseif($_GET['ID']):?>
тут все что в шаблоне валяется
<?php endif;?>

как-то так

Аватар пользователя Айдар Айдар 27 декабря 2011 в 18:59

Спасибо! сейчас попробую.

Единственное что, в PHP-коде фильтра у меня почему-то не пошел такой код:

<?php
if($_GET['ID'])
return 
$_GET['ID'];
else {
views_embed_view('my_view''page_1');
}
?>
Аватар пользователя Айдар Айдар 27 декабря 2011 в 21:28

Код писал прямо в аргумент: Node: nid → Provide default argument → PHP-код

Ура! Огромное Спасибо! Код в шаблоне сработал - теперь все как нужно (в первой строке только двоеточие добавил).
Только все равно не понял, чем отличается шаблон от прописывания прямо в аргументе и от хук_меню...