Проба пера или первый мой модуль по Drupal 7

Вот и вышел долгожданный релиз Drupal 7. В целом продукт мне понравился, и для того, что бы получше изучить новое АПИ я решил постепенно перевести написанные мной модули под новую платформу. Первой ласточкой стал один из элементов модуля ccfilter – collapse text. Но, что бы было поинтересней, я не просто перевел его под D7, но и несколько расширил функциональность.

Новый модуль ccfcollpase позволяет встраивать при помощи специальных тэгов (аля BBCode) в материалы сворачиваемый/разворачиваемый текст.
По сравнению с версией для D6, данный фильтр позволяет вставлять вложенные элементы, кроме того предусмотрен блок врапера, который позволяет разворачивать/сворачивать все элементы находящиеся внутри данного врапера. Также можно установить с помощью дополнительных атрибутов индивидуально для каждого слайдера некоторые параметры поведения, как то скорость сворачивания/разворачивания и метод сворачивания/разворачивания (пока доступны три метода slide, fade, slidefade).

В дальнейшем данный фильтр будет использован как один из составляющих элементов ccfilter под D7.

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

Общий синтаксис:

/** * Структура обработки фильтра: * в треугольные скобки помещены не обязательные синтаксические конструкции * одинарные кавычки в параметрах обязательны, порядок параметров произвольный * ******************************************************************************* * <[сollapse-wrapper <hide|show> <title-show='Expand All' title-hide='Collapse all'>]> * [сollapse <attributes>] * <материал внутри слайдера> * <[сollapse <attributes>]> * <материал внутри вложенного слайдера> * <[/сollapse]> * <продолжение материала внутри слайдера> * [/сollapse] * <[/сollapse-wrapper]> ******************************************************************************* * опциональные атрибуты задают режим работы слайдера * если аттрибуты не установлены, то беруться предустановленные параметы в настройках фильтра * attributes = * <hide|collapsed|show|expanded> - определяют как будет выглядить слайдер * при загрузки страницы hide или collapsed - свернутый слайдер, * show или expanded - развернутый слайдер * <title-show='Expand'> - определяет префикс заголовка для разворачивания слайдера * <title-hide='Collapse'> - определяет префикс заголовка для сворачивания слайдера * <title=''> определяет постфикс заголовка слайдера * например для комбинации title-show='Показать' title-hide='Скрыть' title='материал' * для развернутого слайдера будет сформирован заголовок - Показать материал * и при сворачивании он будет меняться на - Скрыть материал * <speed-show='slow|fast'> <speed-hide='slow|fast'> - скорость разворачивания и * соответственно сворачивания слайдера, кроме значений slow и fast можно указать * число миллисекунд * <method-show='Slide|Fade|SlideFade'> - метод анимации при разворачивании * <method-hide='Slide|Fade|SlideFade'> - метод анимации при сворачивании * * [сollapse-wrapper <show|hide> <title-show='Expand All' title-hide='Collapse all'>] * ......- * [/сollapse-wrapper] * определяет контейнер для нескольких слайдеров, и добавляет ссылку c возможностью * развернуть или свернуть все слайдеры внутри контейнера * атрибут show hide - определяет начальное значение обработчика враппера */

Если атрибуты не проставлены (а все они необязательны), то их значения берутся из предопределенных значений определенных в настройке фильтра.
В атрибутах имеющих значение – обязательны одинарные кавычки.
Порядок и наличие атрибутов произвольный, если какой либо из атрибутов не определен, то его значение берется из предопределенного в настройках фильтра .
Значения по умолчанию:
title-show=t(’show’)
title-hide=t(’hide’)
title=”
speed-show=’fast’
speed-hide=’fast’
method-show=’slide’
method-hide=’slide’

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

Полный заголовок формируется как конкатенация префикса (title-show|title-hide) и заголовка (title)
Некорректность (нарушение структуры – парности тэгов) не отслеживается и может привести к непредсказуемым результатам (вплоть до краха верстки), поэтому кажется сомнительный включать данный фильтр в общедоступный формат ввода.

Так как данный сайт (имеется ввиду мой домашний сайт) все еще на D6, для экспериментов и тестирования я создал новый сайтик www.printarts.ru, примеры работы фильтра можно посмотреть на страничке http://www.printarts.ru/article/proverka-raboty-ccfcollapse-filtra

Жду отзывов и багрепортов тестирования данного модуля.

Оригинал материала на сайте www.hotel-prog.ru

Прикрепленный файл Размер ccfcollapse.zip 5.7 кб

Источник: http://drupal.ru/node/56981

Проба пера или мой первый модуль под Drupal 7 (добавлен функционал)

Вот и вышел долгожданный релиз Drupal 7. В целом продукт мне понравился, и для того, что бы получше изучить новое АПИ я решил постепенно перевести написанные мной модули под новую платформу. Первой ласточкой стал один из элементов модуля ccfilter – collapse text. Но, что бы было поинтересней, я не просто перевел его под D7, но и несколько расширил функциональность.

Новый модуль ccfcollpase позволяет встраивать при помощи специальных тэгов (аля BBCode) в материалы сворачиваемый/разворачиваемый текст.
По сравнению с версией для D6, данный фильтр позволяет вставлять вложенные элементы, кроме того предусмотрен блок врапера, который позволяет разворачивать/сворачивать все элементы находящиеся внутри данного врапера. Также можно установить с помощью дополнительных атрибутов индивидуально для каждого сполера некоторые параметры поведения, как то скорость сворачивания/разворачивания и метод сворачивания/разворачивания (пока доступны три метода slide, fade, slidefade).

В дальнейшем данный фильтр будет использован как один из составляющих элементов ccfilter под D7.

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

Общий синтаксис:

/** * Стркутра обрабоки фильтра * в треугольные скобки помещены не обязательные значения (сами они не нужны) * одинарные кавчки в параметрах обязательны, порядок параметров произволный * ******************************************************************************* * <[сollapse-wrapper <hide|show> <title_show='Expand All' title_hide='Collapse all'>]> * [сollapse <attributes>] * <материал внутри сполера> * <[сollapse <attributes>]> * <материал внутри вложенного сполера> * <[/collapse]> * <продолжение материала внутри сполера> * [/сollapse] * <[/сollapse-wrapper]> ******************************************************************************* * опциональные атрибуты задают режим работы сполера * если аттрибуты не установлены, то беруться предустановленные параметы в настройках фильтра * attributes = * <hide|collapsed|show|expanded> - определяют как будет выглядит сполер * при загрузки страницы hide или collapsed - свернутый сполер, * show или expanded - развернутый свернутый сполер * <title-show='Expand'> - определяет префикс заголовка для показа сполера * <title-hide='Collapse'> - определяет префикс заголовка для скрытия сполера * <title=''> определяет постфикс заголовка сполера * например для комбинации title-hide='Скрыть' title-show='Показать' title='материал' * для развернутого сполера будет сформирован заголовок - Скрыть материал * и при сворачивании он будет меняться на - Показать материал * <speed-show='slow|fast'> <speed_hide='slow|fast'> - скорость разворачивания и * соответственно сворачивания сполера, кроме значений slow и fast можно указать * число миллисекунд * <method-show='Slide|Fade|SlideFade'> - метод анимации при разворачивании * <method-hide='Slide|Fade|SlideFade'> - метод анимации при сворачивании * <hode='NumNode'> - содержимое сполера берется из ноды номер NumNode * содержимое создается во время создания текущей ноды и обновляется только в * случае сброса кэша * <ajax-hode='NumNode'> - содержимое сполера берется из ноды номер NumNode * содержимое подгружается через ajax при первом разворачивании сполера (если сполер свернут) * или при первой загрузке строницы (если сполер развернут) * если атрибут title не определен и есть один из атрибутов node или ajax_node, * то в качестве title будет использован заголовок ноды. * Нода в сполер загружается без комментариев и заголовка. * Вывод ноды определен через шаблон 'ccfcollapse-inline-node.tpl.php' * в шаблоне поставляемом с модулем также * скрыты массивы field_tags и links * * [сollapse-wrapper <show|hide> <title-show='Expand All' title-hide='Collapse all'>] * ......- * [/сollapse-wrapper] * определяет контейнер для нескольких сполеров, и добавляет ссылку c возможностью * развернуть или свернуть все сполеры внутри контейнера */

Если атрибуты не проставлены (а все они необязательны), то их значения берутся из предопределенных значений определенных в настройке фильтра.
В атрибутах имеющих значение – обязательны одинарные кавычки.
Порядок и наличие атрибутов произвольный, если какой либо из атрибутов не определен, то его значение берется из предопределенного в настройках фильтра .
Значения по умолчанию:
title-show=t(’show’)
title-hide=t(’hide’)
title=”
speed-show=’fast’
speed-hide=’fast’
method-show=’slide’
method-hide=’slide’

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

Полный заголовок формируется как конкатенация префикса (title-show|title-hide) и заголовка (title)
Некорректность (нарушение структуры – парности тэгов) не отслеживается и может привести к непредсказуемым результатам (вплоть до краха верстки), поэтому кажется сомнительный включать данный фильтр в общедоступный формат ввода.

Так как данный сайт (имеется ввиду мой домашний сайт) все еще на D6, для экспериментов и тестирования я создал новый сайтик www.printarts.ru, примеры работы фильтра можно посмотреть на страничке http://www.printarts.ru/article/proverka-raboty-ccfcollapse-filtra

Жду отзывов и багрепортов тестирования данного модуля.

Оригинал материала на сайте www.hotel-prog.ru


**************************************************************************
Обновил модуль.
**************************************************************************

Добавлен следующий функционал:
1. Два (взаимоисключающих) атрибута node=’N’ и ajax-node=’N’ (если указаны оба то работает node).
Данный атрибут позволяет подгрузить в сполер ноду с номером N (при этом содержимое между тэгами [сollapse][/collapse] не имеет значения, так как будет заменено на содержимое ноды.
Различие этих атрибутов следует из названия, первый (node) формирует материал сполера из ноды во время создания, второй на “лету” посредством подгрузки node через ajax.
У обоих методов есть свои достоинства и недостатки.
Особенности атрибута node:
- Если изменена включаемая нода, то в сполере она не измениться до момента сброса кэша или пересохранения самого материала включающего сполер с данной нодой.
+ Включенный статично материал доступен для индексации поисковиками
+ Более быстрая загрузка сполера
+ При отключенном в браузере js материал виден как статический текст

Особенности атрибута ajax-node:
+ Нода в сполер загружается единожды при первом разворачивании сполера
+ Материал в сполере всегда актуален (т.е. если изменилась включаемая нода, то материал в сполере тоже будет загружаться измененный)
-+ Поисковики и индексаторы не будут видеть материал скрытый в сполере (даже в том случае если установлен атрибут show)
- При отключенном в браузере js материал не будет виден

Особенности применения данных атрибутов:

Будет плохой идеей «зациклить» материал т.е. при помощи атрибута node (ajax-node) включит в текущий материал создаваемую ноду непосредственно либо опосредованно, через цепочку нод (например вы редактируете ноду № 5 и включаете в сполер ноду №3 а в ноде №3 в сполер включена нода № 5), т.е. избегайте рекурсии, скорее всего это приведет к падению сервера с 502 ошибкой, и может быть исправлено только убиением(редактированием) данной ноды непосредственно в базе (для экспериментаторов править надо таблицу {field_data_body} после чего сбросить кеш).

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

Вывод ноды определяется шаблоном ccfcollapse-inline-node.tpl.php (который вы можете переопределить в своей теме), в шаблоне по умолчанию (который включен в данный модуль) отключен вывод тэгов ноды и линки (т.е. практически выводиться голый “body” ноды).

Комментарии включаемой ноды не попадают в сполер.

В качестве включаемой ноды можно включать ноду в свою очередь содержащую свои сполеры (в том числе и с атрибутам node/ajax-node)
Правда в случае с включением ноды содержащей ajax-node сполер на моей теме возникают какие-то проблемы с css но попробую разобраться (может это тема глючит).
Да и еще раз избегайте рекурсии прямой или косвенной.

Если у вас включен модуль path (pathauto) то в качестве параметра node/ajax-node
можно использовать и синоим (например “article/test_node”).

Если при использовании атрибутов node или ajax-node не использован атрибут title, то в качестве title будет использован заголовок включаемой ноды.
Данный заголовок всегда формируется статично, т.е. если вы изменили заголовок включаемой ноды, то надо или сбросить кэш, либо пересохранить сам материал.

2. Переменные в атрибутах теперь могут быть заключены не только в одинарные но и в двойные кавычки (но обязательно парные), это позволяет например создавать атрибуты типа “O’Вerly” или ‘ООО “Моя компания”‘.

Пример использования новых возможностей можно посмотреть по адресу

http://www.printarts.ru/article/collapse-test-load-node

Прикрепленный файл Размер Новая версия – ccfcollapse.zip 8.01 кб

Источник: http://www.drupal.ru/node/56981

© 2009 Обзор CMS