Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Синтаксис AJAX в Joomla!

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Без описания
Михаил
Отправлено: 25 Августа, 2010 - 15:01:53
Post Id



Гость


Покинул форум
Сообщений всего: 112
Дата рег-ции: Июнь 2010  
Откуда: Армавир, Россия


Помог: 0 раз(а)




Здравствуйте!
При написании модуля для Joomla! сталкнулся с такой проблемой - функция AJAX полностью игнорируется.
Отличается ли синтаксис на Joomla! или необходимы какие-то дополнительные настройки?
Заранее спасибо Улыбка

P.S. Не на Joomla! данный код работал
 
 Top
Viper
Отправлено: 26 Августа, 2010 - 07:44:56
Post Id



Активный участник


Покинул форум
Сообщений всего: 4555
Дата рег-ции: Февр. 2007  
Откуда: Симферополь


Помог: 98 раз(а)




Михаил ajax-запросы куда отсылаются? адрес приведите.


-----
Список фильмов с описанием, блекджеком и... для Joomla? -> https://киноархив[dot]com
Демо нового движка для сайта php.su -> php[dot]su, проект на гитхабе
 
 Top
Михаил
Отправлено: 26 Августа, 2010 - 09:38:09
Post Id



Гость


Покинул форум
Сообщений всего: 112
Дата рег-ции: Июнь 2010  
Откуда: Армавир, Россия


Помог: 0 раз(а)




Вот код пхп-файла модуля:

CODE (htmlphp):
скопировать код в буфер обмена
  1. <?php
  2. #
  3. defined('_JEXEC') or die('Direct Access to this location is not allowed.');
  4.  
  5. ?>
  6.  
  7. <html>
  8. <head>
  9. <script type=\"text/javascript\">
  10. var xmlhttp;
  11. function showresult(str1, str2)
  12.         {
  13.                 xmlhttp=GetXmlHttpObject();
  14.                 if (xmlhttp==null)
  15.                 {
  16.                         alert ("Browser does not support HTTP Request");
  17.                         return;
  18.                 }
  19.         var mes;
  20.         var rb = document.getElementById("f1");
  21.         if (rb[0].checked===true) mes = rb[0].value;
  22.         if (rb[1].checked===true) mes = rb[1].value;
  23.         if (rb[2].checked===true) mes = rb[2].value;
  24.         document.getElementById("text_result2").style.visibility="hidden";
  25.         document.getElementById("text_result2").innerHTML="";
  26.         document.getElementById("text_result").style.visibility="visible";
  27.         document.getElementById("loading").style.visibility="visible";
  28.        
  29.         var url="result.php";
  30.         url=url+"?units="+mes+"&q="+str2;
  31.         url=url+"&sid="+Math.random();
  32.         xmlhttp.onreadystatechange=stateChanged;
  33.         xmlhttp.open("get",url,true);
  34.         xmlhttp.send(null);
  35.         }      
  36.        
  37. function stateChanged()
  38.         {
  39.         if (xmlhttp.readyState==4)
  40.                 {
  41.                 document.getElementById("loading").style.visibility="hidden";
  42.                 document.getElementById("text_result").innerHTML=xmlhttp.responseText;
  43.                 }
  44.         }
  45.        
  46. function GetXmlHttpObject()
  47.         {
  48.          
  49.         if (window.XMLHttpRequest)
  50.                 {
  51.         // code for IE7+, Firefox, Chrome, Opera, Safari
  52.                 return new XMLHttpRequest();
  53.                 }
  54.         if (window.ActiveXObject)
  55.                 {
  56.         // code for IE6, IE5
  57.                 return new ActiveXObject("Microsoft.XMLHTTP");
  58.                 }
  59.         if (window.ActiveXObject)
  60.                 {
  61.                 return new ActiveXObject("Msxml2.XMLHTTP");
  62.                 }
  63.         return null;
  64. }
  65. function fill(thisValue) {
  66.         document.getElementById("inputString").value=thisValue;
  67.         document.getElementById("text_result").innerHTML="";
  68. } // fill
  69. </script>
  70. </head>
  71. <body onload = "document.getElementById('inputString').focus();">
  72.  
  73.         <div align=center>
  74.  
  75.         <form name=form1 id='f1' action = 'db.php'>
  76.         <b>Вид устройства:</b><Br>
  77.         <input type='radio' name=units id=units value='PS' onChange=\"showresult(this.value, document.getElementById('inputString').value);\"> ПС<Br>
  78.         <input type='radio' name=units id=units value='fiders' onChange=\"showresult(this.value, document.getElementById('inputString').value);\"> Фидер<Br>
  79.         <input type='radio' name=units id=units value='TP' onChange=\"showresult(this.value, document.getElementById('inputString').value);\"> ТП<Br>
  80.         <input type='text'  id='inputString' name='u_name' onkeyup=\"showresult(document.getElementById('units').value, this.value);\" name='UN' autocomplete='off'>
  81.         <input type=hidden name='unit_id' id='unit_id'>
  82.         <input type='button' value='OK' onClick = \"finalresult(document.getElementById('unit_id').value, document.getElementById('inputString').value);\">
  83.         </form>
  84.         <div id='suggestions' style='display: none;'>
  85.     <div id='autoSuggestionsList'>
  86.     </div>
  87.     </div>
  88.         </div>
  89.  
  90.         <div id=loading align=center style='visibility:hidden'><br><img src=1.gif><br></div>
  91.  
  92.  
  93.  
  94.         <div id=text_result ></div>
  95.         <div id=text_result2 ></div>
  96.  
  97.  
  98.  
  99.  
  100.  
  101. </body>
  102. </html>
  103.  


При выборе радио-кнопки никакой реакции, хотя пока xmlhttp.readyState не будет равен 4, должно выводиться gif-изображение

(Отредактировано автором: 26 Августа, 2010 - 09:44:50)

 
 Top
JustUserR
Отправлено: 26 Августа, 2010 - 10:24:02
Post Id



Активный участник


Покинул форум
Сообщений всего: 8715
Дата рег-ции: Июнь 2009  


Помог: 17 раз(а)




Михаил пишет:
Вот код пхп-файла модуля:
Вероятно причиной проблемы с вашим модулем является предварительная специфическая его обработка самой CMS - в частности можно видеть что различные части исходных кодов которые должна находится на одном уровне представления имеют разную степень экранировая - в частности часть HTML-аттрибутов имеет лишние предваряющие обраные слеши из-за который вероятно используемыые идентификаторы и JS-выражения не интерпретируются как следует


-----
Сделать можно все что угодно - нужно только старание, терпение и хороший поисковик Улыбка
Безлимитный web-хостинг от 15 рублей за 40 МБ дискового пространства - http://ihost[dot]oks71[dot]ru/
 
 Top
Михаил
Отправлено: 26 Августа, 2010 - 10:45:29
Post Id



Гость


Покинул форум
Сообщений всего: 112
Дата рег-ции: Июнь 2010  
Откуда: Армавир, Россия


Помог: 0 раз(а)




Точно!
Спасибо большое!
Обраные слеши были лишними.

и еше, нужно было указывать абсолютный путь для result.php

НО теперь при нажатии радио-кнопки высвечивается ошибка Огорчение :

Цитата:
Direct Access to this location is not allowed.


Вот код файла result.php:
PHP:
скопировать код в буфер обмена
  1. <?
  2. defined('_JEXEC') or die('Direct Access to this location is not allowed.');
  3.  
  4. $db = &JFactory::getDBO();
  5. $s=$_GET['units'];
  6.  
  7. if(isset($_GET['q'])){
  8.         $q = $_GET['q'];
  9.         if (strlen($q) > 0) {
  10.                 $query = "SELECT * FROM #__".$_GET['units']." WHERE name<>'' and name like '$q%' group by name ORDER BY name";
  11.                 $db -> setQuery($query);
  12.                 $items = $db->loadObjectList();
  13.                 foreach ($items as $item){
  14.                         echo "<li type = 'none' onclick=\"fill('$item -> name'); document.getElementById('unit_id').value='$item -> id'\">$item -> name</li><br>";
  15.                 }
  16.         }
  17. }
  18.  
  19. ?>
  20.  

(Отредактировано автором: 26 Августа, 2010 - 10:54:44)

 
 Top
Viper
Отправлено: 26 Августа, 2010 - 11:33:02
Post Id



Активный участник


Покинул форум
Сообщений всего: 4555
Дата рег-ции: Февр. 2007  
Откуда: Симферополь


Помог: 98 раз(а)




Михаил вы видимо не сильно знакомы с joomla mvc и принципами работы движка. ошибку вы получаете из-за того что не прописали в том скрипте куда отсылаются данные
PHP:
скопировать код в буфер обмена
  1. defined('_JEXEC') or die('Direct Access to this location is not allowed.');


так же для того чтобы работать с ajax в joomla вам необходимо все запросы отсылать на url в параметром format=raw
дальше в вьюшке view.raw.php ловить то что приходит и обрабатывать.


-----
Список фильмов с описанием, блекджеком и... для Joomla? -> https://киноархив[dot]com
Демо нового движка для сайта php.su -> php[dot]su, проект на гитхабе
 
 Top
Михаил
Отправлено: 26 Августа, 2010 - 11:40:50
Post Id



Гость


Покинул форум
Сообщений всего: 112
Дата рег-ции: Июнь 2010  
Откуда: Армавир, Россия


Помог: 0 раз(а)




Viper, не подскажете, где можно найти документацию по данной теме?
я находил книги по Joomla!, в которых только поверхностное описание дается

P. S. строка
PHP:
скопировать код в буфер обмена
  1. defined('_JEXEC') or die('Direct Access to this location is not allowed.');
прописана

(Отредактировано автором: 26 Августа, 2010 - 11:41:18)

 
 Top
Viper
Отправлено: 26 Августа, 2010 - 12:13:06
Post Id



Активный участник


Покинул форум
Сообщений всего: 4555
Дата рег-ции: Февр. 2007  
Откуда: Симферополь


Помог: 98 раз(а)




Михаил api[dot]joomla[dot]org, docs[dot]joomla[dot]org, forum[dot]joomla[dot]org, google.com(c запросом к примеру JRequest:: joomla) + копание исходников joomla

теперь немного по вашему коду...

не совсем корректно


правильнее
CODE (htmlphp):
скопировать код в буфер обмена
  1. $s = JRequest::getVar('units', null, 'GET');


-----
Список фильмов с описанием, блекджеком и... для Joomla? -> https://киноархив[dot]com
Демо нового движка для сайта php.su -> php[dot]su, проект на гитхабе
 
 Top
Михаил
Отправлено: 26 Августа, 2010 - 12:17:19
Post Id



Гость


Покинул форум
Сообщений всего: 112
Дата рег-ции: Июнь 2010  
Откуда: Армавир, Россия


Помог: 0 раз(а)




Сорри за вопрос чайника, JRequest, JFactory, JModuleHelper и т. д. ... - это и есть API-функции Joomla! ?
 
 Top
Viper
Отправлено: 26 Августа, 2010 - 13:36:56
Post Id



Активный участник


Покинул форум
Сообщений всего: 4555
Дата рег-ции: Февр. 2007  
Откуда: Симферополь


Помог: 98 раз(а)




Михаил нет. это классы. в каждом классе свои методы. e.g. метод getVar класса JRequest


-----
Список фильмов с описанием, блекджеком и... для Joomla? -> https://киноархив[dot]com
Демо нового движка для сайта php.su -> php[dot]su, проект на гитхабе
 
 Top
Михаил
Отправлено: 26 Августа, 2010 - 13:57:25
Post Id



Гость


Покинул форум
Сообщений всего: 112
Дата рег-ции: Июнь 2010  
Откуда: Армавир, Россия


Помог: 0 раз(а)




Цитата:
так же для того чтобы работать с ajax в joomla вам необходимо все запросы отсылать на url в параметром format=raw
дальше в вьюшке view.raw.php ловить то что приходит и обрабатывать.


а можно рассказать принцип?
заранее спасибо)
 
 Top
Viper
Отправлено: 26 Августа, 2010 - 14:51:32
Post Id



Активный участник


Покинул форум
Сообщений всего: 4555
Дата рег-ции: Февр. 2007  
Откуда: Симферополь


Помог: 98 раз(а)




Михаил можно ) но все же рекомендую на оффсайт сходить Улыбка там даже картинки есть )

Есть к примеру ссылка вида:
index.php?task=ajax&params=show_result&format=raw

джумлой она обработается так
CODE (htmlphp):
скопировать код в буфер обмена
  1. index -
  2.         - controller.php->ajax -
  3.         - views/view.raw.php->display -
  4.         - view/tmpl/default.php


эта же схема справедлива и для xml, pdf. т.е. view.xml.php и view.pdf.php соответственно.


-----
Список фильмов с описанием, блекджеком и... для Joomla? -> https://киноархив[dot]com
Демо нового движка для сайта php.su -> php[dot]su, проект на гитхабе
 
 Top
Михаил
Отправлено: 26 Августа, 2010 - 15:21:28
Post Id



Гость


Покинул форум
Сообщений всего: 112
Дата рег-ции: Июнь 2010  
Откуда: Армавир, Россия


Помог: 0 раз(а)




task, params, format - это стандартные переменные или их прописывать в модуле нужно?

(Отредактировано автором: 26 Августа, 2010 - 15:22:16)

 
 Top
Viper
Отправлено: 26 Августа, 2010 - 16:20:57
Post Id



Активный участник


Покинул форум
Сообщений всего: 4555
Дата рег-ции: Февр. 2007  
Откуда: Симферополь


Помог: 98 раз(а)




Михаил пишет:
task, params, format - это стандартные переменные или их прописывать в модуле нужно?


task и format да.

что-то я упустил что про модуль говорим ) сделайте проще. в классе хелпера создайте метод и обрабатывайте ваш task. как-то так

PHP:
скопировать код в буфер обмена
  1. defined('_JEXEC') or die('Direct Access to this location is not allowed.');
  2.  
  3. class modMymoduleHelper {
  4.         function ajax($params) {
  5.                 // что-то обрабатываем
  6.                 return $result;
  7.         }
  8. }


потом в файле модуля вызывайте ваш хелпер

PHP:
скопировать код в буфер обмена
  1. defined('_JEXEC') or die('Direct Access to this location is not allowed.');
  2.  
  3. require_once (dirname(__FILE__).DS.'helper.php');
  4.  
  5. $mod = modMymoduleHelper::ajax($params); // $params какие-то значения для обработки в хелпере.
  6. require(JModuleHelper::getLayoutPath('mod_mymodule')); // тут передаем результаты уже в шаблон.


PS! Mymodule условно. замените на ваш.

(Отредактировано автором: 26 Августа, 2010 - 16:22:34)



-----
Список фильмов с описанием, блекджеком и... для Joomla? -> https://киноархив[dot]com
Демо нового движка для сайта php.su -> php[dot]su, проект на гитхабе
 
 Top
JustUserR
Отправлено: 27 Августа, 2010 - 18:23:20
Post Id



Активный участник


Покинул форум
Сообщений всего: 8715
Дата рег-ции: Июнь 2009  


Помог: 17 раз(а)




Михаил пишет:
Точно! Спасибо большое! Обраные слеши были лишними. B еше, нужно было указывать абсолютный путь для result.php
НО теперь при нажатии радио-кнопки высвечивается ошибка
Пожалуйста! В случае когда вы используете с клиетнсокй некоторый URL-адрес или его допустимую часть - то в силу специльных настроек web-сервера или текущего виртуального хоста и запрашиваемой директории для использовани ямеханизмов alias-инга и действенного перенаправления - он может не отражать аналогичный файловый путь на сервере и поэтому является виртуальным Для того чтобы использовать реальные аналогичный путь необходимо проверить допустимые директивы htaccess - и установить в них запрет на модификацию и трансляцию CGI-скриптам требуемого шаблона URL-адреса


-----
Сделать можно все что угодно - нужно только старание, терпение и хороший поисковик Улыбка
Безлимитный web-хостинг от 15 рублей за 40 МБ дискового пространства - http://ihost[dot]oks71[dot]ru/
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« JavaScript & VBScript »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB