Краткое описание пакета
=======================

Пакет разработан как бибилиотека небольших адаптеров для разных темных
целей. 

Адаптер mtime
-------------

Адаптер mtime предназначен для получения врмемени модификации объекта.
Время модификации определяются на уровне IPersistent, что является
достаточно точным способом. Хотя, с временем модификации не обошлось без
уловок.

Адаптер адаптирует интерфейс IPersistent к IMTime, состав интерфейса
IMTime:

    mtime 
        Время последней модификации объекта

Адаптер path
------------

Предназначен для получения пути от корневого объекта Zope до текущего.
Адаптирует любые объекты к интерфейсу IPath, в состав которого входят
следующие свойства:

    path
        Путь из имён (__name__) от корневого объекта до текущего

    titledpath
        Путь из названий (title) объектов от корневого до текущего

Для получения значений свойства title используется адаптер title.

Адаптер title
-------------

Предназначен для получения свойства title любого объекта. Адаптирует любой
объект к интерфейсу ITitle, в состав которого входят следующие свойства:

    title
        Название объекта

Если свойства нет в
явном виде, вместо него возвращается свойство title объекта, приведённого к
интерфейсу IZopeDublinCore. Если привести объект к IZopeDublinCore невозможно,
возвращается свойство __name__ объекта либо имя класса, экземпляром которого
является объект.


Адаптер nsinterface
-------------------
   
Определяется пространство имен nsinterface, позволяя приводить
текущий объект к нужному интерфейсу. Пример использования::

    <tal:block define="path context/++nsinterface++ng.adapter.IPath/path">
    
    </tal:block>
    
Применяется, в основном, в отладочных целях.

Адаптер namechooser
-------------------

Активация адаптера для контейнера позволяет выбрать в качестве названия
создаваемого объекта название, полученное от адаптера IDocTitle. Активация
адаптера производится присвоением контейнера интерфейса
ng.adapter.interfaces.INameChooserAble.

Адаптер pager
-------------

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

Продукт вклчает в себя готовые адаптеры от компонент и интерфейсами
IContainer, IOrderedContainer, а также ResultSet, возвращаемым Catalog'ом.
Так как ResultSet никакого интерфейса не предоставляет, то в последнем
случае приходится делать прямой вызов адаптера.


Список методов IPager
.....................

    setPagerParameters(revert=None, orphan=None,size=None)
        Установить параметры пейджера, в том числе:
        
        revert
            Отображать в обратную сторону;
            
        orphan
            Допустимое перекрытие страниц;            
         
       size 
            Длина страницы;
         
    have_before
        Истинно, если есть страница до текущей;

    befores
        Список ключей, с которых начинаются страницы до тккущей;
        
    beforeURLs
        Список URL'ов страниц до текущей;

    before
        Предыдущая страница;

    beforeURL = Field()
        URL предыдущей страницы;

    chunk
        Список компонент отображаемых на текущей странице;

    after
        Ключ первого элементы следующей страницы;
        
    afterURL
        URL следующей страницы;
        
    afters 
        Список ключей первых элемнтов следующих страниц;

    afterURLs
        Список URL'ов следующих страниц;

    have_after
        Истинно, если есть следующая страница;

    len 
        Общее количество элементов в списке;
        
Пример кода::

  <tal:block tal:condition="python:len(context) > 0">
    <table cellspacing="0" cellpadding="3" bgcolor="#CCDDFF" width="100%" border="1" bordercolor="black" bordercolordark="#CCDDFF">
	    <tr><td>
		    <p class="docttl">Вложенные материалы
		</td></tr>
			
		<tal:block define="pager context/@@pager">
		<tal:block define="q python:pager.setPagerParameters(revert=True)"/>
			
		<tr tal:condition="pager/have_before"><td align="left">
			    <a href="" tal:attributes="href pager/beforeURL"> &lt;&lt;&lt;&lt;&lt;&lt;</a>
			  <tal:block repeat="item python:zip(range(1,10),pager.beforeURLs)">
			    [<a href="" tal:attributes="href python:item[1]" tal:content="python:item[0]"/>]
              </tal:block>			    
	    </td></tr>
			
		<div tal:repeat="item pager/chunk">
		    tal:block tal:on-error="structure python:'<tr><td>'+item.__name__+'</td></tr>'" tal:content="structure item/@@short"/>
		</div>

		<tr tal:condition="pager/have_after"><td align="right">
		    <tal:block repeat="item python:zip(range(1,10),pager.afterURLs)">
			    [<a href="" tal:attributes="href python:item[1]" tal:content="python:item[0]"/>]
            </tal:block>			    
			<a href="" tal:attributes="href pager/afterURL">  &gt;&gt;&gt;&gt;&gt; </a>
	    </td></tr>
      </tal:block>
			
    </table>

  </tal:block>


            





