Существуют различные готовые решения для использования API Яндекс.Карт в CMS Joomla, их Вы можете успешно использовать.
Но иногда нужно просто встроить какую-либо карту в статью Joomla не используя сложных расширений.
В этой заметке я расскажу об одном из решений данной проблемы.
Нам нужно загрузить плагин Sourcerer, его можно использовать c версиями Joomla 1.5 и 2.5, на сервере должна быть установлена версия php 5.3.
Перейти на сайт разработчиков и нажать на кнопку «Download Free», скачать архив с плагином.
После этого его устанавливают обычным образом через менеджер расширений.
Теперь мы создаем новый материал.
Под окном редактирования текста материала, появилась дополнительная кнопка «Вставить код».

Мы нажимаем на нее и появляется всплывающее окно для вставки кода.
Между специальными тегами {source} и {/source}, мы должны добавить код карты для вставки.
Например, код карты с элементами управления
<script src="http://api-maps.yandex.ru/2.0/?load=package.full&lang=ru-RU" type="text/javascript"></script>
<script type="text/javascript">
// Как только будет загружен API и готов DOM, выполняем инициализацию
ymaps.ready(init);
function init () {
var myMap = new ymaps.Map('map', {
center: [56.326944, 44.0075], // Нижний Новгород
zoom: 13
});
//Добавляем элементы управления
myMap.controls
.add('zoomControl')
.add('typeSelector')
.add('mapTools');
}
</script>
<div id="map" style="width:600px; height:400px"></div> |
Нажимаем на кнопку «Вставить» и наш код добавляется в окно редактора.
Сохраняем страницу.
Открываем нашу страницу на сайте и наблюдаем карту

Так мы можем легко добавить в статью любой код карты.
Если в коде карты используется библиотека jQuery, то из-за того что в Joomla по умолчанию подключена другая JavaScript библиотека Mootools возникает конфликт.
Код карты работает неверно.
Эту проблему можно решить двумя способами:
отключить использование библиотеки Mootools, использую специальные плагины или отредактируя код;
Использовать jquery совместно с Mootools, Как это сделать, можно посмотреть на сайте jquery: http://api.jquery.com/jQuery.noConflict/
Приведу несколько примеров из документации.
Во многих библиотеках JavaScript используется $ как функция или название переменной, как и в JQuery. В случае JQuery, $ это просто псевдоним для JQuery, поэтому все функции доступны без использования $. Если нам потребуется использовать другую JavaScript библиотеку совместно с JQuery , мы можем вернуть управление $ обратно в другие библиотеки с помощью $.noConflict ():
<script type="text/javascript" src="other_lib.js"></script> <script type="text/javascript" src="jquery.js"></script> <script type="text/javascript"> $.noConflict(); // Здесь может быть код других библиотек, который использует $ </script> |
В этом случае для jQuery кода вместо $ используется jQuery
jQuery.noConflict();
// Do something with jQuery
jQuery("div p").hide();
// Do something with another library's $()
$("content").style.display = 'none'; |
Вместо jQuery можно использовать другое имя:
var jq = jQuery.noConflict();
// Do something with jQuery
jq("div p").hide();
// Do something with another library's $()
$("content").style.display = 'none'; |
Так можно использовать код jQuery с $, когда DOM будет загружен:
<script type="text/javascript" src="other_lib.js"></script>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript">
$.noConflict();
jQuery(document).ready(function($) {
// Здесь jQuery's код, с $
});
// Здесь может быть код других библиотек, который использует $
</script> |
jQuery с $
jQuery.noConflict();
(function($) {
$(function() {
// more code using $ as alias to jQuery
});
})(jQuery);
// other code using $ as an alias to the other library |
и краткая запись jQuery с $:
jQuery.noConflict()(function(){
// code using jQuery
});
// other code using $ as an alias to the other library |
В зависимости от ситуации нужно использовать тот или иной вариант решения.
Давайте добавим на страницу код из заметки «Построение автомобильных маршрутов, используя API Яндекс.Карт 2.х», код первого примера:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Добавление маршрута на карту - API Яндекс.Карт 2.х</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<script src="http://yandex.st/jquery/1.6.4/jquery.min.js" type="text/javascript"></script>
<script src="http://api-maps.yandex.ru/2.0/?load=package.full&lang=ru-RU"
type="text/javascript"></script>
<script type="text/javascript">
var myMap, route;
// Как только будет загружен API и готов DOM, выполняем инициализацию
ymaps.ready(init);
function init () {
myMap = new ymaps.Map("map", {
center: [56.326944, 44.0075],
zoom: 12
});
$('#search_route').submit(function () {
var start = $("#start").val();
var end = $("#end").val();
ymaps.route([
// Список точек, которые необходимо посетить
[start], [end]], {
// Опции маршрутизатора
mapStateAutoApply: true // автоматически позиционировать карту
}).then(function (router) {
route && myMap.geoObjects.remove(route);
route = router;
myMap.geoObjects.add(route);
}, function (error) {
alert("Возникла ошибка: " + error.message);
});
return false;
});
}
</script>
</head>
<body>
<form id="search_route">
<b>Начало: </b>
<input id="start" type="text" value="Нижний Новгород, " style="width: 360px;"><br />
<b>Конец: Синема Парк DeLuxe IMAX</b>
<input id="end" type="text" value="Нижний Новгород, ул. Бетанкура 1" style="width: 260px;">
<input type="submit" value="Найти"/>
</form>
<br />
<div id="map" style="width:800px;height:600px"></div>
</body>
</html> |
Немного изменим его для вставки в статью Joomla:
<script src="http://yandex.st/jquery/1.6.4/jquery.min.js" type="text/javascript"></script>
<script src="http://api-maps.yandex.ru/2.0/?load=package.full&lang=ru-RU"
type="text/javascript"></script>
<script type="text/javascript">
var myMap, route;
jQuery.noConflict();
// Как только будет загружен API и готов DOM, выполняем инициализацию
ymaps.ready(init);
function init () {
myMap = new ymaps.Map("map", {
center: [56.326944, 44.0075],
zoom: 12
});
jQuery('#search_route').submit(function () {
var start = jQuery("#start").val();
var end = jQuery("#end").val();
ymaps.route([
// Список точек, которые необходимо посетить
[start], [end]], {
// Опции маршрутизатора
mapStateAutoApply: true // автоматически позиционировать карту
}).then(function (router) {
route && myMap.geoObjects.remove(route);
route = router;
myMap.geoObjects.add(route);
}, function (error) {
alert("Возникла ошибка: " + error.message);
});
return false;
});
}
</script>
<form id="search_route">
<b>Начало: </b>
<input id="start" type="text" value="Нижний Новгород, " style="width: 360px;"><br />
<b>Конец: Синема Парк DeLuxe IMAX</b>
<input id="end" type="text" value="Нижний Новгород, ул. Бетанкура 1" style="width: 260px;">
<input type="submit" value="Найти"/>
</form>
<br />
<div id="map" style="width:800px;height:600px"></div> |
Здесь мы удалили из кода всю разметку страницы, после строки объявления переменных myMap, route добавили строку:
jQuery.noConflict(); |
И далее в коде заменили символ $ на jQuery.
Создаем новую страницу, вставляем наш код и смотрим ее в браузере
В качестве начальной точки вводим адрес: «Нижний Новгород, ул. Шорина, 13»
И стоим маршрут
Все прекрасно работает.
Очень надеюсь, что данная статья поможет Вам при создании проектов в CMS Joomla.


