ezpublish.ru / Форумы / Для новичков / Проблема с fetch




Проблема с fetch

Для доступа к форумам необходимо авторизоваться. Это можно сделать здесь

Автор Сообщение

Петр Васильев

Вт, 28 сентября 2010 14:14:50

Пытаюсь отобразить внутри шаблона некий класс, с неким видом. Делаю так:

{def $news_main=fetch( 'content', 'class', hash( 'class_id', 'news', 'limit', 5 ) )}
{node_view_gui view=embed content_node=$news_main}

Однако все что выводится, так это просто надпись news.
Привожу также шаблон для embed view:
<div><a href="{$node.url_alias|ezurl}">{if $node.data_map.image.has_content}{attribute_view_gui attribute=$node.data_map.image image_class=misc}{/if}<p>{$node.data_map.title.content|wash()}</p></a></div>

Что я делаю не так?

Сергей Гедеон

Чт, 30 сентября 2010 5:52:56

embed view используется для вывода объектов, а не нод. То есть можно сделать и для нод, но в оверрайд.ини указано именно замещение для объектов. Поэтому у вас выводится стандартный вью /node/view/embed.tpl (или посмотрите в дебаге список шаблонов)

лучше используйте оператор {content_view_gui} вместо {node_view_gui} и передавайте ему как атрибут не ноду, а объект (например, $my_node.object). Тогда должен использоваться шаблон override/templates/embed/имя_шаблона.tpl который прописан (или должен быть прописан в override.ini)

Для таких вью как line или full (или listitem и т.п) используется как правило {node_view_gui}, а для "эмбедов" - {content_view_gui} (хотя можно настроить как вам удобно или необходимо). Ибо эмбед используется также для вставки объектов в контент в редакторе

===----
Радоваться жизни можно тихо...
----====

Петр Васильев

Пт, 1 октября 2010 17:11:51

Попробовал так:

{def $news_main=fetch( 'content', 'class', hash( 'class_id', 'news' ) )}
{content_view_gui view=embed content_object=$news_main.object}

выдает пустоту.

Попробовал также с node_view_gui использовать line view, так debug пишет, что используется шаблон 'design/standard/templates/node/view/line.tpl', хотя замещающий я в override.ini.append.php прописал

Сергей Гедеон

Сб, 2 октября 2010 7:28:26

А почему вы класс фетчите? Нужно именно объект с описанием класса получить или ноду/список нод данного класса?

===----
Радоваться жизни можно тихо...
----====

Петр Васильев

Сб, 2 октября 2010 21:24:37

Просто хотел последние 5 новостей отобразить. Думал будет проще отфетчить класс, хотя можно и по узлу - все-равно все новости будут внутри одной ноды.

Сергей Гедеон

Вс, 3 октября 2010 13:48:08

Фетч content/class возвращает не массив нод одного класса, а объект самого класса (ну там список аттрибутов, переводы и т.п.).
Для того чтобы получить все ноды какого-то класса нужно использовать фильтр по классу фетча соntent/list:

 {def $my_nodes = fetch( 'content', 'list', hash( 'parent_node_id', 2,
                                                  'limit', 5,
                                                  'class_filter_type', 'include',
                                                  'class_filter_array', array( 'news' ),
                                                  'depth', 3 ) )}

Фетч из данного примера вернет 5 новостей (объектов класса news) расположенных не глубже третьего уровня относительно корневой ноды (id=2)

===----
Радоваться жизни можно тихо...
----====