Здравствуйте.
Передо мной стояла такая задача, сделать вывод картинок с описанием.
Сделано было так: Добавлен тип инфоблока, добавляются разделы, и в разделы добавляются записи. К каждой записи на вкладке фотогалерея есть возможность добавить изображения.
Клиент добавляет фотографии из медиа-библиотеки, тужа же добавляет и описания к фотографиям.
Как оказалось когда картинки добавляется из МБ, никакой связи с инфоблоком не остается.
Получает просто фотография копируется в отдельную папку.
Единственным параметром, по которому можно было вытащить описание к картинке остается имя картинки.
Я сделал вот как:
Код |
---|
/* Подключаем класс медиа библиотеки */
CModule::IncludeModule("fileman");
CMedialib::Init();
$n = microtime(1);
/* Получаем список всех коллекций в медиабиблиотеке*/
$ar = CMedialibCollection::GetList(array('arFilter' => array('ACTIVE' => 'Y')));
$ID_ARRAY = array();
foreach($ar as $key=>$val) {
$ID_ARRAY[] = $val['ID'];
}
/* Получаем по всем галереям списки фотографий */
$ar_item = CMedialibItem::GetList(array('arCollections'=>$ID_ARRAY));
/* Строим массив формата: КЛЮЧ = ИМЯ ЭЛЕМЕНТА => ЗНАЧЕНИЕ = ОПИСАНИЕ ЭЛЕМЕНТА*/
$ARRAY_FOR_SEARCH = array();
foreach($ar_item as $key=>$val) {
$ARRAY_FOR_SEARCH[$val['NAME']] = $val['DESCRIPTION'];
}
/* Массив готов*/
$f = microtime(1) - $n;
//echo $f;
|
Далее при выводе поиск осуществляется вот так:
Код |
---|
/* Осуществляем поиск в массиве $ARRAY_FOR_SEARCH*/
if(isset($ARRAY_FOR_SEARCH[$arProperty['ORIGINAL_NAME']])) {
$alt = $ARRAY_FOR_SEARCH[$arProperty['ORIGINAL_NAME']];
} else {
$alt = '';
}
|
Но вот какой момент, до внедрения этого кода, время выполнения включаемой области было 0,0013 сек, а после внедрения 0,056 сек. Разница аж в целых 46 раз!
Размер медиа-библиотеки сейчас около 1500 файлов (размер массива)
Посещаемость не большая. Но сайт растет, и такой способ подходит до поры до времени.
Есть ли какое-то более правильное решение этой задачи?
Заранее спасибо.