ezpublish.ru / Форумы / Для новичков / Дерево пути




Дерево пути

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

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

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

Вт, 3 августа 2010 20:39:42

В ezwebin и plain_site по разному реализовано дерево пути. В обоих случаях код генерации пути расположен в pagelayout, однако в случае с plain_site дерево отображается на всех узлах, а в ezwebin только на некоторых. Привожу соответствующие коды.

Plain_site:

{section name=Path loop=$module_result.path}
{if $Path:item.url}
{if is_set($Path:item.url_alias)}
<a href={$Path:item.url_alias|ezurl}>{$Path:item.text|wash}</a> /
{else}
<a href={$Path:item.url|ezurl}>{$Path:item.text|wash}</a> /
{/if}
{else}
{$Path:item.text|wash}
{/if}
{section-else}
{/section}


Ezwebin:

{foreach $pagedata.path_array as $path}
{if $path.url}
<a href={cond( is_set( $path.url_alias ), $path.url_alias,
$path.url )|ezurl}>{$path.text|wash}</a>
{else}
<span class="path-text">{$path.text|wash}</span>
{/if}
{delimiter}<span class="path-separator">/</span>{/delimiter}
{/foreach}

Правильно ли я понимаю, что в коде из ezwebin путь генерируется только для узлов, адреса которых хранятся в массиве path_array?(не бейте ногами - я не программист)

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

Ср, 4 августа 2010 5:22:53

Да, в ezwebin вычисление массива path_array вынесено в php-модуль и вызывается через оператор ezpagedata(). Так же в объекте, возвращаемом этим оператором есть атрибут show_path который указывает в шаблоне нужно ли выводить path

В любом случае массив path который обрабатывается в старом шаблоне есть всегда Просто вебиновский вариант наверное быстрее, понятней и удобней для разработчиков.

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

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

Ср, 4 августа 2010 12:19:52

А можно ли как-то реализовать в plain_site то же самое что и в ezwebin без подключения всего расширения? Ну может просто просто функция в шаблоне какая-то, которая будет разрешать вывод пути для каких-то узлов.

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

Ср, 4 августа 2010 15:27:00

Чтобы все было как в вебине нужен оператор ezpagedata(), а он реализован только в вебине и вытаскивать его оттуда это не оптимальное решение
Поставьте правильно задачу - какие именно узлы не надо отображать. Может все решается двумя-тремя if-ами

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

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

Вс, 12 сентября 2010 16:17:09

Путь необходимо отображать на одном из узлов, и всех его дочерних узлах, а на всех остальных - нет.

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

Пн, 13 сентября 2010 5:32:28

Тогда решение довольно простое - поставить один {if}...{/if} с содержанием типа:

{if имя_массива_пути|contains(номер_нужной_ноды)}
    <код подключения бредкрамбсов>
{/if}


имя_массива_пути - стандартный массив с номерами нод текущего дерева. К сожалению нет под руками ez поэтому не помню точно как он называется... по-моему это какая-то переменная в module_result
номер_нужной_ноды - id ноды в которой (и в дочерних которой) нужно отображать бредкрамбсы

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

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

Пн, 27 сентября 2010 16:38:42

Делаю так:

{if $module_result.uri|contains(61)}

Не работает

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

Чт, 30 сентября 2010 5:29:57

Надо не uri проверять, а что-то типа path, path_array (не помню)
выведите где-то маленький дебаг {$module_result|attribute('show',3)} вывести - там будет видно где номера нод сохраняются

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

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

Пт, 1 октября 2010 17:19:23

Нашел, спасибо. Хранится в path.1