Модуль ccfilter под Drupal 7 - продолжение

Главные вкладки

Аватар пользователя olk olk 10 марта 2011 в 20:13


++++
23.03.2011

Dev версия модуля выложена в репозитарий d.o
ccfilter

++++
15.03.2011

Модуль изменен:
1. Добавлена возможность создавать скрытый контент (ccfhidden)в комментариях
2. Устранен один «баг» (не правильно нумеровались скрытые фрагменты)
После переустановки обязательно запустите update.php
Если были ноды созданные с применением фильтра ccfhidden, пересохраните их.
++++
14.03.2011
Внесены небольшие изменения в модули.
1. Так как операция загрузки ноды в качестве скрытого фрагмента либо сворачиваемого текста (в модулях ccfhidden и ccfcollapse)не совсем безопасны
(Опасность заключается в том что в обоих фильтрах, если пользователю доступен соответствующий фильт, то возможен просмотр срытых нод, а также злоумышленик может и «положить» сайт создав ноду с рекурсивным содержанием)ю
Добавлены соответствующие пермишены в модули ccfhidden и ccfcollapse (т.е. вы можете разрешить например зарегистрированным пользователям использовать данный фильтр, но в то же время не давать им возможность использовать атрибут node (ajax-node)).

2. Исправлены некоторые «баги» и добавлены пермишены на настройку модулей (ccfhidden и ccfcollapse).
++++
11.03.2011

исправил небольшую ошибку в модуле ...

******************************************************************************************************

В продолжение следующих материалов: Проба пера или мой первый модуль под Drupal 7 (добавлен функционал)

Добавил еще один фильтр в модуль ccfilter. Вообще то концептуально это отдельные фильтры (модули) просто находящиеся в одной папке. Т.е. каждый из фильтров входящих в набор можно использовать отдельно, не зависимо от остальных.
В настоящий момент кроме уже имеющихся фильтров:
ccfcollapse - разворачивающийся текст
ccfsmileys - смайлики
добавлен новый фильтр ccfhidden, как следует из названия это фильтр скрытого контента, т.е. в зависимости от того к какой (каким) ролям принадлежит пользователь, часть текста обрамленного тэгами [hidden ] ... [/hidden] - будет показана, или наоборот скрыта от данного пользователя.

Разрабатывая данную часть ccfilter-a для 6 версии Друпал, я столкнулся с такой неприятностью как получаемый в итоге некэшируемый контент .

В версии для Друпал 7, я попытался обойти данную проблему.
Общая концепция фильтра следующая:

1. Во время создания/редактирования материала весь скрытый контент сохраняется в отдельной таблице.
2. Во время показа материла весь скрытый контент «вырезается» не зависимо от текущего пользователя (роли)
3. В процессе загрузки материла на сервер через ajax посылается запрос на текущие права пользователя.
4. В зависимости от прав пользователя полученных в предыдущем запросе (т.е. если доступ к данному материалу разрешен), опять же через ajax, в места где должен находиться скрытый контент, подгружается сохраненный на 2 этапе материал.

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

1. Поисковики и роботы не видят скрытый контент (не зависимо от того разрешен он анонимусам или нет).
2. Пользователи с отключенным в браузере js так-же не видят скрытый контент.
3. Нельзя использовать «вложенные» тэги, т.е. внутри одной секции скрытого контента расположить другую секцию. (надеюсь понятно почему ?)

Теперь про «фичи» структуру и организацию настройки фильтра:
1. В качестве скрытого фрагмента может выступать другая нода (механизм аналогичный с фильтром ссfcollapse, единственное отличие - нода всегда подгружается динамически через ajax), исходя из самой сути фильтра наверное правильным будет использовать не опубликованную ноду, иначе доступ к данному контенту все-же можно будет получить просто перейдя по адресу публикации данной ноды).
2. Все параметры конфигурации профиля доступа (о чем ниже) могут быть переопределены непосредственно в атрибутах фильтра.
3. Конфигурация фильтра основана на концепции профилей доступа, которые содержат в себе следующие параметры:

Первые три параметра нельзя перекрыть атрибутами в фильтре.
Access name - имя профиля доступа.
Access type - тип доступа, разрешающий (Allow) или запрещающий (Deny).
Access roles - роли на который действуют данное правило.
Остальные атрибуты можно перекрыть (см. Общая структура фильтра)
Predefined title for hidden content - заголовок который будет показан если доступ к материалу запрещен (в данном поле можно использовать HTML тэги, т.е. в принципе например можно построить ссылку на страницу регистрации).
Predefined title for allow content - заголовок который будет показан если доступ к материалу разрешен (в данном поле можно использовать HTML тэги).
Predefined extraclass - дополнительный класс. Скрытый материал для облегчения темизации обрамлен дивом с классом - ccfhidden-wrapper, дополнительный класс будет добавлен к данному диву, что дает возможность по разному темизировать скрытый контент для разных профилей.
Show in hidden content of unpublished nodes - Разрешает использовать в качестве скрытого фрагмента не опубликованные ноды.
Merge node title to allow contetent title - Если установлен то к заголовку материала (Predefined title for allow content) будет добавлен заголовок ноды (естественно если данный фрагмент представляет собой ноду).

Один профиль с именем default уже опрделен и его нельзя удалить, данный профиль применяется для тэгов скрытого текста у которых не указан атрибут access , т.e. если вы например написали [hidden] тут какой то текст [/hidden], то будет применен профиль default.

Общая структура фильтра:
[hidden ]
<тут материал который будет обработан фильтром>
[/hidden]
- дополнительные атрибуты (все атрибуты не обязательны, но если атрибут установлен он перекрывает соответствующий параметр в настройках модуля)
access = 'access_name' - имя используемого профиля доступа (по умолчанию применяется
профиль default)
title = '' - соответствует параметру профиля «Predefined title for hidden conten»
title-allow = '' - соответствует параметру профиля «Predefined title for allow content»
extraclass = '' - соответствует параметру профиля «Predefined extraclass»
node ='Num' - использует в качестве фрагмента ноду с номером Num
is-title-node - если определен то работает как будто в профиле включен флажок «Merge node title to allow contetent title»
is-unpublish-node - если определен то работает как будто в профиле включен флажок «Show in hidden content of unpublished nodes»
!is-title-node - действие обратное is-title-node, т.е. снятие соответствующего флажка
!is-unpublish-node - действие обратное is-unpublish-node, т.е. снятие соответствующего флажка

Атрибуты определенные в фильтре имеют приоритет (т.е. переопределяют) параметры определенные в текущем профиле доступа.

Особенности определения достпупа

Доступ определятся по типу установленного профиля:
Если в профиле тип доступа Allow (разрешен), то все помеченные в текущем профиле доступа роли получать доступ к материалу, и наоборот всем не помеченным в данном профиле ролям доступ будет запрещен.

Если в профиле тип доступа Deny (запрещен), то все помеченным в текущем профиле ролям будет отказано в доступе к материалу, а всем не помеченным ролям доступ к материалу будет предоставлен.

Поэтому при настройке профиля надо быть осмотрительным, например если вы в профиле с доступом Deny пометите роли «анонимный посетитель» и «зарегистрированный пользователь», то никто из пользователей сайта не получит доступ к материалу.

Пример использования фильтра http://www.printarts.ru/article/prverka-filtra-ccfhidden-1
Что бы посмотреть, как это выглядит для зарегистрированного пользователя, можно зайти под именем «demo» пароль «demo».

Во вложениях отдельно фильтр ccfhidden
полностью обновленный ccfilter (включая ccfhidden) можно забрать по адресу http://www.hotel-prog.ru/content/modul-ccfilter-pod-drupal-7-prodozhenie, там же и оригинал данного материала.

ВложениеРазмер
Иконка пакета ccfhidden-7.x-1.x-2011-03-15.zip9.99 КБ

Комментарии