Personal tools
You are here: Home Новости zc.shortcut 1.0 - Симлинки для Zope3
Document Actions

zc.shortcut 1.0 - Симлинки для Zope3

by cray last modified 2006-12-19 18:10

Юниксоиды очень хорошо знают, что такое симлинк, и очень любят их использовать. Вот и в Zope3 появились симлинки :). В принципе, и раньше никто не мешал делать что-то подобное, но все-таки появление специального продукта - это ощутимый шаг вперед.

Комментарии:

Подробно почитать об этом продукте можно здесь: zc.shortcut, где написано много слов про особенности реализации и применения этого продукта.

Продукт zc.shortcut позволяет создать в Zope3 объект, который при просмотре сайта выглядит точно так же, как некий другой объект, который будем называть "целевой" (target) объект.

Возможности применения:

Использование различного рода ссылок позволяет строить рубрикаторы и подобные им решения, в которых объект появляется более чем в одном месте. Такой подход является разумной альтернативой построению "индексов" или использованию поискового каталога, для реализации аналогичного множественного вложения объектов, но требующих для своего обслуживания специальных страниц просмотра и навигации.

Реализация ссылок, используемая в zc.shortcut - одна из наилучших с точки зрения такого применения: за исключением небольших особенностей, ссылка при навигации действительно практически не отличима от самого объекта и не требует дополнительной разработки специальных страниц.

Способ реализации:

Реализация ссылок основана на перекрытии стандартного траверсера: при траверсе объекта с интерфейсом IShortcut, возвращается специальный прокси вокруг целевого объекта, который позволяет выполнить дальнейший траверс так, как будто это траверс целевого объекта.

Недостатки и способы их решения:

Объекты Zope3 с интерфейсом ILocation содержат атрибут __parent__, указывающий на объект, в который они вложены. Благодаря этому атрибуту выполняются различные операции, связанные с поиском контекста объекта. В случае ссылки, место, куда вложена ссылка, и место, куда вложен целевой объект, будут различаться, поэтому использование обычных инструментов может приводить к странным результатам.

Наиболее заметны некорректности в поведении absoluteURL, breadcrumbs и фабрик объектов. Для их преодоления предлагается использовать атрибуты __traversed_parent__ и __traversed_name__, создаваемые в прокси при траверсе ссылки, и созданные на этой основе аналоги упомянутых инструментов: traversedURL и другие.

На сегодняшний день это означает, что при работе с ссылками в ZMI, наблюдаются некоторые незначительные странности в поведении (к которым можно адаптироваться, если знать, почему они происходят), а разработчики, использующие zc.shortcut в своих проектах, должны реализовывать собственные скины, выполнив вышеуказанную замену инструментов.

Как это попробовать:

Продукт zc.shortcut не содержит форм добавления ссылок, поэтому придется либо написать такую форму, либо перезапустив Zope3 в режиме отладки (debugzope) ввести несколько строк в командной строке:

        >>> import transaction
        >>> txn=transaction.get()
        >>> from zc.shortcut import Shortcut
        >>> zc=app.root()['zctest']
        >>> zc['LN']['t']=Shortcut(zc['TargetT'])
        >>> txn.commit()

(Предполагается, что объекты zctest, zctest/LN и zctest/TargetT были созданы через ZMI).

Заключение:

В файле TODO продукта zc.shortcut заявлено о приостановке использования shortcut's до окончания разработке traversedURL и т.п. :), но можно надеяться на светлое будущее этого продукта, который, как уже говорилось выше, является наилучшей известной реализацией ссылок в Zope3.

Знакомство с исходными текстами zc.shortcut рекомендуется всем разработчикам, которые хотят лучше понять идеологию Zope3 и решения, используемые в нем.


Powered by Plone CMS, the Open Source Content Management System



Интернет магазин BestAlco: шампанское моэт шандон , виски гленфиддик , коньяк фрапен. абузоустойчивый хостинг хостинг. Вся правда о управляющей компании! ВТБ пиф в Екатеринбурге. Узнайте больше о управляющей компании.