Модуль для ручного ввода анонсов (доработка)
Прислано: andypost@drupal.org
пт, 17/08/2007 - 17:44
Многие сталкивались с проблемой для различного отображения анонса материала (тизера) и самого материала.
Данный модуль существует довольно давно, но автор практически забыл об обновлениях и даже dev-версия идет без .info файла, что не дает большинству пользователей им воспользоваться. существует, однако, альтернатива - nodeteaser, которая немного функциональнее, но тоже не лишена недостатков и по сей день. Имхо, дополнительная таблица в базе вместо существующего и без неё teaser - излишество и дополнительная нагрузка на сервер.
Прилагаю немного доработанный мной модуль excerpt
1) /admin/content/node-settings - устанавливаются значения высоты textarea для ввода анонса(тизера) и тип генерации анонса по умолчанию
2) /admin/content/types для каждого из материалов можно настроить отличный от умолчаний вывод анонса
3) прилагаю перевод на русский
Изменения:
- Поправлен алгоритм генерации ссылка "читать далее"
- Код приближен к оригинальному модулю Excerpt который наконец дошел до релиза!
TODO
1) сделать помимо автогенерации и ручного анонса еще и его полное отсутствие (пока спасает стирание trim и вписывание пробела)
2) сделать права доступа на настройку
Предлагаю обсудить
| Прикрепленный файл | Размер |
|---|---|
| excerpt_screen.jpg | 35.69 кб |
| excerpt.zip | 3.67 кб |
- andypost@drupal.org's blog
- Для комментирования войдите или зарегистрируйтесь
Обычно ограничение анонса производится тегом: <! --break-->, либо задается в настройках самого сайта. И где, в каких бы списках, лентах этот тизер не высвечивался, он всегда выглядит одинаково.
Никто не пытался сделать различным отображение превьюшек каждой ноды в зависимости от просматриваемого термина? То есть чтобы одна и таже нода в разных терминах имела разные превью.
Подробнее (вопрос)
- Для комментирования войдите или зарегистрируйтесь
Никто не пытался сделать различным отображение превьюшек каждой ноды в зависимости от просматриваемого термина? То есть чтобы одна и таже нода в разных терминах имела разные превью.
В теме отображение как угодно можно сделать!
Вообще мне система с тизерами в Друпале не нравится...
1) Путано.
Например, у меня есть "Новость" сделанная в CCK (все поля через ССК, включая аннотацию и полный текст). Смотрю в БД табличку node_revision - body и teaser пустые... Хотя contemplate-ом я настроил и то, и другое, и оно нормально отображается. Зачем тогда 2 поля в БД? RSS пустой, потому что в conteplate не настроил.
Я конечно могу покапаться в коде и найти там, что на этапе загрузки ноды CCK+contemplate+ядро забивают в ноду teaser и body и прочие поля по своим алготримам, а ядро рендерит это всё по своим алготримам, подключая сюда и темы... Но непрозрачно всё это имхо.
2) Глючно.
Например, если текст story такой: <p>ДЛиннный текст.................................</p> - если автоматическая обрезка вклинится внутрь абзаца, то получится не закрытый тэг => код уже не XHTML. Можно конечно разбить на пару абзацев поменьше и break вставить, но а) забивать тексты может и не спецалист, б) каждый рах проверять на XHTML геморно.
3) Неудобно.
Простым смертным юзерам писать <!--break--> геморно и запоминать неудобно.
Вывод для себя: я почти всегда делаю все поля через CCK и сам генерирую тизеры и полное тело с помощью contemplate или темы, а на автоматические тизеры забиваю!
- Для комментирования войдите или зарегистрируйтесь
2) в 6-ке встроен модуль автозавершения HTML. Надеюсь, он будет работать и в вашем случае.
3) в 6-ке добавлена кнопка для текстовых полей, которая вставляет break
- Для комментирования войдите или зарегистрируйтесь
1) Путано.
2) Глючно.
3) Неудобно.
...
- Нужно придумать такой WISIWYG-интерфейс на AJAX, который заключал бы код выделенного текста в тег вида:
<!tid>нужная часть текста<!/tid>,где tid - id термина. - Затем из таблицы соответствия:
<tid> -> <nid>Drupal как-то берет список:<nid>. - Необходимо изменить (или создать) такую переменную, которая предварительно сканирует выводимые ноды на предмет наличия тегов:
<!tid>...<!/tid>,и выводит в качестве тизеров массив кусков текста, заключенных между данными метатегами. - Интерфейс должен обладать всплывающей командной строкой (по типу выделил -- присвоил) с поиском терминов по введенным ключевым словам и присваивать редактируемой ноде и сами термины непосредственно. Даже если такой модуль с интерфейсом будут удалены или отключены, ничего страшного не произойдет, просто отображение тизеров вернется к обычному друпаловскому методу /или с < !--break-->, поскольку метатеги:
<!tid>...<!/tid>,не будут отображаться.
Даже если будут длинные параграфы, ничего не произойдет, если анализируются эти теги.
Какая переменная отвечает за вывод тизеров? И где в теме она находится? (Ее и надо как-то поменять).
Мне кажется, было бы удобно: разметил ноду тегами, а дальше сама система (или модуль, сниппет - кто как напишет) решает как эти теги обработать.
Есть готовые решения? :)
- Для комментирования войдите или зарегистрируйтесь
Сделать можно... Но! Не всегда вообще тизер может быть составлен из кусков. Это может быть вообще другой текст, если редактору так надо.
Контролировать корректность HTML всё равно тяжело. Выделение ведь может начаться с середины одного абзаца, а кончиться в середине следующего.
ЗЫ: Лучше не <!tid>, т.к. это может поломать XHTML, лучше уж комментарий типа <!--break--> и <!--/break-->
- Для комментирования войдите или зарегистрируйтесь
Тьфу, Вы про термины) А я о своем, о тизерах)
- Для комментирования войдите или зарегистрируйтесь
xseed, а зачем такие навороты непонятно? У нод что ли часто меняться термины будут? Обычно термины фиксированы у ноды, а значит и тизеры фиксированы, зачем туда !tid-то пихать..
ЗЫ: В теме в шаблоне ноды при выводе можно любой наворот реализовать.
- Для комментирования войдите или зарегистрируйтесь
Это нужно, чтобы привязать отображение тизеров к терминам.
Если выводится лента с несколькими терминами одновременно (term/1,2,3, term/1+2+3), то в каждый тизер будет состоять из нескольких абзацев текста, заключенных между тегами tid. При этом повторяющиеся кусочки обрабатывать и оставлять только один, чтобы не портить тизер.
------------------
Будет еще лучше, если эта строка позволит свободный ввод терминов вида: vocabulary, term, term, ..., term, с подсказками при каждом следующем вводе более глубокого термина. Можно сделать так, чтобы здесь же давать описания этим терминам.
- Для комментирования войдите или зарегистрируйтесь
На самом деле полемика не понятна, какое отношение тизер имеет к отображению?
Данный модуль просто добавляет возможность ввести анонс руками.
В отношении ССК - крайне редко им пользуюсь. И уж если кому-то нужно выводить через него - дык и настраивать там нужно. ССК имеет весьма посредственное отношение к базовой таблице нод и их ревизий.
- Для комментирования войдите или зарегистрируйтесь
IMHO это архаизм, contemplate решает эту проблему намного красивее
- Для комментирования войдите или зарегистрируйтесь
Давно уже написал крохотный модуль, позволяющий включать поле для тизера для каждого типа материала отдельно. Дополнительные таблицы не используются.
Настраивается на странице редактирования типа материала.
Это для тех, кто не любит contemplate и CCK.
- Для комментирования войдите или зарегистрируйтесь
Спасибо за модуль!!!!!.. очень пригодился))..
- Для комментирования войдите или зарегистрируйтесь
2 ryurix
Вот так это выглядит в 5.3 :(
- Для комментирования войдите или зарегистрируйтесь
Спасибо за вашу работу))) excerpt работает прекрасно в 5.3 =)
П.С. именно эта версия
- Для комментирования войдите или зарегистрируйтесь
2) /admin/content/types для каждого из материалов можно настроить отличный от умолчаний вывод анонса
Да, можно настроить, но изменения не сохраняются. По крайней мере, при повторном редактировании вижу установки по умолчанию из /admin/content/node-settings
Установлен Drupal 5.5.
- Для комментирования войдите или зарегистрируйтесь
В данный момент именно этот модуль прекрасно работает на 2х сайтах - проверил все отлично (Д5.7)
- Для комментирования войдите или зарегистрируйтесь
Спасибо
- Для комментирования войдите или зарегистрируйтесь
Андрей, у меня тоже тизеры работают замечательно. Единственное - форма тип документа при редактировании показывает не действительное значение переменной 'excerpt_'. $type , а variable_get('excerpt_default', EXCERPT_DEFAULT)
Например:
1. admin/content/node-settings установлено "Автогенерация", в таблице variables excerpt_default = "0"
2. Устанавливаю в admin/content/types/mytype "Вручную", в таблице variables excerpt_mytype = "1"
3. Захожу в admin/content/types/mytype - вижу установлено "Автогенерация", в таблице variables excerpt_mytype = "1"
Оказалось, что значение строки $type перед расчетом $enabled всегда пустое, поэтому variable_get берет дефолтное значение (так как в таблице variable строки с "excerpt_" нет)
Я решил проблему добавлением в модуль строки(1):
if ( $type == '' ) $type = $form['#node_type']->type; $enabled = variable_get('excerpt_'. $type, variable_get('excerpt_default', EXCERPT_DEFAULT));
Я говорю только про Друпал 5.5, охотно допускаю, что в других версиях переменная $type заполняется должным образом.
Спасибо за полезный модуль!
- Для комментирования войдите или зарегистрируйтесь
Обновил версию модуля, исправил эту ошибку - действительно тип ноды передается по разному в форму настройки и правки.
- Для комментирования войдите или зарегистрируйтесь
срабатывает с опозданием... тоесть не там где я режу а через пару предложений... как починить или хотябы где покопать?
- Для комментирования войдите или зарегистрируйтесь
Что значит срабатывает с опозданием? Опишите подробнее проблему.
Модуль предназначен для ручного ввода анонса, и что значит "тоесть не там где я режу а через пару предложений..."?
- Для комментирования войдите или зарегистрируйтесь
andypost@drupal.org
Подскажите, пожалуйста, как вывести тизер, введенный вручную, перед нодой?
- Для комментирования войдите или зарегистрируйтесь
>>Подскажите, пожалуйста, как вывести тизер, введенный вручную, перед нодой?
Вы говорите о том, чтобы тизер можно было вводить отдельно от содержания ноды, а потом вывести их вместе? Можно создать дополнительное текстовое поле к типу материала.
- Для комментирования войдите или зарегистрируйтесь
Polar,
Да, я именно об этом.
То есть, при добавлении материала, прописывать анонс и дублировать его в доп. текстовом поле?
- Для комментирования войдите или зарегистрируйтесь
Для 5ки именно так! В 6ке это стандартная фича
- Для комментирования войдите или зарегистрируйтесь
andypost@drupal.org,
Для 5ки именно так!
извини за нудность. =) ты имеешь ввиду "так и только так"? боюсь, заказчики будут в шоке =:-0
- Для комментирования войдите или зарегистрируйтесь
Тогда уж лучше добавить поле для тизера и модулем ConTemplate изменить его вывод (или непосредственно в node.tpl.php). Без дополнительных модулей для тизеров. Так?
- Для комментирования войдите или зарегистрируйтесь
спасибо... быстро и чётко)
- Для комментирования войдите или зарегистрируйтесь
Жаль с 6-кой не работает :(
- Для комментирования войдите или зарегистрируйтесь
Работает с 6кой и 5кой - берите официальную версию
Excerpt
- Для комментирования войдите или зарегистрируйтесь















Комментарии