Наверх

Геокарта

Модуль относится к части CMS «Интерактив» и может быть установлен опционально.

Модуль «Геокарта» подключается к другим модулям. В стандартной комплектации DIAFAN.CMS «Геокарта» подключен к модулю «Объявления». В рамках модуля карта подключается в настройках конкретного модуля.

Модуль позволяет отмечать точки на карте для элементов другого модуля. Одному элементу соответствует одна точка. Если подключить модуль к странице сайта, то можно вывести все точки на одной карте. GET-переменная module выводит точки только для выбранного модуля.

Пример:

Модуль «Геокарта» подключен к модулям «Статьи» и «Объявления». Создана страница «Геокарта» http://site.ru/geomap/. На этой странице будет выведена карта с точками всех модулей: и статей, и объявлений. Страница http://site.ru/geomap/?module=ab покажет только точки объявлений.

Подключение

Подключаемая часть – файл modules/geomap/geomap.inc.php. В нем описан класс Geomap_inc. В модуле к объекту класса можно обратиться через переменную $this->diafan->_geomap. Экземпляр класса создается при первом вызове переменной.

Методы

string get ([integer $element_id = 0], [string $module_name = ''], [string $element_type = 'element'], [integer $site_id = 0]) – Показывает точку на карте для элемента.

  • integer $element_id: номер элемента модуля, по умолчанию текущий элемент модуля
  • string $module_name: название модуля, по умолчанию текущий модуль
  • string $element_type: тип данных
  • integer $site_id: страница сайта, к которой прикреплен элемент, по умолчанию текущая страница сайта

Для того, чтобы вывести точка на карте в карточке элемента на сайте, нужно в шаблоне модуля modules/модуль/views/модуль.view.id.php добавить:

Пример:

echo $this->diafan->_geomap->get($result["id"], 'модуль');

void prepare ([integer $element_id = 0], [strint $module_name = ''], [string $element_type = 'element']) – Запоминает данные элемента, которому нужно будет вывести точки на карте.

  • integer $element_id: номер элемента модуля, по умолчанию текущий элемент модуля
  • strint $module_name: название модуля, по умолчанию текущий модуль
  • string $element_type: тип данных

string add ([integer $element_id = 0], [string $module_name = ''], [string $element_type = 'element'], [integer $site_id = 0]) – Редактирование/добавление точки на карте.

  • integer $element_id: номер элемента модуля при редактировании точки
  • string $module_name: название модуля при редактировании точки
  • string $element_type: тип данных
  • integer $site_id: страница сайта, к которой прикреплен элемент, по умолчанию текущая страница сайта

Для вывода карты в форме добавления элемента, нужно в шаблон формы добавления (обычно это файл modules/модуль/views/модуль.view.form.php) включить код:

Пример:

echo $this->diafan->_geomap->add(0, 'модуль');

Редактирование точки на карте для элемента подключается в шаблоне редактирования элемента (обычно это файл modules/модуль/views/модуль.view.edit.php) следующим кодом:

Пример:

echo $this->diafan->_geomap->add($result["id"], 'модуль');

string save ([integer $element_id = 0], [string $module_name = ''], [string $element_type = 'element'], [integer $site_id = 0]) – Сохранение точки на карте.

  • integer $element_id: номер элемента модуля
  • string $module_name: название модуля
  • string $element_type: тип данных
  • integer $site_id: страница сайта

Для сохранения данных карты в функцию сохранения нужно включить код:

$this->diafan->_geomap->save($id, "модуль");

Пример:

В модуле «Объявления» обработка запросов на добавление и сохранение объявления происходит в файле modules/ab/ab.action.php. В функцию добавления объявления add() после SQL-запроса на сохранение объявления включен код:

$this->diafan->_geomap->save($save, "ab");

В функцию сохранения отредактированного объявления save() добавлен код:

$this->diafan->_geomap->save($_POST["id"], "ab");

void delete (integer|array $element_ids, strint $module_name, [string $element_type = 'element']) – Удаляет точки для одного или нескольких элементов.

  • integer|array $element_ids: номер одного или нескольких элементов
  • strint $module_name: название модуля
  • string $element_type: тип данных

Пример:

В модуле «Объявления» в функцию удаления объявления delete() в файле modules/ab/ab.action.php включен следующий код:

$this->diafan->_geomap->delete($row["id"], "ab");

void delete_module (string $module_name) – Удаляет все точки элементов модуля.

  • string $module_name: название модуля

Пример:

// удалит точки на карте всех объявлений
$this->diafan->_geomap->delete_module('ab');

array config () – Настройки бэкенда.

Структура бэкенда

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

Для этого нужно разработать несколько файлов станадартной структуры, учитывающие особенности API карт и положить папку с этими файлами в папку geomap/backend. Бэкенд появиться в административной части модуля «Геокарта» и будет доступен к выбору.

Бэкенд должен иметь уникальное название латинскими буквами (по примеру yandex, google, 2gis). Для примера будем использовать название newmap.

В папке geomap/backend/newmap должны находиться следующие файлы:

  • gemap.newmap.admin.php
  • gemap.newmap.view.add.php
  • gemap.newmap.view.get.php
  • gemap.newmap.view.get_all.php

Рассмотрим структуру стандартных файлов

gemap.newmap.admin.php

Файл содержит название и настройки бэкенда, подгружаемые при выборе его из списка.

Структура файла:

Пример:

// ошибка 404 при прямом вызове файлов
if ( ! defined('DIAFAN'))
{
    
$path = __FILE__; $i = 0;
    while(!
file_exists($path.'/includes/404.php'))
    {
        if(
$i == 10) exit; $i++;
        
$path = dirname($path);
    }
    include
$path.'/includes/404.php';
}

class
Geomap_newmap_admin
{
    public
$config;
    private
$diafan;

    public function
__construct(&$diafan)
    {
        
$this->diafan = &$diafan;
        
$this->config = array(
            
"name" => 'Название, выводимое администратору',
            
"params" => array(
                
// название настройки должно начинаться с названия метода
                
'newmap_string' => 'Название',

                
// если настройка не строковая, то вместо названия указываем массив с названием и типом
                // доступны следующие типы: text - строка, checkbox - галочка
                
'newmap_checkbox' => array(
                    
'name' => 'Тестовый режим',
                    
'type' => 'checkbox'
                
),

                
// можно определить свою функцию для вывода поля и его сохранения
                
'newmap_var' => 'Название',
            )
        );
    }

    
/**
     * Своя функция на редактирования настройки newmap_var
     *
     * @return void
     */
    
public function edit_variable_newmap_var()
    {
        echo
'<div class="unit tr_geomap" backend="paymenthod" style="display:none">
            <div class="infofield">Название поля</div>
            Значение поля
        </div>'
;
    }

    
/**
     * Своя функция на сохранение настройки newmap_var
     *
     * @return void
     */
    
public function save_variable_newmap_var()
    {
        
// сохраняет данные
    
}
}

gemap.newmap.view.add.php

Шаблон редактирования точки на карте.

В шаблоне доступны следующие данные:

  • $result["point"] – координаты точки.
  • $result["config"] – массив с настройками бэкенда.

gemap.newmap.view.get.php

Шаблон вывода точки на карте без возможности редактирования.

В шаблоне доступны следующие данные:

  • $result["point"] – координаты точки.
  • $result["config"] – массив с настройками бэкенда.

gemap.newmap.view.get_all.php

Шаблон вывода нескольких точек на карте.

В шаблоне доступны следующие данные:

  • $result["rows"] – массив точек.
  • $result["config"] – массив с настройками бэкенда.

Как добавлять геокарта к модулю

В настройках модуля (modules/модуль/admin/модуль.admin.config.php) и в файле редактирования элементов модуля (modules/модуль/admin/модуль.admin.php) необходимо добавить параметр 'geomap':

public $variables = array(
    
'main' => array(
        
'geomap' => 'module',
        

    
),
    

);

Административная часть

В административной части модуля можно выбрать бэкенд – сервис, используемый для отображения карты. В стандартную сборку DIAFAN.CMS включены бэкенды «Яндекс.Карты» и «Google.Map».

Каждый бэкенд может иметь свои настройки. Например, для Яндекс.Карты настраивается центр карты и масштаб.

База данных

{geomap} – Точки на карте

Файлы

  1. modules/geomap/admin/geomap.admin.php – настройки модуля;

  2. modules/geomap/admin/geomap.admin.inc.php – подключение модуля к административной части других модулей;

  3. modules/geomap/admin/js/geomap.admin.js – редактирование бэкенда для геокарты, JS-сценарий;

  4. modules/geomap/backend/google/geomap.google.admin.php – настройки карты "Google Maps" для административного интерфейса;

  5. modules/geomap/backend/google/geomap.google.view.add.php – шаблон редактирования точки на карте "Google Maps";

  6. modules/geomap/backend/google/geomap.google.view.get.php – шаблон точки на карте "Google Maps";

  7. modules/geomap/backend/google/geomap.google.view.get_all.php – шаблон вывода нескольких точек на карте "Google Maps";

  8. modules/geomap/backend/yandex/geomap.yandex.admin.php – настройки карты «Яндекс.Карты» для административного интерфейса;

  9. modules/geomap/backend/yandex/geomap.yandex.view.add.php – шаблон редактирования точки на карте Яндекс.Карты;

  10. modules/geomap/backend/yandex/geomap.yandex.view.get.php – шаблон точки на карте Яндекс.Карты;

  11. modules/geomap/backend/yandex/geomap.yandex.view.get_all.php – шаблон вывода нескольких точек на карте Яндекс.Карты;

  12. modules/geomap/geomap.php – контроллер;

  13. modules/geomap/geomap.inc.php – подключение модуля;

  14. modules/geomap/geomap.install.php – установка модуля;

  15. modules/geomap/geomap.model.php – модель;

  16. modules/geomap/views/geomap.view.show.php – шаблон вывода нескольких точек на карте.

Ваши комментарии и дополнения

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