Модуль для ручного ввода анонсов (доработка)

Прислано: 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.jpg35.69 кб
excerpt.zip3.67 кб

Комментарии


Настройки просмотра комментариев

Выберите нужный метод показа комментариев и нажмите "Применить"
Опубликовано xseed в сб, 18/08/2007 - 06:25.

Обычно ограничение анонса производится тегом: <! --break-->, либо задается в настройках самого сайта. И где, в каких бы списках, лентах этот тизер не высвечивался, он всегда выглядит одинаково.
Никто не пытался сделать различным отображение превьюшек каждой ноды в зависимости от просматриваемого термина? То есть чтобы одна и таже нода в разных терминах имела разные превью.
Подробнее (вопрос)


Опубликовано edhel в сб, 18/08/2007 - 06:54.

Никто не пытался сделать различным отображение превьюшек каждой ноды в зависимости от просматриваемого термина? То есть чтобы одна и таже нода в разных терминах имела разные превью.

В теме отображение как угодно можно сделать!

Вообще мне система с тизерами в Друпале не нравится...

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 или темы, а на автоматические тизеры забиваю!


Опубликовано vadbars@drupal.org в сб, 18/08/2007 - 07:07.

2) в 6-ке встроен модуль автозавершения HTML. Надеюсь, он будет работать и в вашем случае.
3) в 6-ке добавлена кнопка для текстовых полей, которая вставляет break


Опубликовано xseed в сб, 18/08/2007 - 08:00.

1) Путано.
2) Глючно.
3) Неудобно.
...

  1. Нужно придумать такой WISIWYG-интерфейс на AJAX, который заключал бы код выделенного текста в тег вида: <!tid>нужная часть текста<!/tid>, где tid - id термина.
  2. Затем из таблицы соответствия: <tid> -> <nid> Drupal как-то берет список: <nid>.
  3. Необходимо изменить (или создать) такую переменную, которая предварительно сканирует выводимые ноды на предмет наличия тегов: <!tid>...<!/tid>, и выводит в качестве тизеров массив кусков текста, заключенных между данными метатегами.
  4. Интерфейс должен обладать всплывающей командной строкой (по типу выделил -- присвоил) с поиском терминов по введенным ключевым словам и присваивать редактируемой ноде и сами термины непосредственно. Даже если такой модуль с интерфейсом будут удалены или отключены, ничего страшного не произойдет, просто отображение тизеров вернется к обычному друпаловскому методу /или с < !--break-->, поскольку метатеги: <!tid>...<!/tid>, не будут отображаться.
    Даже если будут длинные параграфы, ничего не произойдет, если анализируются эти теги.

Какая переменная отвечает за вывод тизеров? И где в теме она находится? (Ее и надо как-то поменять).
Мне кажется, было бы удобно: разметил ноду тегами, а дальше сама система (или модуль, сниппет - кто как напишет) решает как эти теги обработать.
Есть готовые решения? :)


Опубликовано edhel в сб, 18/08/2007 - 08:00.

Сделать можно... Но! Не всегда вообще тизер может быть составлен из кусков. Это может быть вообще другой текст, если редактору так надо.

Контролировать корректность HTML всё равно тяжело. Выделение ведь может начаться с середины одного абзаца, а кончиться в середине следующего.

ЗЫ: Лучше не <!tid>, т.к. это может поломать XHTML, лучше уж комментарий типа <!--break--> и <!--/break-->


Опубликовано edhel в сб, 18/08/2007 - 08:01.

Тьфу, Вы про термины) А я о своем, о тизерах)


Опубликовано edhel в сб, 18/08/2007 - 08:09.

xseed, а зачем такие навороты непонятно? У нод что ли часто меняться термины будут? Обычно термины фиксированы у ноды, а значит и тизеры фиксированы, зачем туда !tid-то пихать..

ЗЫ: В теме в шаблоне ноды при выводе можно любой наворот реализовать.


Опубликовано xseed в сб, 18/08/2007 - 09:11.

Это нужно, чтобы привязать отображение тизеров к терминам.
Если выводится лента с несколькими терминами одновременно (term/1,2,3, term/1+2+3), то в каждый тизер будет состоять из нескольких абзацев текста, заключенных между тегами tid. При этом повторяющиеся кусочки обрабатывать и оставлять только один, чтобы не портить тизер.
------------------
Будет еще лучше, если эта строка позволит свободный ввод терминов вида:  vocabulary, term, term, ..., term, с подсказками при каждом следующем вводе более глубокого термина. Можно сделать так, чтобы здесь же давать описания этим терминам.


Опубликовано andypost@drupal.org в вс, 19/08/2007 - 22:56.

На самом деле полемика не понятна, какое отношение тизер имеет к отображению?
Данный модуль просто добавляет возможность ввести анонс руками.
В отношении ССК - крайне редко им пользуюсь. И уж если кому-то нужно выводить через него - дык и настраивать там нужно. ССК имеет весьма посредственное отношение к базовой таблице нод и их ревизий.


Опубликовано sas@drupal.org в пн, 20/08/2007 - 05:16.

IMHO это архаизм, contemplate решает эту проблему намного красивее


Опубликовано ryurix в вт, 21/08/2007 - 05:47.

Давно уже написал крохотный модуль, позволяющий включать поле для тизера для каждого типа материала отдельно. Дополнительные таблицы не используются.
Настраивается на странице редактирования типа материала.
Это для тех, кто не любит contemplate и CCK.


Опубликовано vick в чт, 23/08/2007 - 09:55.

Спасибо за модуль!!!!!.. очень пригодился))..


Опубликовано MDD в пн, 22/10/2007 - 07:33.

2 ryurix

Вот так это выглядит в 5.3 :(


Опубликовано antyanesko в пн, 29/10/2007 - 22:34.

Спасибо за вашу работу))) excerpt работает прекрасно в 5.3 =)
П.С. именно эта версия


Опубликовано Goodboy в пн, 02/06/2008 - 14:31.

2) /admin/content/types для каждого из материалов можно настроить отличный от умолчаний вывод анонса

Да, можно настроить, но изменения не сохраняются. По крайней мере, при повторном редактировании вижу установки по умолчанию из /admin/content/node-settings

Установлен Drupal 5.5.


Опубликовано andypost@drupal.org в пн, 02/06/2008 - 15:10.

В данный момент именно этот модуль прекрасно работает на 2х сайтах - проверил все отлично (Д5.7)


Опубликовано xseed в пн, 02/06/2008 - 18:07.

Спасибо


Опубликовано Goodboy в пн, 02/06/2008 - 19:29.

Андрей, у меня тоже тизеры работают замечательно. Единственное - форма тип документа при редактировании показывает не действительное значение переменной '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 в вт, 03/06/2008 - 04:12.

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


Опубликовано shtrlz в чт, 05/06/2008 - 13:29.

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


Опубликовано andypost@drupal.org в чт, 05/06/2008 - 15:55.

Что значит срабатывает с опозданием? Опишите подробнее проблему.
Модуль предназначен для ручного ввода анонса, и что значит "тоесть не там где я режу а через пару предложений..."?


Опубликовано ii в вт, 15/07/2008 - 11:13.

andypost@drupal.org
Подскажите, пожалуйста, как вывести тизер, введенный вручную, перед нодой?


Опубликовано Polar в пн, 28/07/2008 - 18:00.

>>Подскажите, пожалуйста, как вывести тизер, введенный вручную, перед нодой?
Вы говорите о том, чтобы тизер можно было вводить отдельно от содержания ноды, а потом вывести их вместе? Можно создать дополнительное текстовое поле к типу материала.


Опубликовано ii в вт, 29/07/2008 - 06:43.

Polar,
Да, я именно об этом.
То есть, при добавлении материала, прописывать анонс и дублировать его в доп. текстовом поле?


Опубликовано andypost@drupal.org в вт, 29/07/2008 - 15:46.

Для 5ки именно так! В 6ке это стандартная фича


Опубликовано ii в ср, 30/07/2008 - 08:53.

andypost@drupal.org,
Для 5ки именно так!

извини за нудность. =) ты имеешь ввиду "так и только так"? боюсь, заказчики будут в шоке =:-0


Опубликовано ii в чт, 31/07/2008 - 13:42.

Тогда уж лучше добавить поле для тизера и модулем ConTemplate изменить его вывод (или непосредственно в node.tpl.php). Без дополнительных модулей для тизеров. Так?


Опубликовано magerik в вт, 23/12/2008 - 23:52.

спасибо... быстро и чётко)


Опубликовано silwer в вт, 03/02/2009 - 23:20.

Жаль с 6-кой не работает :(


Опубликовано andypost@drupal.org в ср, 04/02/2009 - 18:47.

Работает с 6кой и 5кой - берите официальную версию  Excerpt


Ссылки партнёров