Фотогалерея для UMI.CMS любой редакции
На wiki есть небольшая , в которой рассказывается как можно сделать фотогалерею используя протокол UFS. Но на мой взгляд в ней не расскрыта вся тема. Поэтому напишу про свой вариант решения этого вопроса.
Суть задачи следующая, для любой страницы на сайте (хотя вернее сказать для определенного типа данных, к которому будет относиться эта страница) иметь возможность добавить n-е количество картинок с эфектом FancyBox или Lytebox (или каким-то другим, это уже дело вкуса).
Покажу на примере типа данных "Страница контента". Создадим в блоке "Основные параметры [common]" ещё одно поле "Строка" и назовем её например "Путь к папке с картиками" -> "path_images". В это поле мы пропишем путь к папке с картинками которые у нас будут по плану в нашей фотогалерее и которые предварительно нужно загрузить через FTP или файловый менеджер.
В моём случае этот путь выглядит так: /images/auto .
И теперь для простоты вызова и обработки занесем этот путь в переменную, и заготовка для нашего щаблона будет выглядеть следующим образом:
<xsl:template match="/result[@pageId = '42']">
<xsl:variable name="patch_images" select=".//propery[@name = 'path_images']/value" />
</xsl:template>
Здесь я привязал фотогалерею к старнице с определенным id, но по аналогии можно привязать этот шаблон и к определенному типу данных. И далее пропишем вызов шаблона с параметром, который будет обрабатывать наши картинки и выводить их на страницу.
<xsl:apply-templates select="document(concat('ufs://', $patch_images, '/'))/udata" mode="ufs">
<xsl:with-param name="category_images" select="$patch_images" />
</xsl:apply-templates>
Теперь давайте напишем шаблон для обработки картинок. Выглядеть он будет следующим образом:
<xsl:template match="udata" mode="ufs">
<xsl:param name="category_images" />
<xsl:apply-templates select="file" mode="ufs">
<xsl:with-param name="category_images" select="$category_images" />
</xsl:apply-templates>
</xsl:template>
<xsl:template match="file" mode="ufs">
<xsl:param name="category_images" />
<xsl:variable name="photo" select="concat($category_images, '/', @name)" />
<xsl:variable name="smallphoto" select="document(concat('udata://system/makeThumbnail/(.', $photo, ')/100/auto/notemplate/0/1'))//src" />
<p class="item_photo">
<a href="{$photo}" class="fancyLink" rel="gallery">
<img src="{$smallphoto}" />
</a>
</p>
</xsl:template>
Осталось только немного допилить стили (я думаю это уже не столь важно), и фотогалерея готова. Работающий пример фотогалереи Вы можете наблюдать чуть ниже в конце статьи. Также вместо вызова макроса makeThumbnail можно использовать makeThumbnailFull.
Единственно, что в данном примере не очень удобно, это вывод всех картинок сразу на страницу. Поэтому как вариант, здесь можно посоветовать прикрутить немного обработки на javascript, и сделать разбивку на страницы, и выводить уже например по 15 фотографий (это как настроить). Кому интересно могут посмотреть например здесь. Еще как вариант можно прикрутить вызов шаблонов через AJAX, и в итоге получим фотогалерею а-ля картинки от google отдыхают . Но это уже отдельная тема для статьи, и может быть я про это тоже напишу.
11.01.2013