Хочу поделиться своим опытом подключения скриптика для автоматического заполнения формы данными, которые динамически выбираются из базы данных. Понадобилось мне это в своё время сделать для компонента PURPS (Камень, Ножницы, Бумага). Суть сводится к тому, что пользователь для вызова соперника на игру должен вводить в поле формы логин. Сами понимаете, что вводить логин целиком жутко неудобно, поэтому я решил подключить для этих целей autocompleter. После поисков в сети я набрёл на очень интересный вариант с использованием jQuery. Автор идеи Jamie McConnell и оригинал его статьи можно найти здесь. Этот вариант хорошо тем, что не требуется дополнительных библиотек, а только jQuery.
Итак, в оригинале я имел следующее поле для ввода логина и отправки запроса (поле расположено у меня в файле в папочке /components/com_purps):
<style type="text/css">.suggestionsBox{position: relatvie;left:30px;margin:7px0px0px0px;width:150px;background-color:#212427;border:2pxsolid#000;color:#fff;}.suggestionList{margin:0px;padding:0px;}.suggestionList li {margin:0px0px3px0px;padding:2px;cursor:pointer;}.suggestionList li:hover {background-color:#659CD8;}
</style>
<input type="text" size="30" name="user" id="inputString" onkeyup="lookup(this.value);" onblur="fill();" />
<input type="submit" name="submit" value="Send Challenge" />
<div class="suggestionsBox" id="suggestions" style="display: none;">
<div class="suggestionList" id="autoSuggestionsList"></div>
</div></pre>
</div>
</div>
<p style="margin-top: 0px; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; font-style: inherit; font-size: 12px; font-family: inherit; vertical-align: baseline; text-align: justify; line-height: 1.6em; padding: 0px; border: 0px initial initial;">Самым интересным здесь является функция lookup(). Она получает логин с поля ввода и передаёт его в rpc.php через POST используя вызов jQuery Ajax POST. Если (IF) inputString равно 0 (нулю) функция прячет блок #suggestions. В противном случае (ELSE) мы берём inputString и направляем в rpc.php используя jQuery $.post() function:
$.post(url, [data], [callback])
Callback позволяет нам подвязать функцию, чем мы и воспользуемся. Если значение data больше чем ноль, то функция показывает нам наш блок #suggestions и подменяет внутри него HTML на поступившие данные из rpc.php:
/** Подключаем Joomla framework */define('_JEXEC',1);define('JPATH_BASE',dirname(__FILE__).'/../..');define('DS',DIRECTORY_SEPARATOR);require_once('../../configuration.php');require_once('../../includes/defines.php');require_once('../../includes/framework.php');$mainframe=&JFactory::getApplication('site');// Получаем ссылку на объект базы данных$db=&JFactory::getDBO();// Есть ли какие-либо POST-данные?if(isset($_POST["queryString"])){$queryString=addslashes($_POST['queryString']);// Длина строки больше 0?if(strlen($queryString)>0){// Делаем запрос: Используем LIKE '$queryString%'// Знак процента используем как вайлдкард. В случае с логинами это будет работать вот так:// $queryString = 'tes';// Возвращаемые данные = 'Test, Testit';$db->setQuery("SELECT username FROM #__users WHERE username LIKE '$queryString%' LIMIT 10");$rows=$db->loadObjectList();if($db->getErrorNum()){
JError::raiseError(500,$db->stderr());}foreach($rowsas$row){// Форматируем результат, я использую <li> для списка, но это можно и поменять.// Функция onClick заполнеят текстовое поле результатом.// это создаёт список и наполняет его логинами.echo'<li onClick="fill(\''</span><span style="font-style: inherit; font-size: 12px; font-family: inherit; vertical-align: baseline; color: #339933; padding: 0px; margin: 0px; border: 0px initial initial;">.$row->username.'\');">'.$row->username.'</li>';}}else{// Dont do anything.}// There is a queryString.}else{echo'There should be no direct access to this script!';}
Autocompleter jQurey в Joomla - Генератор расширений Joomla и многое другое на нашем сайте посвященном работе расширений, компонентов, модулей, плагинов для линейки Joomla.
Отправляйте ссылку на страницу своим друзьям и в социальные сети воспользовавшись графическими иконками выше.
Небольшой пример из повседневной практики. Организация меняет реквизиты, и они вступят в силу через пару недель. На сайте идет приём объявлений и объявления принимаются на несколько месяцев в...
Сегодня у товарища, сайт которого находится на старой Joomla 1.0.3, была сильная нагрузка на сервере, просматривая логи обнаружил не вежливый запрос такого порядка:
http://сайт/index2...
Первоначальный осмотр сайта обнаружил, что у клиента закрыт доступ по фтп, что сузило круг подозреваемых уязвимостей, стало быть отверстие в какомто скрипте движка joomla. Касперский яро...
Снова грянул гром зарежения сайтов новым вирусом Troj/JSRedir-MH.
И так в коротко по вирусу Troj/JSRedir-MH. Вирус или троян куда интереснее чем свои предшествиники, тепер...
Сегодня поделюсь немного интересной информацией для владельцев сайтов собранных ан joomla. Рано и поздно возникает задача подписки и рассылки информации с сайта, это может быть разная постановка зада...
И вот и мне пришлось столкнулся с проблемами перехода на win 8 в придачу с ie 10, некоторых постоянных пользователей моих сайтов. На многих сайтах имеющих раздел по приёму объявлений, использ...
Всем привет, снова снова кунена, получил задание на допиливание популярного форума Kunena, сегодня потребовалось поменять ссылку на профиль пользователя. Это связано с тем, что на сайте стоит социа...
Все у кого стоит форум kunena мешает надпись с двумя ссылкам внизу форума "Работает на Kunena". Сея надпись висит на каждой странице форма, а также страница разработчиков содержит множество вн...
Для тех кто действительно делает сайт для людей, моя следующая заметка. Расскажу вам, как избавиться от лишних quote в постах на форуме kunena. У меня несколько тематических сайтов с нормальной посеща...
Так и вот мы обновись до последней версии кунены, сразу видно компонент внутри сильно изменился, и вот незадача у некоторых пользователей пропали аватары, физически они есть но неотображаются.
...
При разработке расширений для CMS Joomla, таких как плагины, модули, компоненты или шаблоны, часто возникает необходимость получить параметры разрабатываемого или любого другого расширения. В этой ...
1. В папке \components\com_kunena\template\ваш_шаблон\ находим файл template.xml и вставляем в него такой кусок (чтобы была возможность выбора показывать это поле или нет):
<param name="l...
Иногда случается, что набор собственных функций или библиотек нужно подключить в Joomla. Но иногда подключить их нужно так, чтобы они присутсвовали во всей системе, вне зависимо...
В платформе Joomla 11.3 разработчики добавлил несколько полезных новых классов для разработчиков. Рассмотрю некоторый из них - JGrid (для построения HTML таблиц), JWebClient (для получения информац...
Создадим две вложенные директории /files/files в корне сайта. Если вы пожелаете использовать другие имена директорий, то вам необходимо будет внести соответствующие правки в дальнейшем.
...