CCK + imagefield + imagecache

Прислано: tema

вт, 25/07/2006 - 17:45

Хотелось здесь оставить комментарий, не вышло (возможно позже появятся несколько одинаковых: старая болезнь старых движков).

Короче, здесь речь шла о "безобразной работе с картинками"...
=============================================================

SergM@drupal.org:
Неужели все терпят безобразные возможности работы с картиками.
Модуль - image явно слабоват.
image_gallery - убожество!
Кто что использует дополнительно?
Подскажите!
(---skip---)
kiev1
к сожалению все
я правда доработал часть флексиноды - поле image...(---skip---)

=============================================================

Мой комментарий:

С flexinode поработал недолго, ощущения тоже не из приятных, CCK не в пример удобнее, чего стоит хотя бы его widgets (правда, к сожалению, пока с документацией туго).

Так вот, недавно появилось поле image (модуль imagefield), что решает многие проблемы с картинками в Друпале. Ресайзит, скалит и кропает в этом случае не менее приятный модуль imagecache, который создает именованные наборы правил обработки картинок (последовательность операций Scale, Crop, Resize), к которым можно обращаться через URL. К результатам этих операций модуль относится как к кэшу, что позволяет сильно экономить место на превьюшках старых картинок.

Конечно, не без недостатков и просто глюков, но, надеюсь, со временем все пофиксится.

Комментарии


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

Выберите нужный метод показа комментариев и нажмите "Применить"
Опубликовано Natalie в вт, 25/07/2006 - 18:47.

Вот бы еще кто-нибудь объяснил, как этот imagecache прикрутить к imagefield CCK.
---
---
All content management systems suck, Drupal just happens to suck less. -- Boris Mann at DrupalCON Amsterdam, August 2005.


Опубликовано tema в ср, 26/07/2006 - 06:42.

Предположим, поле называется 'field_images' (multiple - возможно несколько картинок), namespace для превьюшек - 'thumbs'.

Для teaser:

<div class="field-images">
<?php print l("<img src="/files/imagecache/thumbs/$field_images[0]['filename'] alt=$field_images[0]['alt'] />", "node/$nid", array('title' => $field_images[0]['title']), NULL, NULL, FALSE, TRUE); ?>
</div>

В данном случае ссылка ведет на ноду, содержащую поле с картинкой, а не на полноразмерную картинку. Аттрибут 'alt' цепляется к картинке, а 'title' - к ссылке.

Для body:

<div class="field-images">
<div class="field-items">
<?php foreach ((array)$field_images as $item) { ?>
<div class="field-item">
<?php print l('<img src="/files/imagecache/thumbs/'. $item['filename'] .'" alt="'. $item['alt'] .'" />', $item['filepath'], array('title' => $item['title']), NULL, NULL, FALSE, TRUE); ?>
</div>
<?php } ?>
</div>
</div>

А здесь ссылка уже на полноразмерную картинку.
 
Все это у меня участвует в шаблоне для отдельного типа контента, пользуюсь модулем шаблонов для CCK contemplate, теоретически должно работать в файле 'node-content-имяконтента.tpl.php', но увы, не работает в файле 'field-field_имяполя.tpl.php', о чем здесь и здесь доложено тов. dopry, автору imagefield и imagecache.
Сей баг сильно осложняет разработку, ведь CCK может использовать одни и те же поля в разных типах контента, а значит логичнее написать по шаблону на каждое поле и управлять их порядком в ноде с помощью веса. При создании нового типа контента из уже имеющихся полей не потребуется делать дополнительную работу для его оформления.
Вместо этого приходится описывать каждый тип контента, в основном, методом copy/paste, это более громоздко и плохо поддается отладке.
К сожалению, тов. dopry пока что безмолвствует по данному поводу.


Опубликовано tema в пт, 28/07/2006 - 10:55.

еще один. Alex, пожалуйста, разреши нам удалять свои комментарии!


Опубликовано clubwave.ru в пн, 04/09/2006 - 14:23.

у меня не работает этот самый imagecache

даже если писать просто в адресе
site.ru/files/imagecache/thumbs/files/pic.jpg

может нужно в .htaccess что-то дописать?

в чём может быть проблема?


Опубликовано Гость (гостевой логин) в вт, 05/09/2006 - 12:53.

проделал данную операцию на главной странице( т.е. теазер) вываливается вот такая ошибка:
Parse error: parse error, unexpected T_STRING in k:\home\drp.loc\www\modules\contemplate\contemplate.module(455) : eval()'d code on line 2

при заходе в статью ошибок нет, но картинки тоже нет, а только ссылка но полную картинку. где копать?


Опубликовано Гость (гостевой логин) в ср, 06/09/2006 - 12:35.

после того как полазил на drupal.com перепробовал все советы, ничего не помогло... но потом всё же заработало, какой-то странный глюк:( нехотелось бы чтоб он вылез при разработке, а не тестировнаие


Опубликовано Natalie в пн, 11/09/2006 - 03:53.

Чтобы imagecache заработал, нужно добавить в .htaccess директории files
+FollowSymlinks
и закомментировать
#RewriteEngine off
Те же инструкции, что и imagefield, но почему-то автор не удосужился добавить инструкции в readme.
---
---
All content management systems suck, Drupal just happens to suck less. -- Boris Mann at DrupalCON Amsterdam, August 2005.


Опубликовано tema в вт, 26/09/2006 - 16:11.

...что dopry (аффтар imagefield и imagecache) тормознул свои разработки до тех пор, пока команда CCK наконец определится, как им дальше жить с новым ядром (v5.0).

видимо появится целый File API (не знаю когда и в какой версии Друпала).


Опубликовано Natalie в пн, 23/10/2006 - 03:16.

Что-то у меня эта связка не работает. Делаю так, как говорят авторы, а в результате показывается полная картинка, а не превьюшка.

---
---
All content management systems suck, Drupal just happens to suck less. -- Boris Mann at DrupalCON Amsterdam, August 2005.


Опубликовано Natalie в пн, 23/10/2006 - 03:26.

Похоже, imagecache просто не создает превьюшки
---
---
All content management systems suck, Drupal just happens to suck less. -- Boris Mann at DrupalCON Amsterdam, August 2005.


Опубликовано Dan в сб, 04/11/2006 - 22:07.

У меня следующая фигня:
0. imagecache установлен, правило (normal) создано, .htaccess поправлен.
1. В папке files лежит файл logo_auto.gif
2. Путь /files/logo_auto.gif показывает файл
3. Путь /files/imagecache/logo_auto.gif выдаёт "Page not found" (всё правильно)
4. Путь /files/imagecache/normal/logo_auto.gif выдаёт "Page not found" со следующими сообщениями:

  • The selected file could not be copied, because no file by that name exists. Please check that you supplied the correct filename.
  • warning: getimagesize(files/imagecache/normal/logo_auto.gif): failed to open stream: No such file or directory in z:\home\et0\www\modules\imagecache\imagecache.module on line 139.
  • warning: filesize(): Stat failed for files/imagecache/normal/logo_auto.gif (errno=2 - No such file or directory) in z:\home\et0\www\modules\imagecache\imagecache.module on line 142.
  • warning: fopen(files/imagecache/normal/logo_auto.gif): failed to open stream: No such file or directory in z:\home\et0\www\includes\file.inc on line 561.

При этом, в папке files создаётся каталог imagecache\normal и создаётся(ются) фал(ы) tmplogo_autogif(_0 _1 ...).
Тесты на Денвере. Может из-за этого?


Опубликовано Dan в сб, 04/11/2006 - 22:34.

Вроде разобрался:
путь к картинке должен быть /files/imagecache/normal/files/logo_auto.gif, то есть:
'/files/imagecache/normal/files'. $item['filename']
или
'/files/imagecache/normal/'. $item['filepath']

Непонятно, почему у tema работает...

PS: /admin/settings: File system settings -- Public


Опубликовано dobradmin в ср, 21/03/2007 - 08:01.

Парюсь второй день.... на локальной машине imageche работает на пять....все отлично и замечательно на хостинге траблы....пишет не могу найти файло в директории. на локальной тоже было однако прописал права на tmp и files и все заработало.....на хостинге уже даже так сделал /files/imagecache/big/files поставил 777 права....все равно пресет big не отрабатывает...на tmp тоже все 777....может кто сталкивался. хостинг мастерхост.


Опубликовано MAMONT в ср, 21/03/2007 - 14:14.

А можно сжатую инструкцию по imagecache?
Я модуль проинсталировал. Захожу по /admin/settings/imagecache/ и создаю правило, например kartinka. После чего меня возращает на эту же страницу, при этом запись в БД (imagecache_action, imagecache_preset) и никаких правил вводить не дает.

Модуль upload включён. Краткие ссылки включены. Друпал v 5.1. Модуль imagecache-5.x-1.2.


Опубликовано MAMONT в вт, 27/03/2007 - 09:22.

Можете кто нить выложить сюда свой дамп imagecache_action, imagecache_preset?


Опубликовано Гость (гостевой логин) в вт, 17/04/2007 - 13:42.

проблема с imagecache
установил модуль
создал правило thumb для превью
установил "clean urls"
настроил .httacess

SetHandler Drupal_Security_Do_Not_Remove_See_SA_2006_006
Options None
Options +FollowSymLinks

при загрузке файла не создается ни папки imagecache/thumb
даже при создании таковой папки ниего не происходит
изображение загружается в files/
что сделать что бы imagecache заработал?


Опубликовано vadbars@drupal.org в вт, 17/04/2007 - 13:48.

Скажите, а зачем вам imagecache? Если массовая загрузка картинок и создание превью, то модуль image с этим теперь справляется сам. Или есть в imagecache какая-то "изюминка"?


Опубликовано Dan в вт, 17/04/2007 - 15:50.

imagecache нужен для автоматического создания картинок с разным разрешением из одной исходной.
Чтобы превью создалось, надо к нему обратиться. Путь не помню, но что-то вроде files/imagecache/thumb/your_file.jpg.
Модуль это хорош именно в связке с CCK и imagefield


Опубликовано vadbars@drupal.org в вт, 17/04/2007 - 15:59.

imagecache нужен для автоматического создания картинок с разным разрешением из одной исходной.
Но ведь и image не вручную создает разные "дериваты" от картинки - thumbnails, preview, любые свои форматы, original.


Опубликовано Dan в вт, 17/04/2007 - 16:46.

Как-то я этот момент пропустил. Спасибо за информацию!


Опубликовано Natalie в вт, 17/04/2007 - 17:50.

image создает ноду для каждой картинки, что не всегда надо. А imagecache работает с imagefield, - полем для картинки ССК.


Опубликовано Dan в вт, 17/04/2007 - 18:07.

Ага, точно!
Я помню он мне чем-то не понравился :)


Опубликовано kiev1 в ср, 18/04/2007 - 06:40.

разобрался!

правило назвал logo1

1 директории куда будут создаваться картинки поля imagefield назвал files/logo1

2 откуда брать обработанные модулем imagecache превьюшки?

в директории files/imagecache/files/logo1/ вижу необработанные картинки

обработанные лежат в files/imagecache/logo1/files/logo1/


Опубликовано kiev1 в пт, 14/09/2007 - 08:12.

прибейте спамера ttt,allsearchx,biz пожалуйста - он во многих статьях drupal.ru прописался


Опубликовано shamaner в вт, 16/10/2007 - 02:07.

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


Опубликовано Yuri (гостевой логин) в ср, 07/11/2007 - 09:46.

Следует обратить внимание что imagecache ищет запрашиваемую катринку в корневом каталоге файловой системы друпала (Administer -> Site configuration -> File system -> File system path).
При этом он не учитывает настройку каталога куда складываются изображения для заданного поля imagefield ( Administer -> Content management -> Content types -> Ваш тип контента -> Ваше поле -> Image path).

Выход:

  1. Для корректной работы необходимо в настройках Шаблона контента ( Content template) использовать проверку на "заполнение" поля Image path и подставлять его в URL изображения.
  2. Не заполнять поле Image path, что ведёт к скоплению кучи картинок в каталоге files


Опубликовано Ilja в пт, 11/01/2008 - 19:41.

у меня тоже не работает imagecache. ни папки не создаются ни превьюшки... пробовал и на локалке и на хосте не работает и всё тут.
можно подробно написать где и что поправить


Опубликовано Dan в пн, 14/01/2008 - 14:05.

2Ilja: как проверяете?


Опубликовано seaji в пн, 14/01/2008 - 16:23.

Что то вы народ замудрили тут совсем. Какие то пути прописывать .htaccess менять .... бррр...
Вот связка Imagefield + Imagecache + LightBox2
http://artterem.be-in.ru/projects/2007/solomennaya-krysha-i-telegi-v-res...
Все просто как раз два три.
1. Создаете новый тип материала с полем Imagefield (допустим тип image)
2. Создаете новое правило для Imagecache (допустим rule)
3. Переходите на http://ваш_сайт/admin/content/types/image/display (админ->содержание->типы материалов->ваш тип->display fields) там будет возможность выбора как показывать ваши картинки (просто превью, превью со ссылкой, как LightBox - если он установлен)
4. Теперь в шаблоне можно использовать <?php print $node->content['field_имя_поля_картинки'][0]['#value'?> и все будет печататься только так.

Foreach() к этому делу прикрутить я думаю не сложно.

См. файл. В моем случае тип материала "Новые проекты" а правило для imagecache называется project_gallery


Опубликовано Natalie в пн, 14/01/2008 - 18:06.

У пробую связку Imagefield+Imagecache+Thickbox. Все работает даже без дополнительных шаблонов. И даже с views интегрируется :)


Опубликовано Ilja в пн, 14/01/2008 - 19:30.

2Dan

в моём случае поле называется 'field_photo' , namespace для превьюшек - 'preview'.

Для teaser:

<div class="field-images">
<?php print l("<img src="/files/imagecache/preview/$field_photo[0]['filename'] alt=$field_photo[0]['alt'] />", "node/$nid", array('title' => $field_photo[0]['title']), NULL, NULL, FALSE, TRUE); ?>
</div>
<?php } ?>

вываливается ошибка
Parse error: syntax error, unexpected T_STRING in Z:\home\kab.info\www\modules\contemplate\contemplate.module(713) : eval()'d code on line 2

Для body:

<div class="field-images">
<div class="field-items">
<?php foreach ((array)$field_photo as $item) { ?>
<div class="field-item">
<?php print l('<img src="/files/imagecache/preview/'. $item['filename'] .'" alt="'. $item['alt'] .'" />', $item['filepath'], array('title' => $item['title']), NULL, NULL, FALSE, TRUE); ?>
</div>
<?php } ?>
</div>
</div>

всё работает! превьюшки создаются в папке /files/imagecache/preview/

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

и еще в обоих случаях альт картинки должен быть заголовком материала (title).

помогите с кодом :)


Опубликовано Ilja в пн, 14/01/2008 - 20:28.

Thickbox - суупер просто то что нужно !!!


Опубликовано seaji в пн, 14/01/2008 - 21:29.

2 Ilja
Не понятно почему Вы не хотите использовать такую простую конструкцию

<?php foreach ($node->field_photo as $item) { ?>
         <div class="field-item"> <?php print $item['view'] ?></div>
         <?php } ?>

а используете это монстрообразное образование:

<?php foreach ((array)$field_photo as $item) { ?>
<div class="field-item">
<?php print l('<img src="/files/imagecache/preview/'. $item['filename'] .'" alt="'. $item['alt'] .'" />', $item['filepath'], array('title' => $item['title']), NULL, NULL, FALSE, TRUE); ?>
</div>
<?php } ?>

Система, ведь, сама может сгенерить окончательный HTML так как вы ей укажете на странице "администрирование/содержание/типы материалов/ваш материал/display fields"


Опубликовано seaji в пн, 14/01/2008 - 21:31.

Кроме того, я где то слышал, что функция l() перестанет работать в шестерке.


Опубликовано Natalie в пн, 14/01/2008 - 21:47.

А куда она денется?
http://api.drupal.org/api/function/l


Опубликовано seaji в пн, 14/01/2008 - 22:33.

Да, ошибся немного.
Однако изменения тож конкретные. Сравните:

D5
l($text, $path, $attributes = array(), $query = NULL, $fragment = NULL, $absolute = FALSE, $html = FALSE)

D6
l($text, $path, $options = array())


Опубликовано Natalie в пн, 14/01/2008 - 23:22.

зато короче :)


Опубликовано andypost@drupal.org в пн, 14/01/2008 - 23:41.

И выходит короче, нередко нужно просто html=true и внутри разбор аргументов проще и быстрее


Опубликовано Ilja в пн, 14/01/2008 - 23:59.

я плохо знаю php....

вот только обрадовался и полез переносить всё на хостинг, но там опять imagecache не хочет создавать превьюшки ....
установил только
cck
date
imagecache
imagefield
thickbox

создал папку files\imagecache\prewiev права на папках 777

запускал cron
пишет set_time_limit() has been disabled for security reasons в файле /home/httpd/vhosts/сайт.ру/httpdocs/includes/common.inc в строке 1991.

может из-за этого не работать?


Опубликовано seaji в вт, 15/01/2008 - 12:51.

Ну не знаю.
Папки ни какие не надо создавать. Все должно само.
А строку 1991 в файле includes/common.inc надо закамментить. У вас хостер не позволяет эту операцию делать.


Опубликовано Ilja в вт, 15/01/2008 - 14:45.

странно...

а ни где не надо поправить что нибудь (в htaccess или template.php) например ?


Опубликовано kiev1 в вт, 15/01/2008 - 21:34.

хорошо теперь когда есть LightBox2 интегрированный с ImageCache, а раньше-то его не было!
а чем LightBox2 от Thickbox отличается, можно пример?


Опубликовано seaji в вт, 15/01/2008 - 22:58.

Тем, что в LightBox2 можно листать стрелками клавиатуры, а в ThickBox нельзя.


Опубликовано Ilja в вт, 15/01/2008 - 23:29.

все перепробовал, даже по инструкции переустановил http://www.drupal.ru/node/10301#comment-67490 на другой домен.... не создает превьюхи и всё тут!
в бд таблицы создает, а папки нет
может на tmp права не те?

расскажите по шагам как вы ставили imagecache, может я что то упустил.

или дело в хостинге (mchost)?

жду помощи... ;)


Опубликовано Dan в ср, 16/01/2008 - 19:35.

2Ilja:

у меня тоже не работает imagecache. ни папки не создаются ни превьюшки... пробовал и на локалке и на хосте не работает и всё тут.
можно подробно написать где и что поправить

Для body: ... всё работает! превьюшки создаются в папке /files/imagecache/preview/

Илья, определитесь, работает или нет :)

<?php print l("<img src="/files/imagecache/preview/$field_photo[0]['filename'alt=$field_photo[0]['alt'] />", "node/$nid", array('title' => $field_photo[0]['title']), NULL, NULL, FALSE, TRUE); ?>

<?php ?>
вываливается ошибка
Parse error: syntax error, unexpected T_STRING in Z:\home\kab.info\www\modules\contemplate\contemplate.module(713) : eval()'d code on line 2

Причём здесь imagecache? Это ошибка в PHP. Imagecache у Вас, судя по "всё работает", работает.
Для конектации строк используется точка: вместо
<?php print l("<img src="/files/imagecache/preview/$field_photo[0]['filename'alt=$field_photo[0]['alt'] />", "node/$nid", array('title' => $field_photo[0]['title']), NULL, NULL, FALSE, TRUE);?>
надо так:
<?php print l("<img src=\"/files/imagecache/preview/{$field_photo[0]['filename']}\" alt=\"{$field_photo[0]['alt']}\" />""node/$nid", array('title' => $field_photo[0]['title']), NULLNULLFALSETRUE); ?>(один из способов).


Опубликовано Dan в ср, 16/01/2008 - 19:48.

В предыдущем посте хотел показать как точку использовать, в процессе передумал :)

Работает или нет imagecach, проверяется очень просто:
- настраиваем imagecahe, создав своё правило, например preview;
- заливаем в каталог /files файл (file.jpg) любым доступным способом, хоть фтп (именно в files, чтоб сдругими каталогами не путаться)
- идём по адресу /files/imagecache/preview/file.jpg

Всё. Если у вас _нормальный_ хостинг, всё должно работать (под словом "нормальный я подразумеваю, что нет каких-нить ограничений, типа запрет на .htaccess или что-то вроде...)


Опубликовано Ilja в ср, 16/01/2008 - 20:26.

2Dan, сори. это я по ходу дела писал ...

уточняю.. на локалке (Denwer3) работает, за исключением моих ошибок в написании кода, превью и папки создаются.

ставлю все тоже самое на хостинг, создаю правило в imagechace, свой тип материала, поля imagefield... в итоге загружается только оригинальная картинка в папку files, thumbs не создаются.

вот параметры

Drupal	5.6
PHP	4.4.7
База данных MySQL	4.1.20
Библиотека GD	bundled (2.0.28 compatible)
Библиотека Unicode	PHP расширение Mbstring
Веб-сервер	Apache
Статус обновления ядра Drupal	Новая
Схема базы данных	Новая
Файл настроек	Защищен
Файловая система	Запись разрешена (публичный метод загрузки)


Опубликовано seaji в ср, 16/01/2008 - 21:32.

Меняйте хостера


Опубликовано Ilja в ср, 16/01/2008 - 22:15.

просто большенство моих сайтов стоят на mchost'e и проблем не возникало... решил drupal освоить и в дальнейшем делать некоторые проекты на нем...

ладно буду искать отдельно подходящего под drupal хостера.


Опубликовано kiev1 в чт, 17/01/2008 - 20:31.

надо логи смотреть - может где-то warning-и вылазят и на мысль наведут


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