Погуглил и поикал по форуму, но решения так и не нашёл.
Задача проста: размещать картинки, обработанные ImageCache, не общей кучей в конце, а поодиночке в любом месте страницы.
Может, есть какой простой токен типа [image=1 align=right], который позволял бы указывать, какую картинку куда вставлять?
Используются: Drupal 6, FileField, ImageField, ImageCache.
Пока что я вижу несколько решений, но все они - жуткие извращения с filefield.
Есть вариант с использованием представлений и Insert View, но это извращение ещё хлеще, да и нагрузка из-за вьюшек дико возрастёт.
Я просто не могу понять, зачем вообще нужен ImageCache (тем более, почему он так популярен), если созданные им картинки никак нельзя расположить на странице.
А альтернативу ImageCache я как-то не смог найти.
Комментарии
Не умеете (облом) искать
http://drupal.org/node/163561
1) устанавливаете модуль , устанавливаете любой визивинг редактор, который поддерживает этот модуль
2) создаете поле imagefield, разрешаете загрузку нескольких изображений (при этом можно будет указать пресеты imagecache которые можно будет выбирать при вставке картинки, но я без imagecache в настройках поля указываю чтобы картинки обрезались при загрузки на ширину колонки с текстом)
3) ставим модуль ,этот модуль автоматом обрезает картинку до размеров, которые вы задали картинке в визивинг редакторе, не забываем добавить фильтр этого модуля в настройках фильтров.
Благодарю за ответы.
Понятно,сорри,не понял
Нашёл с первого раза это http://drupal.org/project/inline (не пробовал,но звучит как вам нужно)
Также люди для вставки картинок "inline" часто используют это http://drupal.org/project/img_assist
Я этими двумя штуками не пользуюсь,предпочитаю напрямую через fckeditor
>им невозможно вставить именно превью со ссылкой на полное изображение
есть ковыряйте внимательней настройи модуля image_resize_filter (если конечно нет не обходимости чтобы эти изображения были отдельной нодой)
>через image_resize_filter возможно изменение размера - но вручную, а не по заданному шаблону (что нарушит "стандартность" отображания на сайте)
при установленном insert при редактировании настроек поля можно указать чекбоксами, через какие пресеты imagecache можно вставлять изображения (смотри прикрепленный файл)
>в дальнейшем всё это должно интегрироваться с LightBox, что с данным методом я не представляю, как реализовать
пока он эта связка может интегрироваться с shoutbox, что не намного хуже LightBox, если есть желание и руки под LightBox не сложно переделать
скринкаст по этой теме http://mustardseedmedia.com/podcast/episode29
gumk,
Да, действительно, как оказалось, интеграция как с лайтбоксом, так и с любыми подобными возможна - это делается в настройках активированного фильтра image resize (там можно прописать атрибут rel).
Скриншот, что Вы показали - это настройки insert, а не image resize. Да, он может вставить уже отресайзеное изображение по шаблону от imagecache (я это и тогда понял) - однако это будет не пара "превью-ссылка на изображение", а просто превью. Соответственно, безо всякого лайтбокса. Чтобы было превью со ссылкой в лайтбоксе, надо вставлять оригинальную картинку, которую потом вручную ресайзить в визивиг-редакторе.
volocuga,
Да, это именно оно! Уже готов был памятник воздвигнуть Вам нерукотворный, да оказалось, что inline работает только с Upload (а Filefield и ImageField не видит).
Итого: связка Insert + Image Resize, к сожалению, не подходит, как ни крути.
Решение проблемы теперь видится только через Inline (либо то извращение с Insert View, до которого я сам додумался). Поэтому вопрос по-прежнему открыт, но тему имеет смысл продолжать здесь: http://www.drupal.ru/node/35393
Здравствуйте, тоже вот решил прикрутить, что нибудь, чтобы картинки вставлять. Раньше пользовался модулем node_images, но в свете своих желаний понимаю что скорее всего откажусь в пользу ImageField, хотя по большому счету мало чем отличаются, просто ImageField к CCK ближе, а так ведь почти все тоже самое делает.
Вариант от gumk попробовал, но
Все эти модули типа insert и тот же tinyMCE и другие, вставляют тэг и определяют url в конечном варианте на момент вставки. Совершенно не предполагая, что сайт может менять свое местоположение, домен, пути, ставит абсолютную ссылку и все тут. Как вариант можете сказать что тогда делай каждое изображение как ноду, но это из пушки по воробьям (а то бы image_filter давно применил) или а не фиг типа каталоги двигать и так далее.
Всего то надо, чтобы был некий форматер, которому передашь-укажешь вставить картинку вон из той ноды, номер или идентификатор ее такой-то в ноде. И в нужный момент он замещал эту ссылку при рендеренге.
А все эти tinyMCE должны корректно видеть такие вставки и уметь их отрендерить сделав запрос к Drupal, а не отображать как есть. Плюс из wysiwyg редактора оперативно менять alt, title, preset как говорится у картинки. Но в чистом коде никаких [img]abosulte_url[/img] быт не должно.
Что нибудь типа:
[img]nid|synonym#number_images|md5,preset[/img]
Сейчас вот как раз читаю про Custom Filter -ы, там как раз пару примеров дано что можно просто регулярным выражением поймать такую вставку и выполнить свой php код, и думаю я скорее сам напишу php код, который по такому форматеру, запросит нужную картинку у imagecache, чем дождусь готового модуля. Ну и свой же javascript к tinyMCE придется прикрутить.
Посмотрел на видео с image_resize_filter, и понимаю все что нужно, это чтобы
image_resize_filter и imagefield договорились о способе идентификации изображения, не по url или пути к файлу. Кстати, в image_resize_filter это почти сделано, они когда из вне картинку грузят, в качестве ключа используется url к картинке, вовремя рендернга они походу из бд вытягивают md5, чтобы знать что пресету скормить. А потом подставляет ссылку на пресет и все.
Но там все равно присутствует путь к файлу. Хотя понимаю что парни с image_resize_filter, почти сделали то что как раз мне нужно, жаль только идентификацию сделали по пути все таки. То есть из другой ноды мне придется ссылаться на картинку как files/trampampam, а вдруг путь изменится?
И даже в демо видно как все равно вставляют путь к изображению, а не просто выбрать уже загруженную картинку.
Теперь уже думаю что мне просто нужно свой фильтр написать который запуститься раньше фильтра
image_resize_filter и подставит вместо ноды с идентификатором изображения полный путь к картинке, а потом уже путь image_resize_filter работает
Уря, я нашел что хотел надо только будет осмыслить
дошел я на сайте друпала вот до этой страницы
http://drupal.org/node/342186
и до модуля Linodef http://drupal.org/project/linodef
Все что мне осталось сделать
это сказать чтобы применился фильтр Linodef к моему типу материала
и вставить вот такую строчку
[#340:field_image_cache:1,formatter="image_plain"]
собственно таким образом я сказал, что отобразить мне 2-й элемент (1-й с 0 начинается) поля field_image_cache из 340 ноды, через CCK форматтер image_plain, этот форматтер как раз поставляется с imagefield
кроме того сам этот форматтер является темизируемым да еще докучи внутри вызывает другую функцию
темизации imagefield_image
да и никто не запрещает написать свой cck форматтер, он ведь такой простой
// Inside a view $element may contain null data. In that case, just return.
if (empty($element['#item']['fid'])) {
return '';
}
$field = content_fields($element['#field_name']);
$item = $element['#item'];
$item['data']['alt'] = isset($item['data']['alt']) ? $item['data']['alt'] : '';
$item['data']['title'] = isset($item['data']['title']) ? $item['data']['title'] : NULL;
$class = 'imagefield imagefield-'. $field['field_name'];
return theme('imagefield_image', $item, $item['data']['alt'], $item['data']['title'], array('class' => $class));
}
function theme_imagefield_formatter_image_nodelink($element) {
// Inside a view $element may contain null data. In that case, just return.
if (empty($element['#item']['fid'])) {
return '';
}
$node = $element['#node'];
$imagetag = theme('imagefield_formatter_image_plain', $element);
$class = 'imagefield imagefield-nodelink imagefield-'. $element['#field_name'];
return l($imagetag, 'node/'. $node->nid, array('attributes' => array('class' => $class), 'html' => TRUE));
}
заодно можно заставить картинку выводить хоть в lightbox наверное