Здравствуйте.
Передо мной стояла такая задача, сделать вывод картинок с описанием.
Сделано было так: Добавлен тип инфоблока, добавляются разделы, и в разделы добавляются записи. К каждой записи на вкладке фотогалерея есть возможность добавить изображения.
Клиент добавляет фотографии из медиа-библиотеки, тужа же добавляет и описания к фотографиям.
Как оказалось когда картинки добавляется из МБ, никакой связи с инфоблоком не остается.
Получает просто фотография копируется в отдельную папку.
Единственным параметром, по которому можно было вытащить описание к картинке остается имя картинки.
Я сделал вот как:
Далее при выводе поиск осуществляется вот так:
Но вот какой момент, до внедрения этого кода, время выполнения включаемой области было 0,0013 сек, а после внедрения 0,056 сек. Разница аж в целых 46 раз!
Размер медиа-библиотеки сейчас около 1500 файлов (размер массива)
Посещаемость не большая. Но сайт растет, и такой способ подходит до поры до времени.
Есть ли какое-то более правильное решение этой задачи?
Заранее спасибо.
Передо мной стояла такая задача, сделать вывод картинок с описанием.
Сделано было так: Добавлен тип инфоблока, добавляются разделы, и в разделы добавляются записи. К каждой записи на вкладке фотогалерея есть возможность добавить изображения.
Клиент добавляет фотографии из медиа-библиотеки, тужа же добавляет и описания к фотографиям.
Как оказалось когда картинки добавляется из МБ, никакой связи с инфоблоком не остается.
Получает просто фотография копируется в отдельную папку.
Единственным параметром, по которому можно было вытащить описание к картинке остается имя картинки.
Я сделал вот как:
Код |
---|
/* Подключаем класс медиа библиотеки */ 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 файлов (размер массива)
Посещаемость не большая. Но сайт растет, и такой способ подходит до поры до времени.
Есть ли какое-то более правильное решение этой задачи?
Заранее спасибо.