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

Пакет breadcrumb - это упражнение на написание адаптеров и их
рекурсивный вызов, аналогичное absolute_url. Собственно, его
лучше всего и взять за основу.

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

Пакет предоставляет неймспейс::

    ++breadcrumb++ <ИМЯ ИНТЕРФЕЙСА>
    
возвращающий интерфейс-иттератор IBreadCrumbList [name:неизвестно как].
Элементами этого иттератор являются объекты, собранные рекурсивным
подъемам по атрибуту __parent__. Во время рекурсивного подъема
интерфейс все время проверяется на возможность адаптирования к интерфейсу
IBreadcrumb, и в результирующем списке на каждом шаге содержится
объекты, адаптированные к этому интерфейсу.

Если объект нельзя адаптировать - он пропускаетя.

Рекурсия прекращается на вершине иерархии (объект IRoot [name:неизвестно как]),
или при достижении объекта с интерфейсом IBreadCrumbStop.

Используя этот неймспейс, можно сделать цикл, например следующим способом::

    <tal:content repeat="item context/++breadcrumb++ng.neuralskin.IBreadCrumb">
        <a tal:attributes="href item/url" tal:content="item/title"/>
    </tal:content>

Отличия от базовой реализации        
-----------------------------  

    1.  В список включаются только объекты, у которых есть интерфейс IBreadCrumb (или
        их можно адаптировать к нему);
    
    2.  Список заканчивается на объекте, у которого есть интерфейс IBreadCrumbStop (обратный траверс
        при этом вполне может продолжатся дальше);
    
    3.  Интерфейс IBreadCrumb включает в себя title и другие необходимые для построения
        breadcrumb фишки;

Дополнительное требование
-------------------------
  
Построить пакет так, что бы на его
основе можно было легко реализовать
тоже самое, но основе стека траверса.

Виды
----

В этом продукте нет видов.


Названия компонент
------------------

BreadCrumbNamespace
    Адаптер пространства имен
    
BreadCrumbAdapterBase
    Это он понял.    
    
Contained2BreadCrumbAdapter
    Адаптер IContained к IBreadCrumb  (Испсользовать IAbsoluteUrl для получения  URL и IAnyTitle для получения
    названия).
    
Site2BreadCrumbAdapter
    Адаптер остановки (по достижению ISite и IBreadCrumbStop)
    
        
        
    