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


Фотография
* * * * * 2 Голосов

Шаблон Cloud Zoom для элемента JBImage

рецепт cloud zoom jbimage

Сообщений в теме: 67

#1 Cheren-dow

Cheren-dow

Отправлено 24 September 2013 - 07:26

*
Популярное сообщение!

Cloud Zoom - jQuery плагин который создает эффект лупы для изображений. Во многих интернет магазинах кто то уже видел что то подобное, а сейчас мы сделаем интеграцию Cloud  Zoom jQuery Plugin с элементом JBImage.
 
1. Скачиваем плагин Cloud Zoom и раскладываем файлы по папкам
Так как последние версии этого плагина платные мы будем использовать более раннюю версию (1.0.2) и она ни чем не хуже.
Скачиваем архив с файлами.Прикрепленный файл  cloud-zoom.zip   7.12К   400 Количество загрузок:
 
В архиве находятся 2 js файла и файл css стилей. Из них нам потребуются:

  • cloud-zoom.1.0.2.js
  • cloud-zoom.css

Распаковываем архив в папку.
 
Т.к мы будем следовать логике JBZoo давайте переименуем файлы следующим образом:

  • cloud-zoom.1.0.2.js в jquery.cloud-zoom.js
  • cloud-zoom.css в jbzoo.cloud-zoom.css

Теперь переместим jquery.cloud-zoom.js в папку

  1. сайт\media\zoo\applications\jbuniversal\assets\js\

а jbzoo.cloud-zoom.css в

  1. сайт\media\zoo\applications\jbuniversal\assets\css\

Файлы в нужных местах.
 
 
 
2. Создаем шаблон для Cloud Zoom в файле jbimage.xml
Переходим в папку и открываем фал jbimage.xml

  1. сайт\media\zoo\applications\jbuniversal\elements\jbimage\

Находим блок параметров template

  1. <param name="template" type="list" default="default" label="JBZOO_JBIMAGE_TEMPLATE"
  2. description="JBZOO_JBIMAGE_TEMPLATE_DESC">
  3. <option value="default">JBZOO_DEFAULT</option>
  4. <option value="link">JBZOO_LINK</option>
  5. <option value="itemlink">JBZOO_ITEM_LINK</option>
  6. <option value="popup">JBZOO_POPUP</option>
  7. </param>

и добавляем option

  1. <param name="template" type="list" default="default" label="JBZOO_JBIMAGE_TEMPLATE"
  2. description="JBZOO_JBIMAGE_TEMPLATE_DESC">
  3. <option value="default">JBZOO_DEFAULT</option>
  4. <option value="link">JBZOO_LINK</option>
  5. <option value="itemlink">JBZOO_ITEM_LINK</option>
  6. <option value="popup">JBZOO_POPUP</option>
  7. <option value="cloud">JBZOO_CLOUD_ZOOOM</option>
  8. </param>

Теперь добавим константу JBZOO_CLOUD_ZOOOM в файл русской локализации. Открываем файл ru-RU.ini

  1. сайт\media\zoo\applications\jbuniversal\language\ru-RU\ru-RU.com_jbzoo.ini

И в самом низу добавляем строку

  1. JBZOO_CLOUD_ZOOOM = "Cloud Zoom"

Перейдем в тип, например шаблон FULL и в элементе jbimage выберем только что созданный шаблон Cloud Zoom.
ssm5a761c2a_200x0.png
Сохраняем.
 
 
 
3. Вывод шаблона Cloud для нашего изображения
Первым делом переходим в папку 

  1. сайт\media\zoo\applications\jbuniversal\elements\jbimage\tmpl

и создаем фал jbimage-cloud.php - этот файл будет шаблоном.
 
Теперь нужно добавить немного кода в функции _render в файле:

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

Нам нужен последний elseif - конкретно этот:

  1. } elseif ($template == 'popup') {
  2.  
  3. $appendClass = 'jbimage-gallery';
  4. if ((int)$params->get('group_popup', 1)) {
  5. $rel = 'jbimage-gallery-' . $this->getItem()->id;
  6. }
  7.  
  8. $target = '_blank';
  9. $widthPopup = (int)$params->get('width_popup', 0);
  10. $heightPopup = (int)$params->get('height_popup', 0);
  11.  
  12. if ($image) {
  13. $url = $this->_jbimage->getUrl($this->get('file'));
  14. if ($widthPopup || $heightPopup) {
  15. $newImg = $this->_jbimage->resize($image->orig, $widthPopup, $heightPopup);
  16. $url = $newImg->url;
  17. }
  18. }
  19. }

После этой проверки добавляем ещё одну. Должно быть так:

  1. } elseif ($template == 'popup') {
  2.  
  3. $appendClass = 'jbimage-gallery';
  4. if ((int)$params->get('group_popup', 1)) {
  5. $rel = 'jbimage-gallery-' . $this->getItem()->id;
  6. }
  7.  
  8. $target = '_blank';
  9. $widthPopup = (int)$params->get('width_popup', 0);
  10. $heightPopup = (int)$params->get('height_popup', 0);
  11.  
  12. if ($image) {
  13. $url = $this->_jbimage->getUrl($this->get('file'));
  14. if ($widthPopup || $heightPopup) {
  15. $newImg = $this->_jbimage->resize($image->orig, $widthPopup, $heightPopup);
  16. $url = $newImg->url;
  17. }
  18. }
  19. } elseif($template == 'cloud'){ // если выбранный шаблон есть наш cloud
  20.  
  21. $appendClass = 'cloud-zoom'; // устанавливаем необходимы class
  22. /**
  23. * $rel - это атрибут rel для ссылки которая ссылается на большое изображение.
  24. * Именно в нем будут находится все настройки для плагина.
  25. * Чуть ниже в статье мы сделаем 3 основных параметра(настройки)
  26. * для нашего шаблона которыми будем управлять из админки. А пока оставим так.
  27. * Обо всех параметрах в атрибуте rel будет написано ниже.
  28. */
  29. $rel = 'adjustX: 10 , adjustY: -4, softFocus: true';
  30.  
  31. $target = '_blank';
  32. $widthPopup = (int)$params->get('width_popup', 0);
  33. $heightPopup = (int)$params->get('height_popup', 0);
  34.  
  35. if ($image) {
  36. $url = $this->_jbimage->getUrl($this->get('file'));
  37. if ($widthPopup || $heightPopup) {
  38. $newImg = $this->_jbimage->resize($image->orig, $widthPopup, $heightPopup);
  39. $url = $newImg->url;
  40. }
  41. }
  42. }

Сохраним файл.
 
Теперь открываем недавно созданный шаблон(вид) - это файл jbimage-cloud.php находится по адресу:

  1. сайт\media\zoo\applications\jbuniversal\elements\jbimage\tmpl\jbimage-cloud.php

И вставляем в него следующие строки:

  1. defined('_JEXEC') or die('Restricted access');
  2.  
  3. echo '<a ' . $linkAttrs . '><img ' . $imageAttrs . ' /></a> ' . "\n";

Сохраним и посмотрим на сайте что  у нас получилось. Сейчас видно что наш шаблон cloud для JBImage работает. 
ssmf87b187f_200x0.jpg
Но ни какой "лупы" мы не наблюдаем. Все потому что мы не подключили jquery.cloud-zoom.js и jbzoo.cloud-zoom.css.
 
 
 
4. Подключаем jquery.cloud-zoom.js и jbzoo.cloud-zoom.css
Эти файлы можно на прямую подключить в файле:

  1. сайт\media\zoo\applications\jbuniversal\elements\jbimage\tmpl\jbimage-cloud.php

Но так как мы придерживаемся логике JBZoo мы сделаем немножко по другому.
 
Открываем файл jbassets.php. Он располагается тут:

  1. сайт\media\zoo\applications\jbuniversal\framework\helpers\jbassets.php

Добавляем следующий код(функцию подключения файлов) где нибудь после функции public function fancybox() (не принципиально)

  1. /**
  2. * Include Cloud Zoom
  3. */
  4. public function cloudzoom(){
  5. $this->jQuery();
  6. $this->_include(array('jbassets:css/libraries.css'), 'css');
  7. $this->_include(array('jbassets:js/jquery.cloud-zoom.js',), 'js');
  8. }
  1. public function jbimageCloudZoom(){
  2. $this->jQuery();
  3. $this->cloudzoom();
  4. }

Сохраняем. Переходим на страницу сайта с изображением, обновим и опять ничего не работает. А не работает потому что не вызвали функцию jbimageCloudZoom в файле шаблона(вида) jbimage-cloud.php. Перейдем в файл jbimage-cloud.php и вызовем эту функцию. Теперь файл должен иметь следующий вид:

  1. <?php
  2. defined('_JEXEC') or die('Restricted access');
  3. /**
  4. * Подключаем css и js файлы
  5. */
  6. App::getInstance('zoo')->jbassets->jbimageCloudZoom();
  7.  
  8. echo '<a ' . $linkAttrs . '><img ' . $imageAttrs . ' /></a> ' . "\n";

Теперь "Лупа" должна работать. Проверяем и видим:
ssme2abb0e1_200x0.jpg
 
Все работает.
 
 
 
5. Совершенствуем 
Сейчас добавим несколько параметров для управления элементом из админ панели.
1. Открываем файл локализации:

  1. сайт\media\zoo\applications\jbuniversal\language\ru-RU\ru-RU.com_jbzoo.ini

Добавляем вниз:

  1. JBZOO_RESIZE_CLOUD_X = "Положение по X"
  2. JBZOO_RESIZE_CLOUD_X_DESCRIPTION = "Позволяет точно установить положение окна в px большого изображение по оси Х"
  3. JBZOO_RESIZE_CLOUD_Y = "Положение по Y"
  4. JBZOO_RESIZE_CLOUD_Y_DESCRIPTION = "Позволяет точно установить положение окна в px большого изображение по оси Y"
  5. JBZOO_JBIMAGE_CLOUD_POSITION = "Позиция"
  6. JBZOO_JBIMAGE_CLOUD_POSITION_DESCRIPTION = "Определяет положение окна большого изображения по отношению к уменьшенной копии. Возможные занчения: 'left', 'right', 'top', 'bottom', 'inside' или можно задать ID элемента HTML, например, position: 'element1'"
  7. JBZOO_JBIMAGE_CLOUD_LEFT = "Слева"
  8. JBZOO_JBIMAGE_CLOUD_RIGHT = "Справа"
  9. JBZOO_JBIMAGE_CLOUD_TOP = "Сверху"
  10. JBZOO_JBIMAGE_CLOUD_BOTTOM = "Снизу"
  11. JBZOO_JBIMAGE_CLOUD_INSIDE = "Внутри"
  12. JBZOO_RESIZE_CLOUD_TITLE = "Показать заголовок"
  13. JBZOO_RESIZE_CLOUD_TITLE_DESCRIPTION = "Выводить содержание тега title. True или false."

2. Открываем файл jbimage.xml и заменяем все его содержание эти листингом


  1. <?xml version="1.0" encoding="utf-8"?>
  2. <!--
  3. JBZoo App is universal Joomla CCK, application for YooTheme Zoo component
  4.  
  5. @package jbzoo
  6. @version 2.x Pro
  7. @author JBZoo App http://jbzoo.com
  8. @copyright Copyright (C) JBZoo.com, All rights reserved.
  9. @license http://jbzoo.com/license-pro.php JBZoo Licence
  10. @coder Denis Smetannikov <denis@jbzoo.com>
  11. -->
  12. <element type="jbimage" group="JBZoo">
  13. <name>JBZoo Image</name>
  14. <description>JBZoo image element</description>
  15. <author>JBZoo.com</author>
  16. <creationDate>2013 07</creationDate>
  17. <copyright>Copyright (C) JBZoo.com, All rights reserved.</copyright>
  18. <authorEmail>admin@jbzoo.com</authorEmail>
  19. <authorUrl>http://jbzoo.com</authorUrl>
  20. <version>1.0</version>
  21. <params>
  22. <param name="upload_directory" type="text" default="images/uploads/" label="JBZOO_UPLOAD_DIRECTORY"
  23. description="JBZOO_UPLOAD_DIRECTORY_DESC"/>
  24.  
  25. <param name="max_upload_size" type="text" default="512" label="JBZOO_MAX_UPLOAD_SIZE"
  26. description="JBZOO_MAX_UPLOAD_SIZE_DESC"/>
  27.  
  28. <param name="upload_by_user" type="jbbool" default="0" label="JBZOO_JBIMAGE_UPLOAD_BY_USER"
  29. description="JBZOO_JBIMAGE_UPLOAD_BY_USER_DESC"/>
  30.  
  31. <param name="default_enable" type="jbbool" default="0" label="JBZOO_JBIMAGE_DEFAULT_ENABLE"
  32. description="JBZOO_JBIMAGE_DEFAULT_ENABLE_DESC"/>
  33.  
  34. <param name="default_image" type="text" default="" label="JBZOO_JBIMAGE_DEFAULT"
  35. description="JBZOO_JBIMAGE_DEFAULT_DESC"/>
  36.  
  37. </params>
  38. <params group="render">
  39. <param name="separated_by" type="zoolist" default="Space" label="Separated by"
  40. description="CHOOSE_SEPARATOR_REPEATED_ELEMENTS">
  41. <option name="Space"><![CDATA[separator=[ ]]]></option>
  42. <option name="Break"><![CDATA[separator=[<br />]]]></option>
  43. <option name="Span"><![CDATA[tag=[<span>%s</span>]]]></option>
  44. <option name="Paragraph"><![CDATA[tag=[<p>%s</p>]]]></option>
  45. <option name="Div"><![CDATA[tag=[<div>%s</div>]]]></option>
  46. <option name="List Item"><![CDATA[tag=[<li>%s</li>]]]></option>
  47. <option name="Unordered List"><![CDATA[tag=[<li>%s</li>] enclosing_tag=[<ul>%s</ul>]]]></option>
  48. <option name="Ordered List"><![CDATA[tag=[<li>%s</li>] enclosing_tag=[<ol>%s</ol>]]]></option>
  49. <option name="Warp Item"><![CDATA[tag=[<article class="item">%s</article>]]]></option>
  50. </param>
  51.  
  52. <param name="display" type="list" default="all" label="Display"
  53. description="CHOOSE_RENDERING_MODE_ELEMENT_POSITION">
  54. <option value="all">all</option>
  55. <option value="first">first</option>
  56. <option value="all_without_first">all without first</option>
  57. </param>
  58.  
  59. <param name="template" type="list" default="default" label="JBZOO_JBIMAGE_TEMPLATE"
  60. description="JBZOO_JBIMAGE_TEMPLATE_DESC">
  61. <option value="default">JBZOO_DEFAULT</option>
  62. <option value="link">JBZOO_LINK</option>
  63. <option value="itemlink">JBZOO_ITEM_LINK</option>
  64. <option value="popup">JBZOO_POPUP</option>
  65. <option value="cloud">JBZOO_CLOUD_ZOOOM</option>
  66. </param>
  67.  
  68. <param name="group_popup" type="jbbool" default="1" label="JBZOO_GROUP_POPUP"
  69. description="JBZOO_GROUP_POPUP_DESC"/>
  70.  
  71. <param name="width" type="text" default="400" label="JBZOO_RESIZE_WIDTH"
  72. description="JBZOO_RESIZE_WIDTH_DESC"/>
  73.  
  74. <param name="height" type="text" default="300" label="JBZOO_RESIZE_HEIGHT"
  75. description="JBZOO_RESIZE_WIDTH_DESC"/>
  76.  
  77. <param name="@advanced_label" type="jbspacer" default="JBZOO_JBPRICE_FOR_POPUP_TEMPLATE"/>
  78.  
  79. <param name="width_popup" type="text" default="1280" label="JBZOO_RESIZE_POPUP_WIDTH"
  80. description="JBZOO_RESIZE_WIDTH_POPUP_DESC"/>
  81.  
  82. <param name="height_popup" type="text" default="800" label="JBZOO_RESIZE_POPUP_HEIGHT"
  83. description="JBZOO_RESIZE_WIDTH_POPUP_DESC"/>
  84.  
  85. <param name="@advanced_label2" type="jbspacer" default="JBZOO_JBPRICE_FOR_CLOUD_ZOOM_TEMPLATE"/>
  86.  
  87. <param name="cloud_width" type="text" default="400" label="JBZOO_RESIZE_WIDTH"
  88. description="JBZOO_RESIZE_WIDTH_DESC"/>
  89.  
  90. <param name="cloud_height" type="text" default="300" label="JBZOO_RESIZE_HEIGHT"
  91. description="JBZOO_RESIZE_WIDTH_DESC"/>
  92.  
  93. <param name="show_cloud_title" type="radio" default="1" label="JBZOO_RESIZE_CLOUD_TITLE"
  94. description="JBZOO_RESIZE_CLOUD_TITLE_DESCRIPTION">
  95. <option value="0">JNO</option>
  96. <option value="1">JYES</option>
  97. </param>
  98.  
  99. <param name="x_cloud" type="text" default="10" label="JBZOO_RESIZE_CLOUD_X"
  100. description="JBZOO_RESIZE_CLOUD_X_DESCRIPTION"/>
  101.  
  102. <param name="y_cloud" type="text" default="-4" label="JBZOO_RESIZE_CLOUD_Y"
  103. description="JBZOO_RESIZE_CLOUD_Y_DESCRIPTION"/>
  104.  
  105. <param name="cloud_position" type="list" default="default" label="JBZOO_JBIMAGE_CLOUD_POSITION"
  106. description="JBZOO_JBIMAGE_CLOUD_POSITION_DESCRIPTION">
  107. <option value="left">JBZOO_JBIMAGE_CLOUD_LEFT</option>
  108. <option value="right">JBZOO_JBIMAGE_CLOUD_RIGHT</option>
  109. <option value="top">JBZOO_JBIMAGE_CLOUD_TOP</option>
  110. <option value="bottom">JBZOO_JBIMAGE_CLOUD_BOTTOM</option>
  111. <option value="inside">JBZOO_JBIMAGE_CLOUD_INSIDE</option>
  112. </param>
  113.  
  114. </params>
  115. </element>
  116.  

Были добавлены параметры, увидеть разницу с начальным вариантом не составит труда.
 
3. Открываем файл:

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

и ищем наше условие elseif($template == 'cloud'). Тут у нас есть переменная $rel замените ее на следующею строку:

  1. $rel = 'position:\''.$params->get('cloud_position', 'right').'\' , zoomWidth: '.$params->get('cloud_width', 400).' , zoomHeight: '.$params->get('cloud_height', 300).' , showTitle: '.$params->get('show_cloud_title', 1).', adjustX: '.$params->get('x_cloud', 10).' , adjustY: '.$params->get('y_cloud', -4).', softFocus: true';

Тут мы принимаем и выводим установленные значения. 
 
Теперь перейдем в админку и посмотрим что у нам появилось в настройках элемента.
ssmbbc575d5_200x0.png
 
Как видите настройки разделены на 2 "блока" и элемент дополнился дополнительными настройками для Cloud Zoom. Это основные параметры плагина, а если кому то нужно больше(из всех возможных в плагине) вы можете добавить свои параметры по аналогии.
 
Для самых ленивых прикрепляю архив со всеми изменениями.Прикрепленный файл  jbimage+cloud_zoom.zip   16.91К   355 Количество загрузок:
Распаковать в корень сайта с заменой файлов.
 
ВНИМАНИЕ!!!

  • Будьте внимательны при замене файлов.
  • Проверьте с начало на тестовом сайте а уже потом загружайте на рабочий сайт.
  • Хак тестировался на JBZoo 2.0.2, подойдут так же ранние версии начиная с v 2.0.X.
  • Не забывайте - это хак и при следующих обновлениях эти изменения могут пострадать.
  • При появлении проблем Тех.Поддержка ответственности не несет. 

Сообщение отредактировал Cheren-dow: 25 September 2013 - 07:56

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

#2 xatberg

xatberg

Отправлено 25 September 2013 - 13:20

Респект за проделанную работу! побольше бы людей которые делятся наработками :)

 

Кто воспользовался ленивым вариантом из файла 

  1. <?php
  2. defined('_JEXEC') or die('Restricted access');
  3.  
  4. App::getInstance('zoo')->jbassets->jbimageCloudZoom(); <---- надо удалить
  5.  
  6. echo '<a ' . $linkAttrs . '><img ' . $imageAttrs . ' /></a> ' . "\n";
  7.  

я не стал подключать через jbassets.php так как  были ошибки 


  • 0

#3 Cheren-dow

Cheren-dow

Отправлено 25 September 2013 - 13:30

европа Что за ошибки? 


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

#4 xatberg

xatberg

Отправлено 25 September 2013 - 13:34

Cheren-dow сказал(а) 25 Сен 2013 - 12:30:

европа Что за ошибки? 

если пользоватся quickwiev то там слетает шаблон тизера и фулла из за

  1. <?php $this->app->jbassets->jbzooLinks();?>

  • 0

#5 ilham76

ilham76

Отправлено 25 September 2013 - 13:43

Спасибо огромное за труды! сделал всё ручками всё замечательно работало) потом дошёл до пункта 

5. Совершенствуем

 

и в админке пошла белиберда.....дошёл до конца поста и увидел что были файлики для ленивых))) залил их....теперь ошибок нет но и не работает + страница поехала...табы исчезли и всё такое. разбираюсь.


  • 0

там за окном...сказка с несчастливым концом....


#6 Cheren-dow

Cheren-dow

Отправлено 25 September 2013 - 13:54

ilham76 сказал(а) 25 Сен 2013 - 12:43:

Спасибо огромное за труды! сделал всё ручками всё замечательно работало) потом дошёл до пункта 

5. Совершенствуем

 

и в админке пошла белиберда.....дошёл до конца поста и увидел что были файлики для ленивых))) залил их....теперь ошибок нет но и не работает + страница поехала...табы исчезли и всё такое. разбираюсь.

 

По внимательнее - ошибок не должно быть все проверял сам делал)))) Что там в админке за белеберда? Несколько параметров добавили и все. И приняли их в шаблоне. 

 

 

.....странная сказка...)


Сообщение отредактировал Cheren-dow: 25 September 2013 - 13:55

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

#7 ilham76

ilham76

Отправлено 25 September 2013 - 14:21

с админкой разобрался, сорри, мой косяк. такая ситуация сейчас. если все файлы залиты на сайт то не работает, и на карточке товара исчезают табы, фильтр смещается. Правлю файл jbimage.php до 5 пункта (Совершенствуем) и всё работает...заливаю обратно из топика этот файлик и сразу перестаёт....что может быть не так? получается после

  1. 3. Открываем файл:
  2. сайт\media\zoo\applications\jbuniversal\elements\jbimage\jbimage.php
  3. и ищем наше условие elseif($template == 'cloud'). Тут у нас есть переменная $rel замените ее на следующею строку:

у меня всё ломается


  • 0

там за окном...сказка с несчастливым концом....


#8 xatberg

xatberg

Отправлено 25 September 2013 - 14:30

ilham76

  1. App::getInstance('zoo')->jbassets->jbimageCloudZoom();

из файла  

  1. media\zoo\applications\jbuniversal\elements\jbimage\tmpl\jbimage-cloud.php

попробуй удалить


  • 0

#9 Cheren-dow

Cheren-dow

Отправлено 25 September 2013 - 14:30

Попробуйте параметры по одному добавлять и посмотрите в чем дело


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

#10 ilham76

ilham76

Отправлено 25 September 2013 - 15:24

европа сказал(а) 25 Сен 2013 - 13:30:

попробуй удалить

если удаляю то отображение карточки товара исправляется, но лупы нет. возвращаю обратно удалённую строчку.

 в коде

  1.  $rel = 'position:\''.$params->get('cloud_position', 'right').'\' , zoomWidth: '.$params->get('cloud_width', 400).' , zoomHeight: '.$params->get('cloud_height', 300).' , showTitle: '.$params->get('show_cloud_title', 1).', adjustX: '.$params->get('x_cloud', 10).' , adjustY: '.$params->get('y_cloud', -4).', softFocus: true';

меняю обратно на

  1. $rel = 'adjustX: 10 , adjustY: -4, softFocus: true';

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


  • 0

там за окном...сказка с несчастливым концом....






Темы с аналогичным тегами рецепт, cloud zoom, jbimage

Click to return to top of page in style!