Перейти к содержимому


Фотография
- - - - -

Как подсчитать количество фотографий в галерее?

jbzoo gallery

Лучший Ответ Cheren-dow , 22 May 2014 - 11:29

realtygroupinfo, можно без вывода элемента посчитать. Для это например можно создать хелпер. Перейдите в папку и создайте файл jbgallery.php

сайт\media\zoo\applications\jbuniversal\elements\jbgallery\jbgallery.php

Со следующим содержимым

<?php

// no direct access
defined('_JEXEC') or die('Restricted access');


/**
 * Class JBGalleryHelper
 */
class JBGalleryHelper extends AppHelper
{

    /**
     * @param $name
     * @param $params
     * @return bool|array
     */
    public function countImage($mainFolder = 'images', $folder = null)
    {
		$path = JPATH_ROOT . '/' . $mainFolder . '/' . $folder;
		
		if (file_exists($path)) {
			$files = JFolder::files($path, '.', false, true, array('.svn', 'CVS', '.DS_Store'));
			$files = array_filter(
				$files, create_function('$file', 'return preg_match("#(\.bmp|\.gif|\.jpg|\.jpeg|\.png)$#i", $file);')
			);
			
			return count($files);
		}
		
		return 0;
    }

}

Далее в шаблоне тизара получаем значение элемента т.е выбранную вами папку

$galleryElement = $item->getElement('bf80c021-3a32-4d35-acbf-f323eae3856f'); // укажите свой id элемента
$galleryData 	= (array)$galleryElement->data();

Далее вызываем метод из нашего хелпера

echo $this->app->jbgallery->countImage('images', $galleryData['value']);

первый параметр это Исходная директория, та что вы указываете в настройках элемента

jd2_200x0.png

 

Мой Результат следующий

$galleryElement = $item->getElement('bf80c021-3a32-4d35-acbf-f323eae3856f');
$galleryData 	= (array)$galleryElement->data();

echo 'Всего картинок в галлереи ' . $this->app->jbgallery->countImage('images', $galleryData['value']);

Видим

vib_200x0.jpg

 

Сделал по быстрому какие подводные камни могут быть не знаю. Но вроде работает.

Перейти к сообщению


  • Закрытая тема Тема закрыта
Сообщений в теме: 7

#1 .polega.

.polega.

Отправлено 22 May 2014 - 06:53

Есть элемент JBZoo Gallery. Каким образом можно подсчитать количество фотографий, которые были загружены в папку галереи? Хочу вывести это значение где-то в тизере рядом с основной фоткой, чтобы посетитель сразу видел, что есть ещё фотографии и их количество. Примерно так:

screenshot_ 2014-05-22 08.49.31.jpg


  • 0

#2 Cheren-dow

Cheren-dow

Отправлено 22 May 2014 - 07:02

realtygroupinfo, здравствуйте в шаблоне элемента

сайт\media\zoo\applications\jbuniversal\elements\jbgallery\tmpl\jbgallery.php

Посчитайте элементы в массиве и выводите в нужном месте

$countImage = count($thumbs);
echo $countImage;

  • 0
Изображение
 

#3 .polega.

.polega.

Отправлено 22 May 2014 - 10:03

Посчитайте элементы в массиве и выводите в нужном месте

Хорошо, всё чудесно, если выводишь собственно в шаблоне галереи.

/media/zoo/applications/jbuniversal/elements/jbgallery/tmpl/jbgallery.php

Считает и количество выводится. Но хотелось бы вывести это количество в тизере, не выводя саму галерею. Она выводится только в шаблоне full.

Я понимаю, что не выводя галереи, не посчитаешь количество фотографий. Попробовал добавить в тизер вывод галереи, но скрыть эту позицию через display:none, чтобы всё-таки фотки посчитались:

<?php if ($this->checkPosition('dummy')) {
	echo '<div style="display:none;">' . $this->renderPosition('dummy') . '</div>';
	echo 'Всего фото: ' . $countImage;
	} ?>

но переменная $countImage  пустая.

Как правильно вытянуть значение этой переменной из шаблона галереи?


  • 0

#4 tapakan

tapakan

Отправлено 22 May 2014 - 11:06

Добавьте в элемент еще один шаблон, который будет выводить просто

$countImage

А в тизере выберите этот шаблон.


  • 1

#5 Cheren-dow

Cheren-dow

Отправлено 22 May 2014 - 11:29   Лучший Ответ

realtygroupinfo, можно без вывода элемента посчитать. Для это например можно создать хелпер. Перейдите в папку и создайте файл jbgallery.php

сайт\media\zoo\applications\jbuniversal\elements\jbgallery\jbgallery.php

Со следующим содержимым

<?php

// no direct access
defined('_JEXEC') or die('Restricted access');


/**
 * Class JBGalleryHelper
 */
class JBGalleryHelper extends AppHelper
{

    /**
     * @param $name
     * @param $params
     * @return bool|array
     */
    public function countImage($mainFolder = 'images', $folder = null)
    {
		$path = JPATH_ROOT . '/' . $mainFolder . '/' . $folder;
		
		if (file_exists($path)) {
			$files = JFolder::files($path, '.', false, true, array('.svn', 'CVS', '.DS_Store'));
			$files = array_filter(
				$files, create_function('$file', 'return preg_match("#(\.bmp|\.gif|\.jpg|\.jpeg|\.png)$#i", $file);')
			);
			
			return count($files);
		}
		
		return 0;
    }

}

Далее в шаблоне тизара получаем значение элемента т.е выбранную вами папку

$galleryElement = $item->getElement('bf80c021-3a32-4d35-acbf-f323eae3856f'); // укажите свой id элемента
$galleryData 	= (array)$galleryElement->data();

Далее вызываем метод из нашего хелпера

echo $this->app->jbgallery->countImage('images', $galleryData['value']);

первый параметр это Исходная директория, та что вы указываете в настройках элемента

jd2_200x0.png

 

Мой Результат следующий

$galleryElement = $item->getElement('bf80c021-3a32-4d35-acbf-f323eae3856f');
$galleryData 	= (array)$galleryElement->data();

echo 'Всего картинок в галлереи ' . $this->app->jbgallery->countImage('images', $galleryData['value']);

Видим

vib_200x0.jpg

 

Сделал по быстрому какие подводные камни могут быть не знаю. Но вроде работает.


  • 2
Изображение
 

#6 .polega.

.polega.

Отправлено 23 May 2014 - 06:35

всем спасибо, всё получилось!

 

Есть несколько замечаний.

Cheren-dow, вы ошиблись, указывая, где создавать хелпер. Правильный путь:
/media/zoo/applications/jbuniversal/framework/helpers/jbgallery.php

и кроме этого в хелпере в строке

    public function countImage($mainFolder = 'images', $folder = null)

нужно тоже корректно указать путь к папке с фото, как в настройке элемента

screenshot_ 2014-05-23 08.15.59.jpg

в моём случае это images/realty

для тизера создал позицию gallery-count и в ней всё-таки опубликовал галерею, но она не выводится (не рендерится), а эта позиция используется для анализа, есть-ли вообщё фото в галерее

screenshot_ 2014-05-23 08.22.14.jpg

код для тизера такой

    <?php if ($this->checkPosition('gallery-count')) :
          $galleryElement = $item->getElement('70d2c2da-292f-47bd-960c-78c61920c086'); // укажите свой id элемента
          $galleryData = (array)$galleryElement->data(); ?>
          <div style="margin-top:20px;margin-left:43px;position:absolute;z-index:100;font-weight:bold;opacity:0.7;background-color:#fff;padding:0px 4px;">
               <?php echo '+' . $this->app->jbgallery->countImage('images/realty', $galleryData['value']) . ' фото'; ?> 
          </div>
    <?php endif; ?>

в итоге получили такой внешний вид

screenshot_ 2014-05-23 08.25.21.jpg

 

tapakan

вам спасибо за идею тоже, но реализовать не получилось.

попробовал, по аналогии с элементом ImagePro,

screenshot_ 2014-05-23 08.28.50.jpg

создать ещё один шаблон для элемента галереи, но ничего не получилось. Наверно, не хватило понимания принципов работы элементов :(

Хотя идея вроде неплохая - опубликовать элемент, но выбрать в настройке шаблон вывода не галерею, а количество фоток в галерее.

Может имеет смысл доработать таким образом элемент галереи в будущем?

 


  • 0

#7 Cheren-dow

Cheren-dow

Отправлено 23 May 2014 - 07:04

Может имеет смысл доработать таким образом элемент галереи в будущем?

Да было бы не плохо сделать возможность выбора шаблонов для элемента из коробки.

Есть несколько замечаний. Cheren-dow, вы ошиблись, указывая, где создавать хелпер. Правильный путь:

На скорую руку набросал - предупредил)

realtygroupinfo, вопрос решен топик закрываем? 


  • 0
Изображение
 

#8 .polega.

.polega.

Отправлено 23 May 2014 - 07:06

да. ещё раз спасибо!


  • 0





Темы с аналогичным тегами jbzoo gallery

Click to return to top of page in style!