Страница 1 из 1

K2 – имена изображений

СообщениеДобавлено: 29 сен 2015, 11:36
alex
Те, кто использовал компонент K2 на своём сайте и хоть немного работает с кодом, а также заинтересован в хорошей индексации сайта поисковыми системами, наверняка обращал внимание на то, что при загрузке изображения для материала, исходное имя изображения пропадает и заменяется на случайный набор символов вида b02e8e491b09a55f1bac8b5f7f969c26.jpg, b02e8e491b09a55f1bac8b5f7f969c26_S.jpg, b02e8e491b09a55f1bac8b5f7f969c26_XL.jpg. Точнее, это не случайный набор символов, а результат работы функции md5 от слова "Image" с солью в виде id материала.
Название изображения материала K2 в базе данных не хранит, а генерирует его каждый раз при работе скрипта.

Это происходит в следующих файлах:

administrator/components/com_k2/models/item.php
administrator/components/com_k2/models/items.php
administrator/components/com_k2/views/item/view.html.php
administrator/components/com_k2/views/items/tmpl/default.php
components/com_k2/models/item.php
components/com_k2/models/itemlist.php
components/com_k2/views/item/view.html.php
modules/mod_k2_content/helper.php
modules/mod_news_pro_gk4/tmpl/layout.parts.php (если этот модуль установлен).

В виде примерно следующих выражений:
$handle->file_new_name_body = md5("Image".$row->id);
$sourceImageXS = JPATH_ROOT.DS.'media'.DS.'k2'.DS.'items'.DS.'cache'.DS.md5("Image".$item->id).'_XS.jpg';

Но, если мы заботимся о нормальной индексации сайта поисковиками и т. п., то можем захотеть, чтобы имя изображения генерировалось в человекочитаемом виде на основе, например, исходного имени файла, или алиаса материала, с добавлением просто id материала для уникализации имени.
Для примера, сделаем так чтобы вместо этого нечитаемого md5 имя файла представляло собой алиас материала с добавлением id материала.
Для начала в файле administrator/components/com_k2/models/item.php поменяем строку
$handle->file_new_name_body = md5("Image".$row->id);
на
$handle->file_new_name_body = $row->alias.'_'.$row->id;

Далее нам нужно пройтись по всем файлам, указанным выше и поменять все вхождения генерации имен с md5, например:
$filename = md5("Image".$current->id);
на
$filename = $current->alias.'_'.$current->id;

$sourceImageM = JPATH_ROOT.DS.'media'.DS.'k2'.DS.'items'.DS.'cache'.DS.md5("Image".$item->id).'_M.jpg';
на
$sourceImageM = JPATH_ROOT.DS.'media'.DS.'k2'.DS.'items'.DS.'cache'.DS.$item->alias.'_'.$item->id.'_M.jpg';

$item->nextImageMedium = JURI::base(true).'/media/k2/items/cache/'.md5("Image".$nextItem->id).'_M.jpg'.$timestamp;
на
$item->nextImageMedium = JURI::base(true).'/media/k2/items/cache/'.$nextItem->alias.'_'.$nextItem->id.'_M.jpg'.$timestamp;
и т. д.
В общем, главное аккуратно пройтись поиском по строке "md5" и ничего не пропустить.