Яндекс карты для K2
На примере плагина яндекс карт для k2 хочу показать как делать плагины для компонента k2 для joomla.
Картинка для затравки:
Не хотите читать? Можете сразу скачать [download id=»28″]
Плагин для k2 представляет собой joomla плагин, который устанавливается в папку plugins/k2.
Xml описание плагина стандартное, за исключением параметров:
<install version="1.5" type="plugin" group="k2" method="upgrade">
<name>Yandex Map K2 Plugin</name>
<author>VampiRUS</author>
<creationdate>July 2012</creationdate>
<copyright>Copyright (c) vampirus.ru</copyright>
<authoremail>vamp1rus@yandex.ru</authoremail>
<authorurl>vampirus.ru</authorurl>
<version>0.1</version>
<license>http://www.gnu.org/licenses/gpl-2.0.html GNU/GPL</license>
<description>Display yandex map for k2 meterials</description>
<files>
<filename plugin="ymap">ymap.php</filename>
<folder>elements</folder>
</files>
<!-- Standard plugin parameters for Joomla! 1.6+ -->
<config>
<fields name="params">
<fieldset name="basic">
<field name="width" type="text" default="425" label="Map width" description="" />
<field name="height" type="text" default="344" label="Map height" description="" />
</fieldset>
</fields>
</config>
<params group="item-extra-fields" addpath="/plugins/k2/ymap/elements">
<param name="map" type="map" default="" label="Карта" description="" />
</params>
</install>
Плагин для версии joomla > 1.5, поэтому отсутствует блок параметров. Зато есть блок «<params group=»item-extra-fields>». Но то и отвечает за отображение параметров в k2 при создании/редактировании элемента. group определяет место, в котором будут выводиться параметры. В данном случае, это страница редактирования материала, таб дополнительных параметров.
Доступные группы:
category — редактирование категории
user — редактирование пользователя
item-content — редактирование материала, таб «Контент»
item-image — редактирование материала, таб «Изображение»
item-gallery — редактирование материала, таб «Галерея изображений»
item-video — редактирование материала, таб «Медиа»
item-extra-fields — редактирование материала, таб «Доп. поля»
item-attachments — редактирование материала, таб «Вложения»
item-other — редактирование материала, таб «K2 плагины»
Параметры K2 полностью совместимы с параметрами joomla 1.5, это даёт возможность добавить свои типы параметров. elements/map.php и будет отвечать за вывод и хранение параметров карты. Карта, это сложный объект нужно запомнить параметры карты и параметры объектов на карте, а для хранения этих данных есть всего одно поле. Поэтому данные будут сохраняться в json, и удобно и есть возможность расширения для добавления нового функционала в будущем.
lat:point[0],
lng:point[1],
zoom:myMap.getZoom(),
type:myMap.getType(),
markers:[{icon:getMarkerType()}]
});
широта, долгота, масштаб, тип карты и массив маркеров. Так как маркер сейчас один и его координаты совпадают с центром карты, то дабы не усложнять, для маркера записывается только тип иконки. Такую структуру можно будет расширить всем, на что хватит фантазии и api яндекс карт.
Так как используется вторая версия api, то есть одна особенность, о которой следует знать: карта не будет отображаться, если она изначально располагается в скрытом элементе. В нашем случает таб дополнительных параметров скрыт. Чтобы решить эту проблему используется код:
$$("#tabExtraFields a").addEvent("click",function(){
(function(){this.container.fitToViewport();}).delay(200,myMap);
});
});
С задержкой в 200мс после клика по табу вызывается метод fitToViewport(). Поэтому если потребуется перенести карту на другой таб, нужно также поменять id таба в этом коде.
Точка на карту добавлена и сохранена. Теперь её нужно отобразить на лицевой части сайта.
За это отвечает файл ymap.php плагина. Начинается всё стандартно
defined('_JEXEC') or die ('Restricted access');
// Load the K2 Plugin API
JLoader::register('K2Plugin', JPATH_ADMINISTRATOR.DS.'components'.DS.'com_k2'.DS.'lib'.DS.'k2plugin.php');
// Initiate class to hold plugin events
class plgK2YMap extends K2Plugin {
// Some params
var $pluginName = 'ymap';
var $pluginNameHumanReadable = 'Яндекс карта';
function plgK2Ymap( & $subject, $params) {
parent::__construct($subject, $params);
}
//...
}
Начинается всё стандартно, за исключением того что нужно подгрузить API плагинов K2 и свойства $pluginNameHumanReadable — то, как будет называться облать с настройками плагина в админке.
Далее идут методы, которые могут быть вызваны из плагина во время отображения страницы во фронтэнде. По месту вызова и названию они совпадают с событиями в joomla, только с префиксом onK2.
function onK2AfterDisplay( &$item, &$params, $limitstart) // Вызывается уже после того, как вся информация уже отображена
function onK2BeforeDisplay( &$item, &$params, $limitstart) // Вызывается перед тем как начинается вывод информации
function onK2AfterDisplayTitle( &$item, &$params, $limitstart) //Вызывается после отображения заголовка, возвращаемый результат будет отображён непосредственно после заголовка
function onK2BeforeDisplayContent( &$item, &$params, $limitstart) //Вызывается перед отображением материала, возвращаемый результат будет отображён непосредственно перед материалом
function onK2AfterDisplayContent( &$item, &$params, $limitstart) //Вызывается после отображения материала, возвращаемый результат будет отображён непосредственно осле материала
function onK2CategoryDisplay( & $category, & $params, $limitstart) //Вызывается при отображении категории
function onK2UserDisplay( & $user, & $params, $limitstart) //Вызывается при отображении страницы пользователя
Карту будем показывать после материала, поэтом блок для карты будем выводить в onK2AfterDisplayContent. Но так как функциональность карты обеспечивается через javascript, то лучше бы добавить его в начало страницы, поэтому потребуется метод onK2PrepareContent, когда мы ещё можем модифицировать заголовок.
Немного про параметры.
У нас 2 типа параметров: общие, которые настраиваются на странице плагина, это ширина и высота карты и для каждого материала в отдельности — данные карты.
общие параметры получаются как обычно для плагинов joomla
$pluginParams = new JParameter($plugin->params);
Индивидуальные получают следующим образом:
Плагин готов и его можно скачать [download id=»28″]
08.08.2012 в 02:51
а есть такой же, но для 2.5 ??
08.08.2012 в 07:17
это для 2,5
13.08.2012 в 19:00
Отличный плагин получился! Все работает. А есть ли возможность расширить функционал плагина, чтобы не вручную искать объект? Как в самом яндексе: поисковая строка, туда вбиваем улицу и дом и он появляется на карте. Не знаю, то это или нет: http://api.yandex.ru/maps/doc/geocoder/
И возможно ли добавлять на карту сразу несколько объектов?
14.08.2012 в 13:12
задел на это есть, ничего не мешает это реализовать. У меня к сожадению пока нет времени это сделать.
24.09.2012 в 16:51
Спасибо за плагин, вопрос только вот — как убрать отображение карты из блога категории K2, а то она мне нужна лишь в полной записи материала?
24.09.2012 в 17:38
отключить плагины, на этой странице
11.12.2012 в 21:48
Как сделать, чтобы информация о метках хранилась в определенной таблице в разных столбцах. спасибо
12.12.2012 в 08:01
не совсем понял
12.12.2012 в 16:41
чтобы параметр lat хранился в столбце lat а lon в столбце lon
21.12.2012 в 16:03
Отлично, искал параметры для написания плагина под K2 и вспомнил про твою статью… Очень помогла. Амперса́нды перед переменными можно убрать? Это ведь не влияет на работу в PHP5?
21.12.2012 в 16:14
да
21.12.2012 в 16:13
item-other – редактирование материала, таб “K2 плагины” — а есть возможность переопределить название этой вкладки каким бы то нибыло способом?
21.12.2012 в 16:14
переименновать в языковом менеджере
21.12.2012 в 17:37
Надо бы еще пару параметров дописать для выбора места вывода: над и под контентом, но думаю сам добавлю… благо код понятный
22.01.2013 в 05:34
Добрый день! Установил плагин. скажите, пожалуйста, а где писать адрес, чтобы на карте он отобразился?
22.01.2013 в 13:50
Только точку на карте можно указать.
02.02.2013 в 02:49
Доброго времени! Может дополнишь плагин, хотелось бы возможность добавлять много меток на карту и контент метки. Готов внести небольшое пожертвование! или подскажи, как это правильно реализовать!
05.04.2013 в 03:44
Это у меня одного карта отображается без элементов управления(zoom, выбор типа)? Или у всех так? и как эти элементы управления на ней отобразить, подскажите если знаете. Заранее благодарен.