2014-12-11 3 views
-1

Я пытался разработать модуль Joomla, отображая карту с одним маркером. У меня есть javascript-файл, который отлично работает в HTML, но я не могу заставить реализацию Joomla работать. После многих bughunting, мой текущий код:Google maps в Joomla 3 error

default.php

<?php 
// No direct access 
defined('_JEXEC') or die; ?> 
<div id="map" style="width:200px;height:50px"></div> 
<?php $document = JFactory::getDocument(); 
    $document->addScript('https://maps.googleapis.com/maps/api/js?key=[key]&signed_in=true&libraries=places'); 
    $document->addScript('/modules/mod_helloworld/maps.js'); 
    $document->addScriptDeclaration('window.onload(jQuery("map").googleMaps());')?> 
<?php echo $hello; ?> 

Ключ API установлен в живой версии, но здесь опущено для удобства чтения.

helper.php

<?php 
class modHelloWorldHelper 
{ 
    public static function getHello($params) 
    { 
     return 'Hello, World!'; 
    } 
} 
?> 

mod_google_maps.php

<?php 
// no direct access 
defined('_JEXEC') or die; 
// Include the syndicate functions only once 
require_once(dirname(__FILE__) . '/helper.php'); 

$hello = modHelloWorldHelper::getHello($params); 
require(JModuleHelper::getLayoutPath('mod_helloworld')); 
?> 

Когда я загрузить этот модуль на мой сайт Joomla и активировать модуль, он будет отображать "Hello, World!" на боковой панели, как и предполагалось (проверяя, работает ли модуль), но сама карта не отображается. Консоль возвращается:.

Uncaught TypeError: Cannot read property 'offsetWidth' of null 
    Xi 
    Jj 
    $.fn.googleMaps 
    (anonymous function) 

$ .fn.googleMaps определен в файле maps.js с помощью JQuery (в режиме noConflict, используя дескриптор JQuery JQuery только упоминается как «$» в выводе на консоль)

Я проверил, что имя div является правильным один раз и установило высоту и ширину, используя пиксели вместо процентов. Div появляется, но пуст.

Испытательная площадка здесь: http://dev.xander.dk.web1.symatic.dk/

UPDATE: Оказывается, Joomla отбывал неправильный файл maps.js. Он обслуживал первую версию, которая была загружена на сервер, но тот, который он должен использовать, внес некоторые важные изменения в нее, включая имя div.

ответ

3

JQuery ("карта")

Шоуда быть

JQuery ("# карта")

EDIT

в Google JQuery плагин ваши добавления карту

document.getElementById('map-canvas') 

это необходимо указать на

document.getElementById('map') 

или использование контекста (это)

+0

К сожалению, ничего не изменилось. И в HTML, он работал нормально, если вы назвали его jQuery («map»). GoogleMaps(); – xanderh

+1

jQuery ("map") ищет jQuery ("# ​​map") ищет id = "map" –

+0

Оказывается, проблема в том, что вы написали, но также и о том, что скрипт работал до того, как был установлен div. Я исправил его, используя addcript с атрибутом defer, установленным в true, и выполнив скрипт изнутри файла. Это работает так, как должно. Спасибо за помощь. – xanderh