Page 1 of 1

Использование плагина ImageGallery + хак

Posted: Wed Apr 01, 2009 11:22 am
by gasman
Всем добрый день.
Надеюсь, то, что я опишу ниже, кому-нибудь да пригодится.

Итак, у меня появилась потребность на каждую страницу сайта после основного текста выводить галерею соответствующих этой странице фотографий. Для достижения этой цели решено было использовать дефолтный плагин ImageGallery. Для удобства дальнейшего использования и структуризации всех фотографий было решено использовать в названиях папок алиасы страниц, на которых в дальнейшем должны появляться фотографии. Т.е. если у нас есть страница первого уровня, скажем, "О компании" с алиасом, скажем, "company", то путь к изображениям для этой страницы должен выглядеть следующим образом: "uploads/images/company/".

Сказано — сделано.

Ищем здесь подходящую нам переменную, находим $mHierarchyPath, которая должна выводить путь до текущей страницы, например "company" для первого уровня, или "company/contacts" — для второго, и т.д.

После этого в шаблон добавляем красивый динамический путь до изображений:

Code: Select all

{capture assign="gallery_path"}uploads/images/{$content_obj->mHierarchyPath}/{/capture}
Т.е. {$gallery_path} у нас теперь выводит следующее значение: "uploads/images/company/", если мы находимся на странице "О компании" с алиасом "company" или "uploads/images/company/contacts/", если мы находимся в подразделе "О компании -> Контактная информация" с алиасом "contacts".

Теперь, в шаблон, после тега {content} вставляем следующую конструкцию:

Code: Select all

{ImageGallery picFolder=$gallery_path}
При этом не забываем указать дополнительные параметры для плагина.


Внимание!

И вот тут начинается самое интересное.
Если мы перейдём на страницу с неким алиасом, а одноимённой папки с изображениями на сервере нет, то у нас плагин не заработает и не даст загрузиться остальной части сайта. Это нам совершенно не подходит, потому что для некоторых страниц нам совсем не обязательно делать галерею. И не хочется создавать пустые папки, если они не нужны.

Учитывая, что я вовсе не программист и мало что в этом смыслю, пришлось задействовать мануал по PHP, где нашлась замечательная функция is_dir. Это нам вполне должно подойти.

Открываем файл plugins/function.ImageGallery.php и добавляем туда небольшой хак:

Находим строку:

Code: Select all

//Read Image Folder
И перед ней вставляем:

Code: Select all

if (is_dir($picFolder)) {

Потом находим строку:

Code: Select all

function smarty_cms_help_function_ImageGallery() {
И перед ней вставляем:

Code: Select all

}

Вот и всё. Теперь, если у нас есть папка с изображениями в uploads/images/, имя и путь которой совпадают с алиасом текущей страницы, то мы увидим после контента галерею всех изображений, находящихся в этой папке.

Остаётся только с помощью CSS оформить всё это дело на свой вкус и радоваться жизни.

Спасибо за внимание. )

P.S. Версия CMSMS — 1.5.2


С уважением.