Teaser Image: автоматическая генерация изображения для тизера

Пусть первый запустит в меня клавиатурой тот, кто заявит, что никогда не мучил свой мозг вопросом оформления и вывода «превьюхи» к тизерам/анонсам статей сайта. Более того, возму на себя так же наглость утверждать, что и сам внешний вид веб-сайта - на 90%(ну фиг с ним - 80) вид анонсов статей, выводимых списком в том или ином месте страницы. Модуль, презентуемый в данной публикации, есть мой вариант решения озвученной задачи.

Давно собираясь раз и навсегда избавить голову от забот о картинках к тизерам путем написания своего модуля «с нуля», совершенно случайно наткнулся на уже готовый и «отрелизенный» код. Говорю я о модуле Teaser Thumbnail, что скромно «заныкался» в «запасниках» сокровищницы drupal.org.

Teaser Thumbnail почти полностью соответствовал моим пожеланиям и нуждам. Почти... Вот что меня в нем точно не устраивало, так это его «железная» привязка к ImageCache. Который, в свою очередь, ни разу «не заведется» без установки еще двух: ImageAPI и Transliteration. Итого - аж четыре модуля для решения одной единственной, несложной, в принципе, задачки. Той, что вполне и полностью решаема встроенным функционалом ядра Drupal. Втройне несерьезно, если «капризный» и непредсказуемый при взаимодействии с Nginx`ом ImageCache нам для других целей или модулей более не нужен вовсе.

Предвижу «справедливые аргументы», что, мол «ImageCache один из самых популярных модулей Drupal`а, наравне с тем же Views». Или де «тумбы элементарно генеряться «элегантной» связкой CCK->FileField->ImageField->ImageCache(с довесками)->Views». Что я на это отвечу? Флаг вам, ребята, в каждую руку и котомку с пайком за плечи, данная публикация не для вас. Мне было бы вобще странно узнать, что написанное на drupalka.ru читают люди, выбравшие стиль общения с движком - «Drupal - это Views, мегасайт на Drupal - Views с дополнениями... ». Может оно так и есть, но мне предпочтительней метод, когда поставленная задача выполняется все ж одним инструментом, а не целой их связкой одновременно. Тем, кому моя философия хоть сколько-нибудь близка, предлагаю вернуться к основной теме, заявленной заголовком.

Teaser Image - «модифицированный» Teaser Thumbnail

Суть модификации состояла в изменении нескольких функций, относящихся к обработке изображений ImageCache`ем. Теперь генерация «превьюх» происходит с помощью «Drupal's image toolkits» - встроенным в ядро CMS инструментарием для взаимодействия оной с графическими библиотеками PHP: GD или ImageMagic. Библиотеки эти, естественно, должны быть включены в конфигурацию PHP вашего сервера и задействованы.

Были добавлены пара-тройка новых настраиваемых параметров и удалены некоторые, сочтенные за «ненужные». Поддержка Views так же была адаптирована с учетом новых обработчиков. В остальном - весь прежний видимый конечному пользователю и админам функционал Teaser Thumbnail оставлен без серьезных изменений. Новое имя модуль получил дабы избежать возможной путаницы в будущем.

Ну и самое «изюмное»: для полноценной и стабильной(косяков покуда не обнаружено) работы модуль требует ныне лишь самого себя, Drupal`а и включенных на сервере GD/ImageMagic-библиотек. И в топку кузнеца все «левые обвесы».

Что делает модуль

Автоматическая генерация уменьшенных копий картинок для тизера происходит во время сохранения новой ноды или изменения уже существующей.

Скрипт «ищет» изображения по заданным настройками параметрам в теле публикации. Первая найденная картинка, соответствующая требованиям, уменьшается(пропорционально или с обрезкой) и сохраняется в той же папке, что и изображение-донор, под тем же именем, но с дополнительной приставкой-суффиксом.

При изменении или удалении публикации, «неактуальные» сгенерированные «превью» удаляются. При необходимости создаются новые.


Установка и настройка модуля

Установка стандартная - путем копирования папки модуля в соответствующую директорию на сервере. В списке модулей на странице администрирования ищите в наборе Общие/Разное.

Настраивается работа модуля глобально и отдельно для каждого типа материала. Основные настройки производятся на странице admin/settings/teaserimage, доступной после включения модуля.

Страница основных настроек модуля

Тут мы настраиваем:

  • добавляемую к имени файла приставку(первое поле настроек). По умолчанию - _tthumb;
  • метод обработки изображения: изменять размер пропорционально или уменьшать и обрезать под заданный размер, по-умолчанию - второе;
  • размеры будущего изображения для тизера: задается цифрами через x, по-умолчанию - 100х100;
  • минимальная ширина и высота изображения в теле ноды, которое будет считаться подходящим для обработки, изначально поля ввода параметров данных - пусты;

Страница основных настроек модуля Teaser Images.

Страница настроек модуля для каждого типа материала

Генерация изображений для тизеров изначально отключена. Включается поддержка данного функционала отдельно для каждого типа материала на странице настроек нужного типа. После включения модуля там появляется новая группа изменяемых параметров - Teaser Image.

На странице редактирования типа публикации так же возможно задать для каждого конкретного типа свои собственные настройки, переписывающие для него установки глобальные (admin/settings/teaserimage).

Индивидуально для каждого типа задается:

  • стоит ли использовать файл(ы)-аттачмент(ы) к ноде в качестве исходных, для последующей генерации превью, файлов;
  • позиция отображения при показе тизера: «перед текстом», «после» и «не отображать»(если выводить сгенерированную картинку вы планируете самостоятельным вызовом в шаблоне ноды;
  • надо ли делать изображение тизера ссылкой на «полный» текст публикации;
  • прикреплять ли сгенерированное превью к выдаче RSS-канала сайта;
  • выравнивание картинки (атрибут align тега IMG);

Настройки модуля Teaser Images на странице редактирования типа материала.

Dalay

Комментарии

Зачем что-то указывать конечному пользователю, если настройки отображения превью заданы нужным образом в опциях для типа материала?

вот и я говорю - ни в коем случае. Значит. нужно превью делать "налету", чем-то, что умеет подхватывать исходную картинку и сразу пихать это нормальное превью в нужное место.
а исходную картинку чтоб можно было получить поверх "этого места", кликнув по превью.
Наверняка я чего-то, из-за своей неграмотности, не понимаю, но кажется, что тут всё просто должно быть. Относительно, разумеется :)

пароли для фтп и админа высылаю

...нужно превью делать "налету", чем-то, что умеет подхватывать исходную картинку и сразу пихать это нормальное превью в нужное место...

Именно это модуль и делает. В настройках каждого отдельно взятого типа материала указывается как именно превью будут отображаться в дальнейшем. Если не достаточно встроенных стандартных вариантов отображения, тогда отключите отображение, генерируемое модулем, в настройках нужного типа материала, и темизируйте в файле шаблона типа как душе угодно (пример).

Еще бы посоветовал более вдумчиво еще раз прочитать вышенабранные буквы публикации начиная от подзаголовка «Установка и настройка модуля».

:)
«Установка и настройка модуля» - могу повторить по памяти, что надо сделать :)
всё это делал, варьировал параметры.
собственно превью появляется (правда, иногда, уродливое). Но не в этом суть проблемы, это можно потом исправить, думаю.
Не удается "оставить в живых" исходную картинку, это раз.
И не получается подцепить под превью ссылку на полную картинку - что б при клике всплывало исходное изображение. Вместо этого происходит переход на ноду.
Т.е. понятно, что возможность такого перехода предусмотрена во вьюсе, и я её, эту "особенность" отключаю. И пытаюсь как-то приспособить другие существующие средства, но малограмотность так зашкаливает, что ничего не выходит :)

Еще раз. Ссылку из примера поменяйте на любую, какую захотите, хоть на «полное» фото, хоть на сайт медвепутина. Все в пределах апи Друпала, о коем здесь по-русски.

Ну и если используется «ручной» вывод, то надобно отключить дефолтовое отображение пикчи в настройках типов/типа. Иначе будут красоваться в тизере две картинки.

Нет у меня в настройках типа (новость) да и вообще, ни у одного типа материала, нет дефолтового отображения пикчи. Очень бы хотел иметь такое, даже модуль ImageField подключал для этого.
Но так я ничего похожего на настройки вывода изображений у себя в админке не нашёл - уже 2 месяца прошло, как хотел бы найти.
Поменять - как напильником заточить - ссылку на фото Путина - не интересно. Нужна ссылка на ту картинку, которую сегодня ввёл пользователь (и по которой строится , создаётся превьюшное изображение)

А где ее взять, не понимаю :(
За Вашу попытку объяснить темноте это дела - благодарности, но система темизации Друпала описана хоть и русскими буквами, не на русском.
Она написана как справочник для тех, кто уже там, внутри, в теме. Для тех, кто только появился, и первый раз эти слова слышит, там просто ничего не понятно.

что значит нет, а это что?
__s-horoscope.ru/admin/content/node-type/vest

Да, эта штука появилась благодаря вашему модулю. Я её и настроил - по вашим рекомендациям. Разве что-то неправильно настроил?

Тепрь, после этих ваших слов, думаю, что если выводить тизер-картинку "самостийно", то тут надо отключать вывод вообще...

но где ж брать ссылку на картинку?
Модуль как-то умудряется найти картинку, создать ей тизер, испортить её(записав и свой тизер с дополнительным суфиксом, и новый вариант, тизерный, картинки на старое место)... Он-то умный... а мне - невдомёк, как погасить вывод картинки в тексте (тизера), и сделать (показать её, исходную картинку), по клику на превьюшку (ту, что сделана для тизера) ... :)
А уж как прекратить терроризм, т.е. перезапись исходного файла, тут вообще ...

пока получилось так: если картинка поставлена в конце материала, то в тизере она в полном виде не отражается. А показывается в превью-форме, сокращённо. Но исходный файл - убивает :(

Только что вставил картинку в вашу тестовую статью(__s-horoscope.ru/content/new/2010/tesss) и все обработалось должным образом, без каких бы то ни было изменений исходного изображения. Что не так делается вами знать не могу, посему и чем помочь не ведаю.

да ладно, я всё понял.

И в чем была загвоздка? Хотелось бы знать после дня переписки.

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

А тут, по вашему, про что?

Ну, наверное, попробовал, как Вы думаете, прежде чем писать отзыв.....

ну вот даже и текст у вас в комментах обрезался, спасибо......

В полной новости перед началом текста идет тег

И если теперь выводить через вьюз первые теги

) К модулю то какие претензии, добрый человек? То, что «криво выводит», так за то не он в ответе, а настройки стилей отображения конкретно вашего шаблона. Вам по CSS мануал нужен? Так не туда за ним пришли.

пс
Теги, ссылки и проч. нечисть от анонимных прихожан запрещены.

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

) Стили у вас не наследуются? Это вирус, неизлечимый.

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

) Верное решение. Удачи вам.

Отличный модуль, какраз то что надо. А то картинки через IMCE загружаются, и привью из них было хз как делать. А этот модуль просто клад для меня. Те задачи которые необходимо было сделать, теперь выполняются элементарно.

Возник вопрос по модулю, как сделать так, чтобы когда в ноде изображение gif. в тизере оно выводилось не с черным фоном а с белым?

За конечное преобразование изображений отвечает графическая библиотека, установленная на вашем сервере. Модуль лишь связующее звено между ней и Друпалом.

Возможно ли добавить автоматическую генерацию изображения, для тизера, из вставленного видео из youtube, vkvideo или rutube например?

Для 6-ки точно делать не буду. Для версий новее: возможно, но пока не в планах.

Модуль не работает когда выбрана Private file system. Не подскажете в какую сторону ковырять?

Не подскажу. Не заморачивался ввиду отсутствия личной надобности.

Доброго времени суток!

Прежде всего поблагодарить поблагодарить Вас за столь прекрасный модуль, пользуюсь давно!

Есть небольшой вопрос. У меня в опциях установлено брать изображения из поля, если в боди изображение отсутствует. Правильно ли я понимаю, что если в настройках модуля указано medium, то тизер появится только в том случает если в боди встречено будет изображение размера medium?

И еще вопрос - возможно ли как-то изменить тизер? Вот я, например, закачал поле изображение 5 фотографий, сохранил ноду и после этого тизером стала первая. Потом я меняю порядок изображений, но тизером все равно остается старая первая картинка...

И простите, что воскрешаю столь древнюю тему...

И Вам здравствовать.

В боди ищет по размерам(ширинаХвысота), заданным настройками. Общими или для конкретного типа.

После пересохранения ноды сканирует боди по-новой. Если первая "подходящая" картинка в теле изменилась, то модуль хавает ее. "Старую" картинку Вы видите потому, что она была закэширована ранее. "Новая" появится после обновления кэша измененной ноды.

Спасибо за ответ!

Долго мучался пробуя разные варианты.
В результате опытным путем выяснил такие зависимости

1. Если при вставке изображения в боди ноды используется модуль Insert и в нем указано "использовать относительные пути", то teaser image не видит изображения в теле статьи.

2. Если для модуля insert указать "использовать абсолютные пути", то tease image видит изображение и формирует из него тизер для ноды.

3. Однако в новых версиях друпал при вставке изображения при помощи Insert к ссылке изображения добавляется токен вида "названия_изображения.jpg?itok=XxxXx". И если не стереть этот токен, то Teaser Image опять не видит изображения.