Передача переменных PHP в JavaScript в Joomla

0

Я пытаюсь создать модуль для 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, поскольку он не имеет отношения к этому вопросу и потому что он работает с жестко заданными значениями.

Теги:
joomla

1 ответ

2
Лучший ответ

Ошибка 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

  • 0
    Это было в значительной степени идеально. Хотя есть две вещи: во-первых, каждая строка скрипта нуждается в конце точки с запятой, иначе это не сработает. Во-вторых, mapDisableUi вернул true / false, как и должно быть, так как это два значения, которые я назначил ему в xml-файле. Но это было невероятно полезно. Если вы не возражаете, не могли бы вы объяснить, как сделать вызов AJAX, как эта, для дальнейшего использования?
  • 1
    @xanderh mybad на точках с запятой, но он был просто набран в браузере, так что будьте осторожны, для вызовов AJAX, и Joomla см. этот ответ на сайте Joomla Q & A StackExchange .

Ещё вопросы

Сообщество Overcoder
Наверх
Меню