Многие сталкивались с проблемой для различного отображения анонса материала (тизера) и самого материала.
Данный модуль существует довольно давно, но автор практически забыл об обновлениях и даже 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 КБ |
Комментарии
Обычно ограничение анонса производится тегом:
<! --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) Неудобно.
...
<!tid>нужная часть текста<!/tid>,
где tid - id термина.<tid> -> <nid>
Drupal как-то берет список:<nid>.
<!tid>...<!/tid>,
и выводит в качестве тизеров массив кусков текста, заключенных между данными метатегами.<!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):
$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