0 Пользователей и 1 Гость просматривают эту тему.
  • 11 Ответов
  • 4480 Просмотров
*

Septdir

  • Живу я здесь
  • 3370
  • 168 / 4
Здравствуйте, разрабатываю свой компонент и столкнулся с проблемой.

Задача следующая. Вывести метки на Яндекс карту через objectManager, следовательно надо получать данные с сайта в формате JSON
Для тестирования сделал view.josn.php (на скорую руку, потом уберу в контролер и сделаю модель) Сам вывод:http://test.joomlazen.com/index.php?option=com_jz_location&view=ymap&format=json
Код вывода:
Код
class JZLocationViewYmap extends JViewLegacy {
public function getMapObject($data) {
    $item = new stdClass();
    $item->type = 'Feature';
    $item->id = $data->id;
    $item->geometry = new stdClass();
    $item->geometry->type = 'Point';
    $item->geometry->coordinates = '[55.831903,37.411961]';
    $item->properties = new stdClass();
    $item->properties->balloonContent = 'Content';
    $item->properties->clusterCaption = 'Cluste';
    $item->properties->hintContent = 'Hint';
    return $item;
    }
public function getMapFeatures() {
    $db = JFactory::getDbo();
    $query = $db->getQuery(true);
    $query
        ->select('*')
        ->from($db->quoteName('#__k2_items','a'))
        ->group($db->quoteName('a.id'))
        ->order('a.id DESC')
    ;
    $db->setQuery($query);
    $rows = $db->loadObjectList();
    if ($rows) {
        foreach ($rows as $row) {
            $main[] = $this->getMapObject($row);            
        }
        return $main;
    }
    return false;
}

public function display($tpl = NULL) {
    $app = JFactory::getApplication();
    $app->setHeader('Content-Type', 'application/json; charset=utf-8');
    $data = new stdClass();
    $data->type = "FeatureCollection";
    $data->features = $this->getMapFeatures();
    echo json_encode($data);
}
И соответственно создал вывод для удобства в простом HTML (Пример взял из Песочницы Яндекс, а на сайте сделал Access-Control-Allow-Origin:"*" )
Код
<!DOCTYPE html>
<html>
<head>
    <title>Примеры. Добавление на карту большо числа объектов</title>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <!-- Если вы используете API локально, то в URL ресурса необходимо указывать протокол в стандартном виде (http://...)-->
    <script src="http://api-maps.yandex.ru/2.1/?lang=ru-RU" type="text/javascript"></script>
    <script src="http://yandex.st/jquery/2.1.0/jquery.min.js" type="text/javascript"></script>
    <script>
ymaps.ready(init);

function init () {
    var myMap = new ymaps.Map('map', {
            center: [55.831903,37.411961],
            zoom: 10
        }, {
            searchControlProvider: 'yandex#search'
        }),
        objectManager = new ymaps.ObjectManager({
            // Чтобы метки начали кластеризоваться, выставляем опцию.
            clusterize: true,
            // ObjectManager принимает те же опции, что и кластеризатор.
            gridSize: 32
        });

    // Чтобы задать опции одиночным объектам и кластерам,
    // обратимся к дочерним коллекциям ObjectManager.
    objectManager.objects.options.set('preset', 'islands#greenDotIcon');
    objectManager.clusters.options.set('preset', 'islands#greenClusterIcons');
    myMap.geoObjects.add(objectManager);

    $.ajax({
        url: 'http://test.joomlazen.com/index.php?option=com_jz_location&view=ymap&format=json'
    }).done(function(data) {
        objectManager.add(data);
    });

}</script>
<style>
        HTML, body, #map {
            width: 100%; height: 100%; padding: 0; margin: 0;
        }
    </style>
</head>
<body>
<div id="map"></div>
</body>
</html>
Честно говоря с AJAX не сильно дружу. поэтому прошу помочь разобраться. Заранее благодарен.

Для тех кому удобнее отвечать на stackoverflow вот ссылки http://ru.stackoverflow.com/questions/521697/joomla-json-yandex-map http://stackoverflow.com/questions/37134854/joomla-json-output-ajax
Не можете справиться с задачей сами пишите, решу ее за вас, не бесплатно*.
*Интересная задача, Деньги или Бартер. Натурой не беру!
CodersRank | Контакты | Мой GitHub | Workshop
*

Arkadiy

  • Гуру
  • 5317
  • 463 / 2
  • Крепитесь, други.
Аякс тут совсем не нужен, собирайте данные в массив или объект, как вам надо для карты, потом с этим массивом/объектом json_encode() и все.
*

Septdir

  • Живу я здесь
  • 3370
  • 168 / 4
Аякс тут совсем не нужен, собирайте данные в массив или объект, как вам надо для карты, потом с этим массивом/объектом json_encode() и все.
Так вся, как я понимаю и проблема в JSON, точнее в том что карта не понимает что это json (хотя по логу ссылка распознается как "application/json; charset=utf-8")
Посмотрите пожалуйста код. может в нем проблема. А Акс мне потом понадобиться но дальше то я управлюсь просто застрял на этом месте
Не можете справиться с задачей сами пишите, решу ее за вас, не бесплатно*.
*Интересная задача, Деньги или Бартер. Натурой не беру!
CodersRank | Контакты | Мой GitHub | Workshop
*

Arkadiy

  • Гуру
  • 5317
  • 463 / 2
  • Крепитесь, други.
Из кода не видно что у вас в data приходит, на вскидку добавьте еще в AJAX параметр dataType : 'json', тогда данные в data будут не строкой а объектом (если там действительно json приходит).
*

Septdir

  • Живу я здесь
  • 3370
  • 168 / 4
Из кода не видно что у вас в data приходит, на вскидку добавьте еще в AJAX параметр dataType : 'json', тогда данные в data будут не строкой а объектом (если там действительно json приходит).
сам JSON вывод http://test.joomlazen.com/index.php?option=com_jz_location&view=ymap&format=json
 dataType : 'json', - попробовал не помогает
Не можете справиться с задачей сами пишите, решу ее за вас, не бесплатно*.
*Интересная задача, Деньги или Бартер. Натурой не беру!
CodersRank | Контакты | Мой GitHub | Workshop
*

Arkadiy

  • Гуру
  • 5317
  • 463 / 2
  • Крепитесь, други.
Включайте FireBug, отлавливайте ошибки. json с виду вполне нормальный.
*

Septdir

  • Живу я здесь
  • 3370
  • 168 / 4
Включайте FireBug, отлавливайте ошибки. json с виду вполне нормальный.
Да в том то и дело, что там пусто. data в консоль тоже передается
Не можете справиться с задачей сами пишите, решу ее за вас, не бесплатно*.
*Интересная задача, Деньги или Бартер. Натурой не беру!
CodersRank | Контакты | Мой GitHub | Workshop
*

Septdir

  • Живу я здесь
  • 3370
  • 168 / 4
Проблему удалось решить путем добавления контролера. Код контролера
Код
function __construct($config = array()) {
    parent::__construct( $config );
}

 public function getMapObject($data) {
    $item = new stdClass();
    $item->type = 'Feature';
    $item->id = $data->id;
    $item->geometry = new stdClass();
    $item->geometry->type = 'Point';
    $item->geometry->coordinates = array(55.831903,37.411961);
    $item->properties = new stdClass();
    $item->properties->balloonContent = 'Content';
    $item->properties->clusterCaption = 'Cluste';
    $item->properties->hintContent = 'Hint';
    return $item;
    }
public function getMapFeatures() {
    $db = JFactory::getDbo();
    $query = $db->getQuery(true);
    $query
        ->select('*')
        ->from($db->quoteName('#__k2_items','a'))
        ->group($db->quoteName('a.id'))
        ->order('a.id DESC')
    ;
    $db->setQuery($query);
    $rows = $db->loadObjectList();
    if ($rows) {
        foreach ($rows as $row) {
            $main[] = $this->getMapObject($row);            
        }
        return $main;
    }
    return false;
}

public function some() {
    $app = JFactory::getApplication();
    $app->setHeader('Content-Type', 'application/json; charset=utf-8');
    $data = new stdClass();
    $data->type = "FeatureCollection";
    $data->features = $this->getMapFeatures();
    echo json_encode($data);

}
Так же была ошибка в координатах  
Код
$item->geometry->coordinates = '[55.831903,37.411961]';
Они должны быть массивом
Код
 $item->geometry->coordinates = array(55.831903,37.411961);
« Последнее редактирование: 16.05.2016, 11:41:43 от Septdir »
Не можете справиться с задачей сами пишите, решу ее за вас, не бесплатно*.
*Интересная задача, Деньги или Бартер. Натурой не беру!
CodersRank | Контакты | Мой GitHub | Workshop
*

b2z

  • Глобальный модератор
  • 7290
  • 778 / 0
  • Разраблю понемногу
*

Septdir

  • Живу я здесь
  • 3370
  • 168 / 4
Почеме в контроллере работаете с базой данных?
еще не окончательная версия, пока не более чем набросок для тестов (а тестировать удобно когда все в одном файле). Пока, не думал как в итоге сделать, но точно по другому.
Все операции с базой как полагается будут в model, возможно формирование объекта тоже(причем в одной функции). А вот дальше пока не знаю. С одной стороны формировать json под аякс  во view тоже не комильфо, с другой стороны это все же вывод.
« Последнее редактирование: 16.05.2016, 19:10:31 от Septdir »
Не можете справиться с задачей сами пишите, решу ее за вас, не бесплатно*.
*Интересная задача, Деньги или Бартер. Натурой не беру!
CodersRank | Контакты | Мой GitHub | Workshop
*

b2z

  • Глобальный модератор
  • 7290
  • 778 / 0
  • Разраблю понемногу
Ну отдайте представлению чистые данные, а оно пусть само решает, что с ними делать. Либо в контроллере получите данные и дальше представлению, хотя при аяксе представление по сути лишнее. Как правило, в контроллере сразу JResponseJson формируете, забрав данные у модели, и отдаёте через echo.
*

Septdir

  • Живу я здесь
  • 3370
  • 168 / 4
Как правило, в контроллере сразу JResponseJson формируете, забрав данные у модели, и отдаёте через echo.
Ну вот я пока именно в эту сторону склоняюсь. Но все же до этого мне по плану еще далеко, просто не удержался с картой поиграться
« Последнее редактирование: 16.05.2016, 20:00:42 от Septdir »
Не можете справиться с задачей сами пишите, решу ее за вас, не бесплатно*.
*Интересная задача, Деньги или Бартер. Натурой не беру!
CodersRank | Контакты | Мой GitHub | Workshop
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

Не занимать место под пустой вывод модуля

Автор platonische

Ответов: 11
Просмотров: 665
Последний ответ 28.04.2020, 07:53:11
от sivers
[РЕШЕНО] curl-файл Joomla $model->save($data) подключение модели администратора

Автор platonische

Ответов: 31
Просмотров: 1312
Последний ответ 30.05.2019, 16:10:57
от sivers
Вывод данных из нескольких одинаковых таблиц

Автор Outpost

Ответов: 6
Просмотров: 629
Последний ответ 11.02.2019, 14:42:55
от passer
Вывод сгенерированного изображения в модуле

Автор Inoken

Ответов: 4
Просмотров: 881
Последний ответ 16.08.2017, 22:00:59
от robert
Структура компонента (1 запись + JSON ИЛИ Много записей)

Автор platonische

Ответов: 4
Просмотров: 898
Последний ответ 02.03.2017, 15:18:26
от passer