_×

Создаем сниппет в ModX для вывода изображений (часть первая)

Создаем сниппет в ModX для вывода изображений (часть первая)

Итак займемся разработкой сниппета в ModX. Сама идея заключается в том, что сниппет будет выводить изображения из указанной папки, по определенному стилю, также зададим количество выводимых  изображений и отфильтруем изображения по ориентации.

Первое с чего начнем, так это получим базовую директорию сайта и укажем рабочую папку. Для начала создадим в ModX сниппет и для него несколько параметров:

Создание сниппета Создание параметров для сниппета

 Вызвать этот сниппет с указанными нами параметрами можно следующим образом:

[[!getImageList? &tpl=`chunk` &folder=`myFolder` &count=`6` 
&orientation=`album`]]

Обращу ваше внимание, что если явно не задать параметры count и orientation, то сниппет возьмет их из значений по умолчанию, которые мы указали при создании параметров.

Далее приступим к разработке кода. Для начала получим базовую директорию нашего сайта:

$path = $_SERVER ['DOCUMENT_ROOT'];

Переменная $_SERVER - это массив, содержащий информацию, такую как заголовки, пути и местоположения скриптов. Подробнее можно почитать здесь

Дальше откроем директорию и считаем с нее все файлы. Для этого сделаем так:

if ($handle = opendir($path.$folder)) {
while (false !== ($file = readdir($handle))) {
}
}
closedir($handle);

opendir - возвращает дескриптор каталога для последующего использования, если каталог не удается открыть или его не существует, то вернется false, для этого у нас стоит проверка верно ли открылась или нет.

В цикле мы с помощью readdir получаем каждый файл в переменную file в виде объекта, который содержит базовую информацию о файле.

Внутри цикла мы установим счетчик i, который будет считать количество считанных файлов и сравнивать его мы будем с параметром count. Как только i превысит count мы выйдем из цикла и закончим вывод.

$i++; 
if($i>$count){
break;
}
else{
}

Внутри else мы проверим является ли "файлом" наш файл, а то может попасться и директория. Для этого мы будем использовать is_dir - определяет, является ли файл директорией.

if(!is_dir($file)){ //здесь будет вывод
}else $count++;

Для чего в else увеличиваем количество изображений для вывода? Смотрите, мы прочитали файл - увеличили i, но он оказался директорией, мы его не выводим, но получается что один файл потеряли и вместо указанных 4 у нас получится 3, для этого и происходит увеличение count.

Теперь перейдем к десерту. Для начала создадим чанк для вывода:

Создание чанка

 Дальше, где комментарий //здесь будет вывод мы создадим массив плейсхолдеров, которые будем выводить и значения для них.

$ph = array('image'=>$folder.$file);

т.е мы будем выводить плейсхолдер image в котором будет содержаться путь до нашего файла.

Теперь получим наш чанк, установим в него наши плейсхолдеры и выведем.

echo $modx->getChunk($tpl,$ph);

Универсальная функция getChunk, которая найдет наш чанк, своего рода выполняет его в фоне с параметрами, указаными в массиве $ph и вернет нам чистый html-код, который мы и выведем.

На этом все. В следующей статье расскажу секрет параметра orientation, а также усовершенствуем наш сниппет, а именно введем еще несколько параметров и плейсхолдеров для вывода.

Теги: modx 10.01.2013