Виджет "Таблица картинок"

3319
Всем привет!

В дополнении к серии постов дополнений для InstantCMS 2.x (тут и тут) спешу поделиться следующим виджетом - "Таблица картинок".

Пример его работы можно посмотреть на видео:


Из названия понятно, что виджет выводит ряд картинок в виде таблицы. Картинки динамически меняются с различными анимационными эффектами. Клик по одной из картинок ведет на страницу ее просмотра (photos/view/{id-картинки}) с комментариями и голосованием. Варианты эффектов смены картинок настраиваются в разделе "Параметры анимации" виджета. В разделе "Опции" выбирается из какого альбома показывать картинки, а также несколько других параметров.

Исправлены ошибки перехода по картинкам, добавлена возможность настраивать параметры таблицы (количество строк и картинок в них) из админки, а также выбирать любое количество анимаций одновременно. К сожалению, на данный момент на одной странице можно выводить не более одного виджета. Появится больше свободного времени постараюсь исправить. (IMHO, хотя я считаю что показ более двух виджетов это перебор).

Установка производится стандартным способом: Панель администрирования -> Компоненты -> Установить пакет дополнения, затем выбираем заранее скачанный пакет с виджетом и следуем инструкциям по установке. Тут написано немного подробнее.

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

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

P.S. Во избежании недопонимания, следует учитывать следующее: чтобы картинки динамически менялись их количество должно быть больше чем максимальное количество в строке таблицы (например если длина строки составляет 7 ячеек, то картинок в альбоме должно быть минимум 8, в противном случае виджет устанавливает длину строки равную количество картинок / 2). Аналогично если мы хотим выводить 3 строки в таблице по 7 картинок в каждой строке то в альбоме должно быть 22 картинки (3*7+1) или больше. Если картинок меньше, например 18 то виджет будет показывать не 3, а 2 строки по 7 картинок (т.е. 14 картинок одновременно).

Кнопка Вверх/Вниз для InstantCMS 2.x и InstantCMS 1.10.4 | Виджет "Случайная запись"
Комментарии (36)
Алексей Тимофеев 22 августа 2014 в 23:05 -2
Файл не найден пишет
Val 23 августа 2014 в 00:15 +1
Перезалил.
Может у меня руки не из того места растут)) Второй раз такая фигня. Вроде выложил, проверил - все работает, проходит время и "Файл не найден" (
Александр Сергеевич 23 августа 2014 в 05:55 0
Как не меняй настройки(кол-во строк, картинок...), почему-то выводит только по 2 картинки. Во всех позициях(тело, сайдбар). Эфекты смены работают.

Спойлер
Val 23 августа 2014 в 13:49 +2
Я уже писал на форуме, откуда собственно и пошла эта тема... Но это мое упущение что не продублировал в теме.

Такое поведение с виджетом связано с малым количеством фотографий в альбоме (в вашем случае 4 шт).
Чтобы картинки динамически менялись их количество должно быть больше чем максимальное количество в строке таблицы (например если длина строки составляет 7 ячеек, то картинок в альбоме должно быть минимум 8, в противном случае виджет устанавливает длину строки равную количество картинок / 2). Аналогично если мы хотим выводить 3 строки в таблице по 7 картинок в каждой строке то в альбоме должно быть 22 картинки (3*7+1) или больше. Если картинок меньше, например 18 то виджет будет показывать не 3, а 2 строки по 7 картинок (т.е. 14 картинок одновременно).

В общем такая математика.
Shuma 23 августа 2014 в 10:53 0
А можно ли выводить в данной таблице фотографии пользователей из их альбомов?
Val 23 августа 2014 в 13:55 +1
В настройках указываете какой альбом хотите показывать. Если в этом альбоме фотографии, то он будет показывать фотографии )) Или вы хотите выводить аватарки пользователей?
Shuma 23 августа 2014 в 23:53 0
Нет, именно фото пользователей. Но чтобы была возможность выбрать все альбомы, а не один
Val 24 августа 2014 в 14:55 +1
Я намеренно делал вывод одного альбома. Дело в том что виджет грузит все картинки из альбома одновременно, а потом выводит их попеременно. Если грузить все альбомы сразу это плохо отразиться на трафике, страница будет долго загружаться, если в альбомах будет много фотографий.
Вообще у меня есть один компонент-концепт который заменяет функционал альбомов iCMS2. Так вот в нем грузятся сразу все фотографии, с вытекающими отсюда последствиями. Если интересно могу вам его скинуть.
Xamle 23 августа 2014 в 11:08 +1
Интересно!!! Спасибо, + однозначно!!! glasses
platon 23 августа 2014 в 11:16 0
не работает, по крайней мере у меня, шаблон не default но где нужно изменил пути с default на свой, виджет установился но не отображает, написал автору в личку может поможет..., на видео смотрится симпатично.
Val 23 августа 2014 в 13:56 +1
будем разбираться в личке))
SpaceSel 23 августа 2014 в 14:18 +2
Установил, работает.
platon 24 августа 2014 в 08:24 0
работает но только не на главной страницы, т.к. я думаю конфликт с другим виджетом, слайдер контента от site-stroi.ru
Alibek 3 октября 2016 в 11:10 0
Здравствуйте, Вы случайно не помните как решили эту проблему? у меня тоже виджет конфликтует со слайдером контента.
Олег с клещами 27 августа 2014 в 15:25 +3
Немного поправил один файл. Чтобы корректно работал в любом шаблоне надо вместо:
Код PHP:
  1. <?php $this->addCSS('templates/default/css/imagegrid.css'); ?>
  2. <?php $this->addJS('templates/default/js/modernizr.custom.26633.js'); ?>
  3. <?php $this->addJS('templates/default/js/jquery.gridrotator.js'); ?>
написать:
Код PHP:
  1. <?php $this->addCSS("templates/{$this->name}/css/imagegrid.css"); ?>
  2. <?php $this->addJS("templates/{$this->name}/js/modernizr.custom.26633.js"); ?>
  3. <?php $this->addJS("templates/{$this->name}/js/jquery.gridrotator.js"); ?>
Иначе работает только на дефолте.
Олег с клещами 27 августа 2014 в 15:26 0
Файл, конечно imagegrid.tpl.php smile
Val 27 августа 2014 в 23:58 +1
Спасибо! Я не проверял на других шаблонах...
r2 рассказывал про этот момент в скринкасте про написание виджетов.
Кто то знает/проверял при установке файлы копируются в дефолтный шаблон или если есть другой активный, в него?
Олег с клещами 28 августа 2014 в 07:49 0
Файлы копируются в дефолт, но я обычно параллельно копирую и в свой шаблон. И когда надо почудить с css или tpl, то конечно лезешь в свой, а там оказывается подтягиваются css и js из дефолта - вот тут может быть путаница. Мне кажется всем разрабам надо просто принять единый синтаксис подтяжки типа:
Код PHP:
  1. <?php $this->addCSS("templates/{$this->name}/css/mycss.css"); ?>
то есть двойные кавычки и {$this->name} вместо названия шаблона.
Сергей 30 августа 2014 в 01:08 0
+ Всё работает но на странице только в одном экземпляре. sick
Romanovcmc 24 сентября 2014 в 00:48 0
А реально сделать так, чтобы не только из одного альбома показывало? а из нескольких, любых в общем.
Val 24 сентября 2014 в 21:36 +2
Конечно реально)) все упирается в вариант реализации... Пробовал генерировать мультисписок по разному, что-то инстант ругается(( поэтому вот вариант с рукописным вводом ID альбомов:

в файле options_form.php:
коментим или удаляем строки с 14 по 32, там где new fieldList('options:album_id', array( ...
выше добавляем следующее:
Код PHP:
  1.  
  2. new fieldCaption('options:album_ids', array(
  3. 'title' => LANG_WD_CONTENT_IMAGEGRID_ALBUMID,
  4. 'hint' => "Введите через запятую ID альбомов",
  5. 'rules' => array(
  6. array('required')
  7. )
  8. )),
  9.  
в файле widget.php:
меняем 7 строку на
Код PHP:
  1. $album_ids = explode(',', $this->getOption('album_ids'));
и вместо 30-ой строки вставляем
Код PHP:
  1.  
  2. $photos = array();
  3.  
  4. foreach ($album_ids as $album_id) {
  5.  
  6. $photos += $model->getPhotos($album_id);
  7.  
  8. }
  9.  
и проверяем как работает....

P.S. Не забываем что очень большое суммарное количество фото в альбомах загружаемых за раз замедляет загрузку страницы сайта
Romanovcmc 24 сентября 2014 в 23:28 0
Спасибо. Учту.
zotak 3 сентября 2015 в 14:08 0
Подскажите для версии 1.2 это тоже подходит ?
Val 3 сентября 2015 в 19:08 0
Да должно работать, только исходные строки немного сдвинулись на 9 и 31-ую строки joke
universe 25 сентября 2014 в 19:35 0
при включенном кэшировании сайта, модуль не отображается
universe 25 сентября 2014 в 19:48 +1
решил так:
в \system\controllers\content\widgets\imagegrid\widget.php

после 3 строчки:
class widgetContentImagegrid extends cmsWidget {

добавил:
public $is_cacheable = false;
Val 25 сентября 2014 в 20:47 +1
ну как вариант =)
ValeraK 1 октября 2014 в 17:29 0
Виджет работает только с альбомами, а можно ли сделать что б он работал с любым типом контента где есть поле изображение?
Val 1 октября 2014 в 19:21 +2
В теории конечно можно, но сейчас это не реализовано. Позже я буду это делать для своего сайта, тогда выложу обновление.
ValeraK 1 октября 2014 в 23:36 0
Отлично, очень ждем) Виджет тогда станет совсем универсальным)
Рейк Накейкл 11 октября 2014 в 21:08 0
Установил на 2.1.1
На страницах с виджетом ошибка
Fatal error: Class 'widgetContentImagegrid' not found in /home/пользователь/сайт.ру/www/system/core/core.php on line 666
Подскажите пожалуйста как лечить?

В коре.пхп на этой строчке вот это:
Код PHP:
  1. $widget_object = new $class($widget);
Рейк Накейкл 11 октября 2014 в 21:24 0
Ссори, я тормоз. Первый раз устанавливал дополнение, не скопировал файлики из package, думал они из админки загрузятся.
ВСе работает, все ок )) Спасибо!
Xamle 21 августа 2015 в 18:56 +1
Модифицировал маленько виджет. Добавил возможность показа из всех фотоальбомов, ограничение загружаемых картинок, сортировка по дате добавления, по комментариям и по рейтингу фотографий. На всякий случай делаем бэкап файлов. Перед заменой уберите виджет с сайта, чтобы не было белого экрана. В \system\controllers\content\widgets\imagegrid заменяем файл widget.php полностью на вот этот код [hide]
Спойлер
и файл options.form.php меняем на вот это
Спойлер