zt.Dan4ik
Осваиваюсь на форуме
 
Репутация: +1/-0
Offline
Пол: 
Сообщений: 44
|
 |
« : 24.10.2011, 18:05:14 » |
|
Доброе время суток. Есть потребность в написании модуля для поиска по стороннему компоненту с использованием JQuery Autocomplete Ниже привожу пример рабочего скрипта: Клиент <!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8"> <title>jQuery UI Autocomplete - Remote JSONP datasource</title> <link rel="stylesheet" href="http://jqueryui.com/themes/base/jquery.ui.all.css"> <script src="http://jqueryui.com/jquery-1.6.2.js"></script> <script src="http://jqueryui.com/ui/jquery.ui.core.js"></script> <script src="http://jqueryui.com/ui/jquery.ui.widget.js"></script> <script src="http://jqueryui.com/ui/jquery.ui.position.js"></script> <script src="http://jqueryui.com/ui/jquery.ui.autocomplete.js"></script> <script> $(function() { $("#city").autocomplete({ source: function(request,response) { $.ajax({ url: "autocomplete.php", dataType: "json", data: { term: request.term }, success: function(data){ response( $.map( data, function( item ) { return{ label: item, value: item } })); } }); }, minLength: 1 }); }); </script> </head> <body>
<div class="demo">
<div class="ui-widget"> <label for="city">Your city: </label> <input id="city" /> </div>
</div><!-- End demo -->
</body> </html>
Сервер <?php
header('Content-Type: text/html; charset=utf-8'); if ($_GET["term"]) {
$host = "localhost"; $user = "root"; $password = ""; $database = "rent2"; $param = $_GET["term"]; $server = mysql_connect($host, $user, $password) or die('error'); $connection = mysql_select_db($database, $server) or die('error'); mysql_query("SET CHARACTER SET 'utf8'") or die('error'); $query = mysql_query("SELECT name FROM jos_properties_locality WHERE name like '".$param."%'") or die('error'); for ($x = 0, $numrows = mysql_num_rows($query); $x < $numrows; $x++) { $row = mysql_fetch_assoc($query); $array[$x] = $row['name']; } if ($array == NULL) $array[0] = "Ничего не найдено"; echo json_encode($array); mysql_close($server); } ?> Вопрос в том как такое можно реализовать в модуле для Joomla, а именно куда должна вести ссылка клиентского скрипта для выборки из базы? Сейчас она выглядить вот так url: "autocomplete.php",
|
|
|
|
|
Записан
|
|
|
|
shprota
Разработчик расширений для Joomla 1.5
Репутация: +46/-1
Offline
Пол: 
Сообщений: 834
Тружусь, не покладая рук
|
 |
« Ответ #1 : 24.10.2011, 18:08:52 » |
|
Необходимо создать компонент, к которому и надлежит обращаться. Как плохой вариант, можно сделать отдельный файл в папке модуля, который будет сам обрабатывать запрос - без API Joomla, или даже включить в него АПИ, но это кривой путь, на мой взгляд. Проще все-таки сделать небольшой компонент, который будет обрабатывать запросы.
|
|
|
|
|
Записан
|
|
|
|
zt.Dan4ik
Осваиваюсь на форуме
 
Репутация: +1/-0
Offline
Пол: 
Сообщений: 44
|
 |
« Ответ #2 : 24.10.2011, 18:30:17 » |
|
Поиск будет выполнятся по данным таблиц компонента com-property Возможно будет лучше в самом компоненте com-property добавить задачу выборки данных к которому будет обращаться скрипт... Возможно ли так это реализовать? Если да, то пожалуйста объясните с чего начать? Насколько я понимаю в модели компонента необходимо добавить задачу в котором будет серверная часть скрипта (mysql запрос) а в клиентском скрипте указать ссылку к компоненту-контроллеру-виду... Но уверен что не совсем правильно я мыслю, не хватает знаний 
|
|
|
|
|
Записан
|
|
|
|
|
Lex
|
 |
« Ответ #3 : 24.10.2011, 18:32:40 » |
|
Правильно.
|
|
|
|
|
Записан
|
|
|
|
shprota
Разработчик расширений для Joomla 1.5
Репутация: +46/-1
Offline
Пол: 
Сообщений: 834
Тружусь, не покладая рук
|
 |
« Ответ #4 : 24.10.2011, 18:33:50 » |
|
надо в контроллер компонента добавить метод, который будет вызываться через AJAX и возвращать необходимые данные. модель - по желанию, вид - не нужен, поскольку отдаваться будет JSON прямо из контроллера. Вот тут есть общая информация: http://docs.joomla.org/Adding_AJAX_to_your_component
|
|
|
|
|
Записан
|
|
|
|
zt.Dan4ik
Осваиваюсь на форуме
 
Репутация: +1/-0
Offline
Пол: 
Сообщений: 44
|
 |
« Ответ #5 : 25.10.2011, 11:19:54 » |
|
Т.е. в моём случаи в главном контроллере компонента добавляется метод function jsonsearch() { $param = JRequest::getVar('term'); $db =& JFactory::getDBO(); $query = "SELECT name FROM #__properties_locality WHERE name like '".$param."%'"; $db->setQuery($query); $row = $db->loadAssocList(); for ($x = 0, $numrows = mysql_num_rows($query); $x < $numrows; $x++) { $array[$x] = $row['name']; } if ($array == NULL) $array[0] = "Ничего не найдено"; echo json_encode($array); }
а скрипт должен обращаться по ссылке index.php?option=com_properties&task=jsonsearch ?
|
|
|
|
« Последнее редактирование: 25.10.2011, 11:36:44 от zt.Dan4ik »
|
Записан
|
|
|
|
shprota
Разработчик расширений для Joomla 1.5
Репутация: +46/-1
Offline
Пол: 
Сообщений: 834
Тружусь, не покладая рук
|
 |
« Ответ #6 : 25.10.2011, 11:37:41 » |
|
Все верно. Только к вызову добавьте еще &format=raw чтобы Joomla не добавляла HTML свой
|
|
|
|
|
Записан
|
|
|
|
zt.Dan4ik
Осваиваюсь на форуме
 
Репутация: +1/-0
Offline
Пол: 
Сообщений: 44
|
 |
« Ответ #7 : 25.10.2011, 12:33:57 » |
|
А в контролере компонента можно как-то доставать параметры из модуля?
|
|
|
|
|
Записан
|
|
|
|
shprota
Разработчик расширений для Joomla 1.5
Репутация: +46/-1
Offline
Пол: 
Сообщений: 834
Тружусь, не покладая рук
|
 |
« Ответ #8 : 25.10.2011, 12:46:13 » |
|
Можно. JModuleHelper::getModule('mod_module')->params
|
|
|
|
|
Записан
|
|
|
|
zt.Dan4ik
Осваиваюсь на форуме
 
Репутация: +1/-0
Offline
Пол: 
Сообщений: 44
|
 |
« Ответ #9 : 25.10.2011, 12:51:08 » |
|
Огромное вам спасибо  Сейчас будем все реализовывать 
|
|
|
|
|
Записан
|
|
|
|
MetaSpirit
Завсегдатай
   
Репутация: +47/-0
Offline
Пол: 
Сообщений: 519
R.A.S.Lab[.org] - Inspired by YOOtheme
|
 |
« Ответ #10 : 25.10.2011, 16:28:57 » |
|
Можно. JModuleHelper::getModule('mod_module')->params
А если копий модуля несколько?
|
|
|
|
|
Записан
|
|
|
|
shprota
Разработчик расширений для Joomla 1.5
Репутация: +46/-1
Offline
Пол: 
Сообщений: 834
Тружусь, не покладая рук
|
 |
« Ответ #11 : 25.10.2011, 16:30:56 » |
|
А если копий модуля несколько?
А в код заглянуть лениво? Там есть второй параметр title.
|
|
|
|
|
Записан
|
|
|
|
MetaSpirit
Завсегдатай
   
Репутация: +47/-0
Offline
Пол: 
Сообщений: 519
R.A.S.Lab[.org] - Inspired by YOOtheme
|
 |
« Ответ #12 : 26.10.2011, 00:14:14 » |
|
А в код заглянуть лениво? Там есть второй параметр title.
Если нужно, заглядываю. А так, мимо проходил, решил подлить масла...
|
|
|
|
|
Записан
|
|
|
|
zt.Dan4ik
Осваиваюсь на форуме
 
Репутация: +1/-0
Offline
Пол: 
Сообщений: 44
|
 |
« Ответ #13 : 26.10.2011, 11:14:06 » |
|
Маленький вопрос: Ссылка типа - option=&view=properties&task=showresults означает использование модели showresults и вывод данных через вид properties?
|
|
|
|
|
Записан
|
|
|
|
shprota
Разработчик расширений для Joomla 1.5
Репутация: +46/-1
Offline
Пол: 
Сообщений: 834
Тружусь, не покладая рук
|
 |
« Ответ #14 : 26.10.2011, 13:10:38 » |
|
маленький ответ: не обязательно, не обязательно
|
|
|
|
|
Записан
|
|
|
|
zt.Dan4ik
Осваиваюсь на форуме
 
Репутация: +1/-0
Offline
Пол: 
Сообщений: 44
|
 |
« Ответ #15 : 26.10.2011, 13:25:00 » |
|
маленький ответ: не обязательно, не обязательно
=) этот вопрос не касается моего модуля, просто не хотел создавать ради него отдельную тему. Мне нужно понять что происходит если выполняется данная ссылка, для примера, который поможет мне в моей задаче. Модуль то я сделал, а теперь хочу расширить компонент, что бы он умел искать.
|
|
|
|
|
Записан
|
|
|
|
zt.Dan4ik
Осваиваюсь на форуме
 
Репутация: +1/-0
Offline
Пол: 
Сообщений: 44
|
 |
« Ответ #16 : 26.10.2011, 16:36:29 » |
|
да, и еще хотел спросить... Извините если надоедаю. Контроллер (написан специально под мой модуль) получает данные введенный в форму поиска, делает с ними манипуляцию и передаёт в модель (стандартная модель компонента) поисковые данные. Но в модели данные для вывода информации получаются не с переменных которые пришли с котроллера, а вот таким способом: $menus = &JSite::getMenu(); $menu = $menus->getActive(); $lid = $menu->query['lid']; $sid = $menu->query['sid']; Насколько я понимаю данные берутся из активного меню, т.е. только тогда когда пользователь добрался к модели с помощью меню. Очень не хотелось бы что-то добавлять в стандартные файлы компонента. Возможно как-то заранее в контроллере задать параметр $menu->query ? Сейчас же приходится в моделе делать условие $menus = &JSite::getMenu(); $menu = $menus->getActive(); $slid = JRequest::getVar('lid'); $ssid = JRequest::getVar('sid'); if ($slid > 0 and $slid > 0) { $menu->query['lid'] = $slid; $menu->query['sid'] = $ssid; } $lid = $menu->query['lid']; $sid = $menu->query['sid'];
|
|
|
|
« Последнее редактирование: 26.10.2011, 16:44:10 от zt.Dan4ik »
|
Записан
|
|
|
|
shprota
Разработчик расширений для Joomla 1.5
Репутация: +46/-1
Offline
Пол: 
Сообщений: 834
Тружусь, не покладая рук
|
 |
« Ответ #17 : 26.10.2011, 17:08:06 » |
|
Боюсь, это единственный вариант.
|
|
|
|
|
Записан
|
|
|
|
|
|
|