Краткое описание пакета ng.skin.base
====================================

Пакет разработан как основа декоративного скина, используемого в
[keyword:CMS DreamBot] [name:ng.site.content]. Скин изготовлен по сложной
технологии, позволяющий отобразить любой объект в соответствии с
предоставляемыми им интерфейсами.

Кроме того, скин предоставляет ряд стандартных навигаторов и информеров,
которые легко настраиваются (если знать как, разумеется, см. исходный код).

Использование
-------------

В настоящее время **ng.skin.base** нельзя использовать самостоятельно, нужно
создавать свой скин на его основе. Это не так трудно, как может
показаться, и в качестве примера упомянем три скина, созданные на его
основе, это [name:ng.skin.dreambot], [name:ng.skin.eaglenest],
[name:ng.skin.zopelada]. Все эти скины являются скинами некоторых сайтов и
требуют некоторых специальных настроек сайтов, сделанных на основе
[name:ng.site.content], без которых первая страница этих скинов не будет видна.

Более того, эти скины запрещено использовать кроме как для ознакомления:
все-таки на них сделаны реальные сайты настоящих парней.

Регистрация своего скина
........................

Для регистрации своего скина нужно придумать имя, например 
my, создать интерфейс, например так::

    from ng.skin.base.interfaces import NGBaseSkin

    class MySkin(NGBaseSkin):
        """Skin for My Ru"""

Интерфейс нужно зарегистрировать как скин::

	<interface
    interface=".interfaces.MySkin"
    type="zope.publisher.interfaces.browser.IBrowserSkinType"
    name="my"
    />

Теперь его можно вызвать в *url* как **++skin++my**, например::

    https://localhost:8080/++skin++my/My
    
Подразумевается, что сайт создан как компонент с именем *My*.


Создания файла темплейта
........................

Темлейт содержит оформление сайта и макросы, вызываемые **ng.skin.base**. В
качестве примера лучше изучить **maintemplate.pt**, а регистрация темплейта
выглядет так::

 <browser:page
    for="*"
    name="ng_skin_macros"
    permission="zope.View"
    layer=".interfaces.MySkin"
    template="maintemplate.pt"
    /> 

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

Создание файла скелета
......................

К сожалению, таблицы стилей устроены таким образом, что отображения сайта
зависит от порядка элементов в нем. Это может стать проблемой при попытке
сделать разные сайты из одного **maintemplate.pt**. К счастью, есть простое
решение: создать фиктивный шаблон страницы, вместо maintemplate.pt, на
котором все макросы вызваны в правильном порядке.

Специально для этой цели существует файл **skeleton.pt**, который
регистрируется следующим образом::

  <browser:page
    for="*"
    name="skin_macros"
    permission="zope.View"
    layer=".interfaces.MySkin"
    template="skeleton.pt"
    />

Обращения к нему производятся стандартным образом, т.е. как к
**skin_macros**, пример лучше посмотреть в [name:ng.skin.dreambot].

Создание таблицы стилей
.......................

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

    style.css 
        Собственно стиль.
        
    style_ie.css 
        Стиль страницы для интернет-эксплорера. Должен быть вызван особым 
        образом (см. примеры).               


    style_text.css
        Стиль оформления текста по умолчанию (т.е. тегов без стиля, часто
        встречается в результате использования [keyword:ST] и других систем
        автоматической разметки;

    style_print.css
        Стиль для печатающих устройств;
        
    style_mobile.css
        Стиль для мобильных устройств (не очень актуален, так как
        современные мобильные устройства стилизуют страницу под себя сами,
        надо сказать - довольно интеллектуально;
        
Все стили регистрируются как обычные ресурсы:

  <browser:resource
    name="style.css"
    file="style.css"
    layer=".interfaces.MySkin"
    />
        
На сегодняшний день наиболее прогрессивной является верстка на div'ах, в
противоположенность табличной верстке. Здесь, однако, не будет учебника по
верстке, хотя изложенный выше рекомендации даны именно для этого случая.

Создание ресурсов
.................

Ресурсы - это различные картинки (логотипы, например) и прочие элементы
оформления. Их регистрация оформляется также, как и регистрация стиля.

Поддержка модулей расширения
............................

Сайт [name:ng.site.content] имеет два модуля расширения:
[name:ng.site.addon.remotefs] и [name:ng.site.addon.rubricator]. Для
нормальной работы модулей расширения скин должен быть установлен с
включенной поддержкой этих модулей, что достигается установкой конфигов:

    etc/ng.skin.base-remotefs-configure.zcml
        Для поддержки [name:ng.site.addon.remotefs]

    etc/ng.skin.base-rubricator-configure.zcml
        Для поддержки [name:ng.site.addon.rubricator]
        
Включение поддержки возможно, если модули расширения уже установлены. После
включенния поддержки станут доступны дополнительные страницы скина для
работы с расширениями.

Заключение
----------

К сожалению, в настоящее время у базового скина нет собственного,
некоммерческого и свободно-распространяемого дизайна. Это будет
исправлено в ближайшем будущем, а до тех пор размер документации
ограничен этим кратким изложением.
