Типограф

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

Аватар пользователя HIgor1968 HIgor1968 27 августа 2008 в 15:13

Типограф работающий как фильтр. Есль модуль для Друпала. Правда оригинал сразу не заработал пришлость дописать в info файле потдержку 6-й версии и класс назвать с маленькой буквы.
Страница оригинала здесь.
http://rmcreative.ru/blog/post/tipograf
Для ленивых модуль прикладываю.

ВложениеРазмер
Иконка пакета typographus.zip11.48 КБ

Комментарии

Аватар пользователя HIgor1968 HIgor1968 12 октября 2008 в 21:12

Все бы хороше - но это смущает -

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

Аватар пользователя HIgor1968 HIgor1968 12 октября 2008 в 22:39

В принципе можно.
Можно и кнопочкой при редактировании ноды.
Может так и сделаю. То текущий типограф у меня периодически косячит.

Аватар пользователя bodro bodro 12 октября 2008 в 22:42

кнопочкой при редактировании ноды...
тогда совместимость с висивиг редакторами может пострадать

Аватар пользователя andypost@drupal.org andypost@drupal.org 12 октября 2008 в 23:11

Господа, не стройте иллюзий - фильтры накладываются в node_prepare^api перед выводом, при чем в зависимости от роли пользователя для которого этот вывод делается, смотрите внимательно node_view^api

Аватар пользователя bodro bodro 12 октября 2008 в 23:28

"<a href="mailto:andypost@drupal.org">andypost@drupal.org</a>" wrote:
фильтры накладываются в node_prepare перед выводом, при чем в зависимости от роли пользователя для которого этот вывод делается

...хостера не жалко?)
hook_filter юзать нужно

Аватар пользователя andypost@drupal.org andypost@drupal.org 12 октября 2008 в 23:43

bodro, о чем вы? почитайте документацию и посмотрите код
hook_filter^api определяет фильтр, в нем выполняется обработка текста, кстати есть кеш фильтров - самое эффективное средство борьбы с нагрузкой! А фильтры почти всегда отрабатывают, ибо почти всегда вызывается node_view^api

Аватар пользователя bodro bodro 13 октября 2008 в 0:13

"<a href="mailto:andypost@drupal.org">andypost@drupal.org</a>" wrote:
кстати есть кеш фильтров - самое эффективное средство борьбы с нагрузкой!

тут подробней - http://data1.floomby.ru/getfile.aspx?guid=968cf3e6-5d11-4759-b5ec-58b91c...

"<a href="mailto:andypost@drupal.org">andypost@drupal.org</a>" wrote:
hook_filter определяет фильтр

дык это и нужно Smile
чем node_view, node_prepare могут тут помочь я так и не понял

Аватар пользователя andypost@drupal.org andypost@drupal.org 13 октября 2008 в 0:25

"bodro" wrote:
чем node_view, node_prepare могут тут помочь я так и не понял

внимательнее Smile

"bodro" wrote:
чем смущает... фильтр включаются только один раз при создании или изменении ноды

Отсюда весь сыр бор - фильтр в данном случае не нужен, текст стоит поправить на этапе подготовки, собственно как и проверка орфографии.

Аватар пользователя bodro bodro 13 октября 2008 в 0:51

"<a href="mailto:andypost@drupal.org">andypost@drupal.org</a>" wrote:
фильтр в данном случае не нужен, текст стоит поправить на этапе подготовки, собственно как и проверка орфографии.

например мне именно такой фильтр и нужен
если нужно на этапе подготовки, то JS решение будет лучшим вариантом

Аватар пользователя andypost@drupal.org andypost@drupal.org 13 октября 2008 в 16:49

Поэтому я и написал - незачем хранить текст не обработанный типографом и каждый раз при выводе прогонять фильтром... пожалейте хостера Smile

Аватар пользователя bodro bodro 13 октября 2008 в 17:44

мдя...

итак, давайте разберемся как же работают фильтры...

При создании ноды:
1 – берем исходный текст, вычисляем для него MD5
2 – прогоняем через фильтры
3 – записываем в кеш MD5 и отфильтрованный текст

При вызове ноды:
1 – берем текст вычисляем для него MD5
2 – смотрим в кеш, MD5 совпадает..? тогда выводим текст из кеша, не запуская фильтры (исключение составляют фильтры которые юзают $op == 'no cache')

Аватар пользователя andypost@drupal.org andypost@drupal.org 13 октября 2008 в 17:54

Небольшая поправка - при создании и правке ничего не вычисляется и не сохраняется кроме тела ноды и его формата.
Обычно сразу после правки нода выводится на экран и вот тут отрабатывают фильтры, причем очень важно, разрешено ли кеширование для фильтра, обычно оно выключено.

После редактирования списка фильтров или ноды кеш фильтров сбрасывается (по статистике drupal.ru кеш фильтра дает примерно 60-70% попаданий в кеш), но это после того, как руками почти всем Фильтрам разрешено кеширование!

Кеш хранится в виде (check_markup^api) <?php $cache_id = $format .':'. md5($text); ?>

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

Аватар пользователя bodro bodro 13 октября 2008 в 18:36

сделал модуль фильтра под 5ку, он добавляет в конец ноды текущую дату и время с секундами, кеш в админке выключен, но дата при перезарузке ноды не меняется, вы что-то путаете...

модуль:
test_filter.rar (0,69 Kb)

Аватар пользователя HIgor1968 HIgor1968 13 октября 2008 в 21:35

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

Аватар пользователя bodro bodro 13 октября 2008 в 22:17

допустим, есть у нас страница с кучей кода которая сохранена в формате 'php' который не типографится, через некоторое время мы (или не мы Wink меняем эту страницу и ставим другой формат ввода и в результате типограф бесповоротно испортил страницу...

Аватар пользователя HIgor1968 HIgor1968 13 октября 2008 в 22:34

Я не говорю о таких страницах. Простая секретарша не будет делать таких страниц, ей кнопка будет - самое то. Сам я в таком случае найду выход.

Аватар пользователя andypost@drupal.org andypost@drupal.org 14 октября 2008 в 2:38

"HIgor1968" wrote:
Простая секретарша не будет делать таких страниц, ей кнопка будет - самое то. Сам я в таком случае найду выход.

О чем и речь... Типограф более востребован при наборе текста нежели для обработки страниц кем-то отрендеренных...

Аватар пользователя bodro bodro 14 октября 2008 в 3:21

"HIgor1968" wrote:
Простая секретарша не будет делать таких страниц, ей кнопка будет - самое то.

я не переживу этой муки — объяснять секретарше для чего эта кнопка, типографика и т.д...
да и забудет она о ней ровно через 5 мин. Smile

Аватар пользователя HIgor1968 HIgor1968 14 октября 2008 в 22:09

За ней 3-е "с топорами стоят" Smile напомнят.
Просто на Агаве тариф Profy. При посещаемости сайта 200 челов в день днем врубались дикие тормоза. причем периодические. Пока не отрубил типограф. 2 дня никаких претензий клиент не высказывает.

Аватар пользователя SamDark SamDark 18 октября 2008 в 23:37

HIgor1968
Вообще верный подход. Ещё как альтернативу можно Devangari попользовать. Это реализация на JavaScript.

Аватар пользователя T-34 T-34 23 февраля 2009 в 18:09

Спасибо за модуль. Аналогично используемому на пятерке Typografica (http://drupal.ru/node/1614), пришлось поправить правила обработки тире.

было:

                        // Знак дефиса или два знака дефиса подряд — на знак длинного тире.
                        // + Нельзя разрывать строку перед тире, например: Знание — сила, Курить — здоровью вредить.
                        '/(\s+)(--?|—|&mdash;)(?=\s)/' => $sym['nbsp'].$sym['mdash'],
                    '/(^)(--?|—|&mdash;)(?=\s)/' => $sym['mdash'],

В этом случае дефис в начале первой строки остается дефисом. А если перед дефисом стоит перевод строки, перед тире появляется еще и неразрывный пробел. В итоге типографика диалогов кривая.

исправил на:

                        // Знак дефиса или два знака дефиса подряд — на знак длинного тире.
                        // + Нельзя разрывать строку перед тире, например: Знание — сила, Курить — здоровью вредить.
                        '/( )(--?|—|&mdash;)(?=\s)/' => $sym['nbsp'].$sym['mdash'],
                        '/(--?|—|&mdash;)(?=\s)/' => $sym['mdash'],
                    '/(^)(--?|—|&mdash;)(?=\s)/' => $sym['mdash'],