Буквально вчера нужно было найти решение по выводу яндекс карты в карточке объекта. Сделал я это не создавая нового элемента, но при необходимости сделать его не составит труда, достаточно все просто.
1. Создать позицию где будет выводится сама карта (делал для full - a)
Открываем файл position.xml. Он располагается по адресу
сайт\media\zoo\applications\jbuniversal\templates\catalog\renderer\item\тип элемента\positions.xml
и добавляем новую позицию для full - a
<position name="map">Карта</position>
Теперь в full - е появилась новая позиция Карта
2. Для нашего типа необходима добавить новый элемент это текстовое поле
Нажимаем редактировать поля у нашего типа (в моем случае это Product) и добавляем элемент Текст
3. Добавляем только что созданный элемент в позицию Карта для Full
Внимание: В созданной позиции Карта(map) не должны находиться другие элементы, кроме одного, в котором указан адрес объекта.Он должен быть только один.
4. Добавим нашему Item - у значение для элемента карта
Что бы API яндекса правильно искал точку на карте нужно придерживаться маленькому правилу писать сначало Город, Улица, Дом.
Переходим в элементы и добавляем в уже существующий или создаем новый item. Например:
Проверяем, но ничего не выводиться потому что не сделали вывод данной позиции в шаблоне FULL
5. Добавляем позицию map в шаблон full
В нужном месте вставляем следующий код:
<?php if ($this->checkPosition('map')) : ?> <div id="map"><?php echo $this->renderPosition('map' , array('style' => 'jbmap')); ?></div> <?php endif; ?>
Т.к указали шаблон вывода элемента ('style' => 'jbmap') нужно его создать
6. Создаем шаблон вывода элемента jbmap
Переходим в папку
сайт\media\zoo\applications\jbuniversal\templates\catalog\renderer\element
и создаем файл jbmap.php (создаем исключительно что бы в основном шаблоне была чистота без YandexMap API)
в этот файл вставляем следующие строки:
<?php // no direct access defined('_JEXEC') or die('Restricted access'); // Вывод блока с картой. Указываем нужную высоту и ширину блока echo '<div id="ymaps-map-id_134250506289918332175" style="width: 450px; height: 350px;"></div>'; ?> <script type="text/javascript"> function fid_134250506289918332175(ymaps) { ymaps.geocode('<?php echo $element->render($params); ?>', { results: 1 }).then(function (res){ // Выбираем первый результат геокодирования var firstGeoObject = res.geoObjects.get(0); var map = new ymaps.Map("ymaps-map-id_134250506289918332175",{ center: firstGeoObject.geometry.getCoordinates(), zoom: 16, type: "yandex#map" }); map.controls .add("zoomControl") .add("mapTools") .add(new ymaps.control.TypeSelector(["yandex#map", "yandex#satellite", "yandex#hybrid", "yandex#publicMap"])); ymaps.geocode('<?php echo $element->render($params); ?>', { results: 1 }).then(function (res){ // Выбираем первый результат геокодирования var firstGeoObject = res.geoObjects.get(0); map.geoObjects .add(new ymaps.Placemark(firstGeoObject.geometry.getCoordinates(), {balloonContent: "<?php echo $element->render($params); ?>"}, {preset: "twirl#lightblueDotIcon"})); }); }); }; </script> <script type="text/javascript" src="http://api-maps.yandex.ru/2.0/?coordorder=longlat&load=package.full&wizard=constructor&lang=ru-RU&onload=fid_134250506289918332175"></script>
и сохраняем. Описывать что внутри я не буду, кому интересно вся информация тут.
Теперь зайдем в наш item и мы увидим
Сообщение отредактировал SmetDenis: 20 September 2013 - 21:21