Новости Joomla

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

legion

  • Осваиваюсь на форуме
  • 17
  • 0 / 0
AJAX в Joomla
« : 22.10.2009, 09:30:03 »
разобрался как работает AJAX, но с Joomla возникли проблемы

Цитировать
var url = "helper.php?from=" + _this.value;
loadXMLDoc("get", url);

как здесь быть? или есть какой джумловский механизм для аякса?
« Последнее редактирование: 22.10.2009, 13:23:33 от legion »
*

legion

  • Осваиваюсь на форуме
  • 17
  • 0 / 0
Re: AJAX в Joomla
« Ответ #1 : 22.10.2009, 16:47:34 »
как я понял, в Joomla все это делает через mootools, не могу найти нормальные примеры с использованием ajax
помогите переделать под mootools

default.php:
Код
<script type="text/javascript">
function loadXMLDoc(method, url) {
if(window.XMLHttpRequest) {
req = new XMLHttpRequest();
req.onreadystatechange = processReqChange;
req.open(method, url, true);
req.send(null);
}
else if (window.ActiveXObject) {
req = new ActiveXObject("Microsoft.XMLHTTP");
if(req) {
req.onreadystatechange = processReqChange;
req.open(method, url, true);
req.send( );
}
}
}

function processReqChange() {
if(req.readyState == 4) {
if(req.status == 200) { getCities(req.responseXML.documentElement); }
else { alert("There was a problem retrieving the XML data:\n" + req.statusText); }
}
}

function loadlist(_this) {
var url = "http://localhost/Joomla/modules/mod_delivery/helper.php?from=" + _this.value;
alert(url);
loadXMLDoc("get", url);
}

function getCities(xml) {
var cities = XML.getElementsByTagName("city");
var _select = document.getElementById("to");
_select.innerHTML = "";

for (i=0; i<colors.length; i++) {
var option = document.createElement("option");
var opttext  = document.createTextNode(cities[i].firstChild.data);
option.appendChild(opttext);
option.setAttribute("value",cities[i].getAttribute("value"));
_select.appendChild(option);
}
}
</script>

helper.php:
Код
if (isset($_GET['from'])) { ModDeliveryHelper::makeXML(); }
*

legion

  • Осваиваюсь на форуме
  • 17
  • 0 / 0
Re: AJAX в Joomla
« Ответ #2 : 23.10.2009, 16:51:20 »
ок, тогда такой вопрос
Код
var url="index.php?"+this.getValue;
var a=new Ajax(url,{
method:"get",
update:$("bla-bla")
}).request();

какие параметры должны содержаться в $url?
у меня модуль лежит в modules/module_name
файлы helper.php mod_name.php tmpl/default.php

в инете нашел такой пример
var url="index.php?option=com_mycomponent&format=raw&task=listFields&table="+this.getValue();

но потом нашел информацию о том, что ?option= имя компонента
есть ли разница между компонентом и модулем?
*

voland

  • Легенда
  • 11030
  • 588 / 112
  • Эта строка съедает место на вашем мониторе
Re: AJAX в Joomla
« Ответ #3 : 23.10.2009, 17:00:48 »
Начать с того, какой компонент нужно вызывать через AJAX? В Joomla для этого есть параметр вызова format=raw но далеко не все компоненты умеют этот формат обрабатывать
*

legion

  • Осваиваюсь на форуме
  • 17
  • 0 / 0
Re: AJAX в Joomla
« Ответ #4 : 23.10.2009, 17:15:30 »
я хочу вызвать свой же модуль
пытаюсь передать значение выбранного элемента в первом селект боксе и в зависимости от этого заполнить второй селект бокс путем запрос из БД

т.е. я хочу послать асинхронный запрос в мой helper.php, где содержится метод myphpmethod, который и будет производить запрос в БД
Код
var url="index.php?option=helper&format=raw&task=myphpclass::myphpmethod&item=this.value;

правильный url?
helper.php находится в /modules/mod_mymodulename/helper.php

*

voland

  • Легенда
  • 11030
  • 588 / 112
  • Эта строка съедает место на вашем мониторе
Re: AJAX в Joomla
« Ответ #5 : 23.10.2009, 17:18:29 »
Вобще-то запросы идут в компонент а не модуль, и helper компонента вызывается автоматически по его имени.
*

legion

  • Осваиваюсь на форуме
  • 17
  • 0 / 0
Re: AJAX в Joomla
« Ответ #6 : 23.10.2009, 18:34:28 »
ничего не пойму, я устанавливаю модуль в архиве, который содержит

index.html
mod_mymodname.php
mod_mymodname.xml
helper.php
tmpl/index.html
tmpl/default.php

какой у меня должен быть запрос, если он происходит из default.php при выборе селекта и вызывает метод из helper.php?
*

beliyadm

  • Легенда
  • 9758
  • 1664 / 66
  • Севастополь, Россия
Re: AJAX в Joomla
« Ответ #7 : 23.10.2009, 18:36:03 »
обработчик должен находится либо вообще в отдельном файле, либо в компоненте
Создаете компонент mod_mycomname в виде каталога в папке components\, там два файла mod_mycomname.php mod_mycomname.xml и обращаетесь к нему
Все истины, которые я хочу вам изложить, — бесстыдная ложь. Сделать всё хорошо
TLG: @Beliyadm
*

Darkick

  • Завсегдатай
  • 1142
  • 239 / 1
Re: AJAX в Joomla
« Ответ #8 : 23.10.2009, 19:10:10 »
Только наверно com_mycomname ?

Сам озаботился вопросом аякса в модуле; перерыл форум Joomla - ответы не утешительны: только через компонент или писать отдельный, автономный по сути, файл и самостоятельно дружить его с Joomla.
Оба варианта не очень :( Жаль, но выхода похоже нет, подвели разработчики.
*

beliyadm

  • Легенда
  • 9758
  • 1664 / 66
  • Севастополь, Россия
Re: AJAX в Joomla
« Ответ #9 : 23.10.2009, 19:10:41 »
Только наверно com_mycomname ?
ага, именно так :)
А в чем проблема за 20 минут написать компонент, поместить туда свою функцию и радоваться жизни?
Все истины, которые я хочу вам изложить, — бесстыдная ложь. Сделать всё хорошо
TLG: @Beliyadm
*

legion

  • Осваиваюсь на форуме
  • 17
  • 0 / 0
Re: AJAX в Joomla
« Ответ #10 : 23.10.2009, 19:14:41 »
че-то я вообще запутался с этой Joomla

mod_mymod.php
Код
<?php
// no direct access
defined('_JEXEC') or die('Restricted access');
// Include the syndicate functions only once
require_once (dirname(__FILE__).DS.'helper.php');
$document = &Jfactory::getDocument();
$js = "/modules/".$this->template."/mod_mymod.js";
$document->addScript(JURI::base(). $js);
$items = ModDeliveryHelper::get_DDList();
require(JModuleHelper::getLayoutPath('mod_mymod));
?>

tmpl/default.php
Код
<?php 
defined('_JEXEC') or die('Restricted access');
JHTML::_('behavior.mootools');

echo JText::_('Choose the departure and destination cities');
echo "<br><table>";
echo "<tr><td>";

$cat[] = JHTML::_('select.option','0','Select the city','value','text');
$cat = @array_merge($cat, $items);
$list1 = JHTML::_(
'select.genericlist',
$cat,
'from',
'class="inputbox" size="1" style="width: 130px"',
'text',
'text',
0
);

echo $list1;
echo "</td></tr><tr><td id=\"secondlist\"></td></tr></table>";
?>

helper.php его же я запихал в components/com_mymod.php рядом с com_mymod.xml
Код
<?php
defined('_JEXEC') or die('Restricted access');

function loadlist() {
if ($city = JRequest::getVar('from','','get','string')) {
$_db = & JFactory::getDBO();
$_query = "SELECT b AS TEXT FROM #__mytable WHERE a = $city)";
$_db->setQuery($_query);
$_items = $_db->loadObjectList();
$list2 = & JHTML::_(
'select.genericlist',
$_items,
'to',
'class="inputbox" size="1" style="width: 130px"',
'text',
'text',
0
);
if (!$list2) $response['html'] = '';
$response['html'] = $list2;

echo (json_encode($response));

return;
}
else echo "no delivery";
}

class ModDeliveryHelper {
public function get_DDList() {
$db =& JFactory::getDBO();
$query = 'SELECT DISTINCT a AS text' .
' FROM #__mytable ORDER BY a';
$db->setQuery($query);
$items = $db->loadObjectList();

return $items;
}
}
?>

mod_mymod.js запихал в templates/mymod/
Код
<script type="text/javascript">
window.addEvent("domready", function() {
alert(this.getValue());
var fx = new Fx.Style($("console-container"), "background-color", {duration:2000})
$("from").addEvent("change", function() {
$("secondlist").empty().addClass("ajax-loading");
var url="index.php?option=com_delivery&format=raw&task=loadlist&from=" + this.getValue();
var theAjax = new Ajax(url, {
method: "get",
onComplete: function(response) {
var resp = Json.evaluate(response);
$("secondlist").removeClass("ajax-loading").setHTML(resp.HTML);
$("console-container").setHTML(resp.msg);
x.set("#fff").start("#f60").chain(function(){
this.start.delay(2000,this,"#000");
});
}
}).request();
});
});
</script>

кажется я нихрена не понимаю как работают модули в Joomla
*

beliyadm

  • Легенда
  • 9758
  • 1664 / 66
  • Севастополь, Россия
Re: AJAX в Joomla
« Ответ #11 : 23.10.2009, 19:18:47 »
Посмотрите мой пример работы с AJAX в поиске тут
Все истины, которые я хочу вам изложить, — бесстыдная ложь. Сделать всё хорошо
TLG: @Beliyadm
*

legion

  • Осваиваюсь на форуме
  • 17
  • 0 / 0
Re: AJAX в Joomla
« Ответ #12 : 23.10.2009, 19:25:18 »
ну и my_mod.xml

Код
<?xml version="1.0" encoding="utf-8"?>
<install type="module" version="1.5.0">
        <name>my mod</name>
        <author>asdf</author>
        <creationDate>October 2009</creationDate>
        <copyright>All rights reserved by Ambitionality Software LLC 2008.</copyright>
        <license>GPL 2.0</license>
        <authorEmail>asdf@asdf.com</authorEmail>
        <authorUrl>www.joomla.org</authorUrl>
        <version>1.0.0</version>
        <description>my mod</description>
        <files>
                <filename module="mod_mymod">mod_mymod.php</filename>
                <filename>index.html</filename>
<filename>helper.php</filename>
<filename>tmpl/index.html</filename>
<filename>tmpl/default.php</filename>
        </files>
        <params />
</install>

Посмотрите мой пример работы с AJAX в поиске тут

у вас там все сложно, мне не понятна сама структура модуля

кстати правильно ли я JS подключаю?
*

Darkick

  • Завсегдатай
  • 1142
  • 239 / 1
Re: AJAX в Joomla
« Ответ #13 : 23.10.2009, 22:16:35 »
ага, именно так :)
А в чем проблема за 20 минут написать компонент, поместить туда свою функцию и радоваться жизни?
Как говорится, как то не аккуратненько получается. И идеологически не верно. Мне нужен только модуль, а тут приходится из-за аякса городить костыль в виде компонента. Ну да ничего не поделаешь, перебьюсь без аякса, нихай так сойдёт.
*

legion

  • Осваиваюсь на форуме
  • 17
  • 0 / 0
Re: AJAX в Joomla
« Ответ #14 : 23.10.2009, 23:04:03 »
кажется я начал понимать разницу между модулем и компонентом
такой вопрос: компонент обязательно устанавливать таким же образом как и модуль? (через админку с архивом и xml)
или можно сделать как я? и что вообще у меня не так сделано?
*

legion

  • Осваиваюсь на форуме
  • 17
  • 0 / 0
Re: AJAX в Joomla
« Ответ #15 : 24.10.2009, 10:44:58 »
а зачем вообще нужен модуль, если все делается через компонент? и почему JS подключается через templates?
*

legion

  • Осваиваюсь на форуме
  • 17
  • 0 / 0
Re: AJAX в Joomla
« Ответ #16 : 26.10.2009, 08:02:47 »
Код
window.addEvent("domready", function() {
$("from").addEvent("change", function() {
var from_value = $("from").get("value");
var url="<?php echo JURI::base();?>index.php?option=com_delivery&task=loadlist&from=" + from_value;
var theAjax = new Ajax(url, {
method: "get",
onComplete: function(myresponse) {
var resp = Json.evaluate(myresponse);
$("my_form").setHTML(resp.html);
}
}).request();
});
});

создал компонент com_delivery, запихал в controller.php функцию loadlist
но запрос видимо просто не доходит или не возвращает значение

Код
		function loadlist() {
if ($city = JRequest::getVar('from','','get','string')) {
$_db = & JFactory::getDBO();
$_query = "SELECT a AS TEXT FROM #__my_table WHERE b = '$city')";
$_db->setQuery($_query);
$_items = $_db->loadObjectList();
$list2 = JHTML::_(
'select.genericlist',
$_items,
'to',
'class="inputbox" size="1" style="width: 130px"',
'text',
'text',
0
);

$response['html'] = $list2;
$response['text'] = "OK";

echo (json_encode($list2));

return;
}
}

подскажите, где ошибка
*

beliyadm

  • Легенда
  • 9758
  • 1664 / 66
  • Севастополь, Россия
Re: AJAX в Joomla
« Ответ #17 : 26.10.2009, 15:11:39 »
Конечно не доходит
Код: php
<?php
defined( '_JEXEC' ) or die( 'Restricted access' );
switch ($task)
{
case 'loadlist';
if ($city = JRequest::getVar('from','','get','string')) {
$_db = & JFactory::getDBO();
$_query = "SELECT a AS TEXT FROM #__my_table WHERE b = '$city')";
$_db->setQuery($_query);
$_items = $_db->loadObjectList();
$list2 = JHTML::_(
'select.genericlist',
$_items,
'to',
'class="inputbox" size="1" style="width: 130px"',
'text',
'text',
0
);

$response['html'] = $list2;
$response['text'] = "OK";

echo (json_encode($list2));

break;
default:
break;
}

?>
Вот как то так,
Все истины, которые я хочу вам изложить, — бесстыдная ложь. Сделать всё хорошо
TLG: @Beliyadm
*

legion

  • Осваиваюсь на форуме
  • 17
  • 0 / 0
Re: AJAX в Joomla
« Ответ #18 : 26.10.2009, 16:11:22 »
спасибо, что ответили, однако все равно не работает, даже алерт не вылазит
где-то прочитал, что JS надо подгружать отдельно в шаблоне, но в установленных модулях встретил один с JS в default.php

default.php
Код
<script type='text/javascript'>
window.addEvent('domready', function() {
$('from').addEvent('change', function(e) {
var from_value = $('from').get('value');
var url='<?php echo JURI::base(); ?>index.php?option=com_delivery&task=loadlist&from=' + from_value;
alert(url);
new Ajax(url, {
method: 'get',
onComplete: function(myresponse) {
var resp = Json.evaluate(myresponse);
$('list2').setHTML(resp.html);
}
}).request();
});
});

</script>
<?php
JHTML::_('behavior.mootools');
...
echo '<div id=\'list1\'>' . $list1 . '</div><BR><div id=\'list2\'></div>';
...
?>
*

beliyadm

  • Легенда
  • 9758
  • 1664 / 66
  • Севастополь, Россия
Re: AJAX в Joomla
« Ответ #19 : 26.10.2009, 16:16:44 »
1 - мутулз по умолчанию уже грузится в фронте, не надо его дополнительно подгружать JHTML::_('behavior.mootools');
2 - вызов мутулз должен быть до вашего скрипта
3 - я когда делал копи\паст вашего куска кода забыл про закрытую скобку после if
4 - попробуйте по указанному пути получить обратно хотя бы переданное значение $city, без дальнейшей обработки, то есть последовательно исключать возможные места с ошибкой.
5 - да и firebug поставить и смотреть на переданный запрос и возвращаемые значения
Все истины, которые я хочу вам изложить, — бесстыдная ложь. Сделать всё хорошо
TLG: @Beliyadm
*

legion

  • Осваиваюсь на форуме
  • 17
  • 0 / 0
Re: AJAX в Joomla
« Ответ #20 : 27.10.2009, 13:26:30 »
исправил скрипт mootools

смотрю через livehttpheaders
запрос идет

GET /Joomla/index.php?option=com_ajax&task=loadlist&from=%D0%A5%D0%B0%D0%B1%D0%B0%D1%80%D0%BE%D0%B2%D1%81%D0%BA HTTP/1.1
X-Requested-With: XMLHttpRequest

но компонент не находит

Status: 404 Component not found

компонент, как писали выше, у меня состоит из 2х файлов: com_ajax.php (такой как выкладывал beliyadm) и
com_ajax.xml:

Код
<?xml version="1.0" encoding="utf-8"?>
<install type="component" version="1.5.0">
    <name>ajax</name>
    <author>me</author>
    <creationDate>2009</creationDate>
    <license>GNU/GPL</license>
    <version>1.0</version>
    <description>ajax response</description>
    <install>
        <queries>
          
        </queries>
    </install>
    <files>
<filename>com_ajax.php</filename>
    </files>
    <administration>
    </administration>
    <params>
    </params>
</install>


*

Lex

  • Завсегдатай
  • 1615
  • 274 / 1
Жизнь заставила учиться.
В личке на вопросы не отвечаю.
*

legion

  • Осваиваюсь на форуме
  • 17
  • 0 / 0
Re: AJAX в Joomla
« Ответ #22 : 28.10.2009, 09:33:16 »
Разобрался с запросом, но появилась другая проблема: select.genericlist добавляется в див, но опции в нем пустые, хотя если возвращать просто массив с выбранными значениями из БД, то все ок. Может какая-то проблема с кодировками или я не так заполняю select?

Код
$city = JRequest::getVar('from','','get','string');
$_db = & JFactory::getDBO();
$_query = "SELECT b AS TEXT FROM #__mytable WHERE a = '$city' ORDER BY b";
$_db->setQuery($_query);
$_items = $_db->loadObjectList();
$_cat[] = JHTML::_('select.option','0','&nbsp;','value','text');
$_cat = @array_merge($_cat, $_items);
$list2 = JHTML::_(
'select.genericlist',
$_cat,
'to',
'class="inputbox" size="1" style="width: 130px"',
'text',
'text',
0
);

$response['html'] = $list2;

echo (json_encode($response));

return;


*

legion

  • Осваиваюсь на форуме
  • 17
  • 0 / 0
Re: AJAX в Joomla
« Ответ #23 : 28.10.2009, 18:29:37 »
фигня вопрос был, теперь такой вопрос - как изменить кодировку текста, отображаемого в модуле? в XML вроде поставил windows-1251, название нормально отображается, а сам текст на русском коряво, meta ... charset="1251" пробовал, JText тоже коряво выводит
*

beliyadm

  • Легенда
  • 9758
  • 1664 / 66
  • Севастополь, Россия
Re: AJAX в Joomla
« Ответ #24 : 28.10.2009, 18:36:24 »
UTF-8 вроде бы как использовать надо для работы с AJAX запросами
Все истины, которые я хочу вам изложить, — бесстыдная ложь. Сделать всё хорошо
TLG: @Beliyadm
*

legion

  • Осваиваюсь на форуме
  • 17
  • 0 / 0
Re: AJAX в Joomla
« Ответ #25 : 28.10.2009, 20:09:40 »
с запросами все ОК, когда вывожу через echo, то коряво
*

beliyadm

  • Легенда
  • 9758
  • 1664 / 66
  • Севастополь, Россия
Re: AJAX в Joomla
« Ответ #26 : 28.10.2009, 20:12:44 »
firebug что говорит на заголовки отправляемых и получаемых данных?
Когда писал подобную штуку для 1.0 то пришлось через iconv отдавать на обработку в UTF и соответственно обратно
Все истины, которые я хочу вам изложить, — бесстыдная ложь. Сделать всё хорошо
TLG: @Beliyadm
*

legion

  • Осваиваюсь на форуме
  • 17
  • 0 / 0
Re: AJAX в Joomla
« Ответ #27 : 28.10.2009, 21:19:27 »
вы не поняли, у меня отображается коряво, когда я просто пишу echo 'блаблабла'
видимо где-то нужно прописать <meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
в каждом файле index.html?
*

beliyadm

  • Легенда
  • 9758
  • 1664 / 66
  • Севастополь, Россия
Re: AJAX в Joomla
« Ответ #28 : 28.10.2009, 21:21:01 »
вы не поняли, у меня отображается коряво, когда я просто пишу echo 'блаблабла'
движок версии 1.5? Тогда просто редактируемый файл сохранить в кодировке UTF-8
Все истины, которые я хочу вам изложить, — бесстыдная ложь. Сделать всё хорошо
TLG: @Beliyadm
*

legion

  • Осваиваюсь на форуме
  • 17
  • 0 / 0
Re: AJAX в Joomla
« Ответ #29 : 29.10.2009, 10:12:09 »
спасибо за помощь
все работает :)
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

Multilingual Virtual Keyboard for Joomla 5 [решено]

Автор creative3d

Ответов: 2
Просмотров: 364
Последний ответ 28.01.2024, 12:49:40
от creative3d
News Calendar Joomla 3.0 - html5 - Rus

Автор leo78

Ответов: 26
Просмотров: 13063
Последний ответ 21.11.2023, 18:32:21
от Bommbba
Плагин StopKids для маркировки сайта знаком 18+ для Joomla 1.5-3.x

Автор ecolora

Ответов: 40
Просмотров: 19835
Последний ответ 19.03.2023, 18:55:08
от ecolora
Модуль тегов Joes Word Cloud для Joomla 3

Автор ecolora

Ответов: 1
Просмотров: 1394
Последний ответ 05.05.2022, 19:04:44
от ecolora
Universal ajax Live Search Search не работает без компонента "Поиск"?

Автор Maffo

Ответов: 0
Просмотров: 1395
Последний ответ 04.04.2022, 17:00:07
от Maffo