Я пытаюсь создать модуль для joomla, который делает карту, используя API карт google.
Сама карта прекрасно работает, если данные жестко закодированы в файле javascript, но я хочу иметь возможность легко использовать ее на нескольких сайтах, поэтому предпочтительнее установить все параметры из бэкэнда joomla. Я пытался сделать это с помощью вызова JSON, но он возвращает ошибку 500 при загрузке страницы. Мой сайт-разработчик: http://dev.xander.dk.web1.symatic.dk/
Соответствующий код выглядит следующим образом:
mod_google_maps.php (создание переменных и подключение их к полям в mod_google_maps.xml)
<?php
/**
* Hello World! Module Entry Point
*
* @package Joomla.Tutorials
* @subpackage Modules
* @link http://docs.joomla.org/J3.x:Creating_a_simple_module/Developing_a_Basic_Module
* @license GNU/GPL, see LICENSE.php
* mod_helloworld is free software. This version may have been modified pursuant
* to the GNU General Public License, and as distributed it includes or
* is derivative of works licensed under the GNU General Public License or
* other free or open source software licenses.
*/
// no direct access
defined('_JEXEC') or die;
// Include the syndicate functions only once
require_once( dirname(__FILE__) . '/helper.php' );
$mapCenterLat = $params->get('mapCenterLat', '55.395239');
$mapCenterLng = $params->get('mapCenterLng', '10.380180');
$zoom = $params->get('zoom', '18');
$mapDisableUi = $params->get('mapDisableUi', false);
$markerLat = $params->get('markerLat', '55.395239');
$markerLng = $params->get('markerLng', '10.380180');
$markerTitle = $params->get('markerTitle', 'symatic');
helper.php
<?php
function getMapOptionsAjax(){
$data = array('mapCenterLat' => $mapCenterLat, 'mapCenterLng' => $mapCenterLng, 'zoom' => $zoom, 'mapDisableUi' => $mapDisableUi, 'markerLat' => $markerLat, 'markerLng' => $markerLng, 'markerTitle' => $markerTitle );
echo json_encode($data);
};
?>
maps.js (только соответствующий JSON-вызов)
jQuery.get('index.php?option=com_ajax&module=google_maps&method=getMapOptions&format=json', function(data){
var mapResponse = data;
console.log(mapResponse);
});
Я оставил остальную часть файла maps.js, поскольку он не имеет отношения к этому вопросу и потому что он работает с жестко заданными значениями.
Ошибка 500
заключается в том, что вы пытаетесь получить доступ к неопределенным переменным в getMapOptionsAjax()
.
Я считаю, вы думаете об этом неправильно.
Если вы только хотите установить значения, которые были определены в бэкэнде через диспетчер модулей Joomla, это фактически статические значения (т. $params
Ваши $params
). Поэтому вы должны установить их в своем файле шаблона module
, то есть /modules/mod_google_maps/tmpl/default.php
В этом файле вы можете добавить раздел, который устанавливает некоторые переменные Javascript для использования вашим файлом maps.js
например
<script>
var mapCenterLat = <?php echo $params->get('mapCenterLat', '55.395239'); ?>;
var mapCenterLng = <?php echo $params->get('mapCenterLng', '10.380180'); ?>;
var zoom = <?php echo $params->get('zoom', '18'); ?>;
var mapDisableUi = <?php echo $params->get('mapDisableUi', false); ?>;
var markerLat = <?php echo $params->get('markerLat', '55.395239'); ?>;
var markerLng = <?php echo $params->get('markerLng', '10.380180'); ?>;
var markerTitle = '<?php echo $params->get('markerTitle', 'symatic'); ?>';
</script>
Что будет отображать и отправлять в браузер как-то вроде этого:
<script>
var mapCenterLat = 55.395239;
var mapCenterLng = 10.380180;
var zoom = 18;
var mapDisableUi = false;
var markerLat = 55.395239;
var markerLng = 10.380180;
var markerTitle = 'symatic'; // Note the quotes added around the echo
</script>
Примечание: mapDisableUi
вернет значение, назначенное им в mod_google_maps.xml
Примечание: одинарные кавычки, добавленные вокруг echo
для строкового значения markerTitle