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

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

Комментарии

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

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

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

27 декабря 2011 в 18:06

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

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

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

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

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

как-то так

27 декабря 2011 в 18:55

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

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

<?php
if($_GET['ID'])
return 
$_GET['ID'];
else {
views_embed_view('my_view''page_1');
}
?>
27 декабря 2011 в 18:59

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

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

27 декабря 2011 в 21:28