Новости Joomla

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

coder

  • Осваиваюсь на форуме
  • 11
  • 1 / 0
Доброго времени суток уважаемые гуру,

Пишу модуль для клиентской части сайта. Модуль выводит 2 выпадающих списка со значениями из бд.
А можно ли сделать перезаполнение второго списка, после onChange первого? !
*

robert

  • Живу я здесь
  • 4974
  • 457 / 20
Вы сами себе ответили: на событие
onChange первого
напишите скриптик и с помощью AJAX перезаполняйте 2-й список.
Не будь паразитом, сделай что-нибудь самостоятельно!
*

coder

  • Осваиваюсь на форуме
  • 11
  • 1 / 0
Никогда не работал с моделью MVC, а в Joomla Develope вообще встречаю одни трудности, не моя спецификация. Если вас не затруднит набросать небольшой пример или направить в нужное русло я был бы признателен.
Задача то по факту простая. Некая система бронирования. Пользователь заходит на сайт, выбирает услугу, после выбранной услуги генерится список привязанных к ней сотрудников персонала, указывается дата и всё. С админской частью я разобрался и реализовал всё, а вот пользовательская страдает. :(

*

fsv

  • Живу я здесь
  • 2781
  • 411 / 2
Веб-разработка: заказ. Только новая разработка.
*

coder

  • Осваиваюсь на форуме
  • 11
  • 1 / 0
Посидел я значит ребята, не осилил. Попробовал и на js реализовать - получается, но вся писанина выплывает в исходном коде документа, по мне так это Неправильно. Больше чем уверен есть реализации посложнее, но качественнее, просто я о них не знаю.

Быть может я перегибаю, но всё же прошу помощи, набросайте мне пример модуля, в котором два select'a. первый получает список из одной таблицы, а второй select получает список из второй таблицы при условии выбранного значения первого select'a.

Имею файл helper.php с функциями getCats() и getPeople() возвращающие значения из бд. Ну и соответственно файл шаблона по-умолч. default.php в котором собственно и вывожу всё в селекты через foreach.

Заранее выражаю благодарность тем, кто поймет меня и поможет мне в сложившейся ситуации. *DRINK*
*

fsv

  • Живу я здесь
  • 2781
  • 411 / 2
Попробовал и на js реализовать - получается, но вся писанина выплывает в исходном коде документа, по мне так это Неправильно.
Больше чем уверен есть реализации посложнее, но качественнее, просто я о них не знаю.
Я тоже хочу о них знать. А пока не знаю, на фронте только на js (jq) взаимосвязанные селекты делаю.
Что с js не так? Что там такого видно? Если получается, делайте. (показали бы код, может действительно там что-то видно).
Веб-разработка: заказ. Только новая разработка.
*

coder

  • Осваиваюсь на форуме
  • 11
  • 1 / 0
Спасибо что не оставили меня без внимания. Сейчас нет возможности выложить свой js код. Позже обязательно скину. Интересует как например из js получать результаты бд запроса.
*

robert

  • Живу я здесь
  • 4974
  • 457 / 20
Интересует как например из js получать результаты бд запроса.
Чисто js- никак. Только посредством AJAX.
Не будь паразитом, сделай что-нибудь самостоятельно!
*

fsv

  • Живу я здесь
  • 2781
  • 411 / 2
Интересует как например из js получать результаты бд запроса.
По change первого селекта - аякс-запрос в php-обработчик с передачей туда выбранного в первом селекте значения. В php-обработчике - запрос в базу, обработка, возврат значения для выбора на js значения во втором селекте.

---
о как, синхронно
Веб-разработка: заказ. Только новая разработка.
*

coder

  • Осваиваюсь на форуме
  • 11
  • 1 / 0
Надеюсь боги будут милосердны, попробую что-нибудь накидать. Результат сообщу.
*

coder

  • Осваиваюсь на форуме
  • 11
  • 1 / 0
в js коде пытаюсь выполнить следующее:

$.ajax({
            type:'GET',
            cache:false,
            dataType:'html',
            url:'index.php?option=com_ajax&module=test&method=getAjaxData&format=raw',
            data:'selectedoption=1',
            success:function (data) {
                alert(data);
            }
        });

в консоли хрома пишет следующее:

GET http://sitename.ru/index.php?option=com_ajax&module=test&method=getAjaxData&format=raw&_=548789252321455 404 (Not Found) jquery.min.js:2
send jquery.min.js:2
v.extend.ajax (index):253
servicesOnChange (index):270
onchange
*

midav

  • Давно я тут
  • 926
  • 115 / 1
В запросе попробуй method=getData
А в хелпере тогда метод будет называться getDataAjax .
Или если по умолчанию в запросе не указывать название метода, то в хелпере будет метод getAjax .
Ответы на вопросы по CSS . Откройте для себя Firebug
*

coder

  • Осваиваюсь на форуме
  • 11
  • 1 / 0
Цитировать
В запросе попробуй method=getData
А в хелпере тогда метод будет называться getDataAjax .
Или если по умолчанию в запросе не указывать название метода, то в хелпере будет метод getAjax .

Удалил параметр method и всё заработало. Спасибо тебе midav!
*

fsv

  • Живу я здесь
  • 2781
  • 411 / 2
Задача то по факту простая. Некая система бронирования. Пользователь заходит на сайт, выбирает услугу, после выбранной услуги генерится список привязанных к ней сотрудников персонала, указывается дата и всё.
Забыл еще вариант. Предполагаю, кол-во услуг и привязанных сотрудников небольшое. Можно только на фронте на jQuery, без аякса, ожидания, доп.запроса в базу.
Логика:
- сразу выводите оба полностью заполненных селекта, со всеми вариантами;
- во втором селекте option'ы имеют класс, такой же, как value option'а в первом селекте, к которому относится этот option второго селекта;
- после загрузки DOM очищается второй select с помощью .detach(), чтобы весь набор option'ов остался в памяти;
- по change первого селекта: очищается второй select и формируется из сохраненных в памяти option'ов второго селекта нужный набор, используя их class (который соответствует value выбранного в первом select option'а).
Веб-разработка: заказ. Только новая разработка.
*

coder

  • Осваиваюсь на форуме
  • 11
  • 1 / 0
Друзья, совсем не лады у меня с этими вещами. Передумал писать модуль, решил, что будет правильней написать пользовательску часть компонента. Однако также встает вопрос:
как получить выборку данных в нужный селект в зависимости от выбранного значения в первом селекте?

Думал, что прокатит вариант с ajax'ом, но не тут то было. Не робит. Попробовал перелопатить его на вид index.php?option=com_componentname. В итоге контролле компонента хавает запрос, отладчик пишет, что функция вернула значение, а вот success запроса не срабатывает. В чем беда?

Опишу задачу, быть может у кого-то есть другая реализация?

Необходимо на сайте реализовать страницу с которой пользователь мог бы вносить данные в бд таблицу.

структура фоормы отправки:

поле "Категория" - содержит список категорий. Формируется следующим образом:
Код
<field name="cats" type="sql" default="0" class="articleselectbox" label="Label:"
            query="SELECT id as value,cat as title FROM #__comname_cats"
            key_field="value"
            value_field="title"
            required="true"
            onchange="catsOnChange()"
        />

Таблица в БД: id,cat

поле "Человек" - должен содержать список людей входящих в указанную пользователем категорию.
Таблица в БД: id,user,cat_id

кнопка "Отправить" - соответственно добавляет запись в таблицу со след. структурой:
id,user_id,cat_id

Не отправляйте в поисковые системы - искал, не тычьте на знания - первый раз с этим работаю.

Выручайте, товарищи гуру! !
*

robert

  • Живу я здесь
  • 4974
  • 457 / 20
как получить выборку данных в нужный селект в зависимости от выбранного значения в первом селекте?
Думал, что прокатит вариант с ajax'ом, но не тут то было.
Должно прокатить.
Таблица в БД: id,cat
поле "Человек" - должен содержать список людей входящих в указанную пользователем категорию.
Таблица в БД: id,user,cat_id
кнопка "Отправить" - соответственно добавляет запись в таблицу со след. структурой:
id,user_id,cat_id
А это уже другая задача, да? Возьмите какую-нибудь форму опроса (старый com_poll отлично подойдет) и посмотрите, как хиты записываются.
Не будь паразитом, сделай что-нибудь самостоятельно!
*

coder

  • Осваиваюсь на форуме
  • 11
  • 1 / 0
Нет, это не другая задача, это я описал структуру данных, которая должна быть.
*

Arkadiy

  • Гуру
  • 5317
  • 463 / 2
  • Крепитесь, други.
Какой запрос отправляет AJAX, в каком файле находится обработчик (с путями) и как называется функция обработчика?
*

morph

  • Давно я тут
  • 924
  • 105 / 0
человек пытается все сделать по канонам новой Joomla модуль+ новый com_ajax, не знаю как щас но на стадии когда он появился работал давольно криво

сделайте свой компонент(так как Joomla не предполагает обработку таких данных в модуле ) и обращайтесь к нему и там функцию на возвращение данных для подчиненного списка
вывели первый выпадающий, второй пустой вывели
при смене первого выпадающего пуляете его значение на http://bushini.ru/index.php?option=com_ваш компонент&task=ваша функция в контроллере&id=значение выбранного из первого выпадающего&ho_html=1
в контроллере компонента пишите функцию которая отдает данные для построения второго вып списка
на soucess в отправке  ajax  запроса  в функции js выстраиваете новый селект

тут примерчики на модуль и плагин на пользование этим com_ajax
https://docs.joomla.org/Using_Joomla_Ajax_Interface


http://awesome-design.com/stati/javascript/svyazannye-spiski-select-jquery-chained-selectes.html это про клиентскую часть, если не через AJAX решите - надо тока из бд данные в селекты оформить
*

coder

  • Осваиваюсь на форуме
  • 11
  • 1 / 0
Не все правильно понимают чего я хочу реализовать во фронт-энде. Необходимо создать форму отправки для пользователей с двумя выпадающими списками типа Страна/Регион. Данные берутся из бд.

Вот похожая тема на форуме:
http://joomlaforum.ru/index.php?topic=118862.0
*

coder

  • Осваиваюсь на форуме
  • 11
  • 1 / 0
Разобрался самостоятельно, попробую объяснить решение.

Первым делом определим файл разметки формы form.xml

Код
<field 
            name="bron_services"
            type="sql"
            default="0"
            class="articleselectbox"
            label="Выберите услугу:"
            query="SELECT id as value,service as title FROM #__bron_services"
            key_field="value"
            value_field="title"
            required="true"
            onchange="servicesOnChange()"
        >
        <option value="0" selected="true">- не выбрано -</option>
        </field>

        <field name="bron_masters"  type="list" label="Выберите мастера:" required="true" disabled="true">
            <option value="0" selected="true">- не выбрано -</option>
        </field>

Первое поле заполняется результатом запроса указанного в аттрибуте поля. Ко всему этому мы добавляем название обработчика onchange. Это поле отвечает за хранение родительских структур (категорий).
Второе поле является дочерним (зависимым). Поэтому кроме как одной опции "не выбрано" в нем быть не должно, заполнятся оно будет при onchange родительского.

Теперь нам нужно обзавестись функцией получения списка дочерних элементов, в моем случае мастеров. Функцию засунем в главный контроллер компонента (расположение /components/com_yourcomponent/controller.php). Алгоритм прост:
  • получаем id выбранной категории
  • делаем запрос в бд (select id,master from #__tablename where service_id = $sid)
  • отправляем результат в формате JSON для удобства последующей обработки

Код
public static function getMasterByServiceId()
    {
        $sid = JRequest::getVar('sid', null, 'GET');
        if ($sid) {
            $db = JFactory::getDbo();
            $query = $db->getQuery(true);
            $query->select('id,master');
            $query->from('#__tablename');
            $query->where('service_id = '. $db->quote($sid));
            $db->setQuery($query);
            $rows = $db->loadObjectList();
       
            $res = Array();
           
            foreach ($rows as $row)
            {
                $res[] = $row;
            }
           
    echo json_encode($res);
        }
    }

Основную работу сделали. Осталось привести в порядок наше отображение (View). (не забудьте вывести поля формы во view.html.php)

Теперь только JS:

Первым делом напишем функцию очистки дочернего селекта (чистим, добавляем по дефолту "не выбрано"):
Код
function clearMasters()
{
    document.getElementById('bron_masters').length = 0;
    var opt = document.createElement('option');
    opt.value = 0;
    opt.text = "- не выбрано -";
    document.getElementById('bron_masters').appendChild(opt);
    document.getElementById('bron_masters').options.selectedIndex = 0;
}

Далее уже забытое родительское OnChange():

Код
function servicesOnChange()
{
    clearMasters(); //чистим дочерний селект
   
    if (document.getElementById('bron_services').value == 0) //если не выбрана категория
    {
        document.getElementById('bron_masters').disabled = true; //деактивируем дочерний селект
    }
    else
    {
//если выбрали категорию
        document.getElementById('bron_masters').disabled = false; //активируем дочерний селект       
       
//формируем запрос в контроллер компонента
        var myRequest = new Request({
            url: 'index.php?option=com_bron&task=getMasterByServiceId&format=json',
            method: 'get',
            onSuccess: function(responseText){
               
//наши действия при успешном выполнении
//парсим результат в формате JSON
                var arr = JSON.parse(responseText);
               
//закидываем всё в дочерний селект
                for (var i=0;i<arr.length;i++)
                {       
                    var opt = document.createElement('option');
                    opt.value = arr[i].id;
                    opt.text  = arr[i].master;
                    document.getElementById('bron_masters').appendChild(opt);
                }
            },
            onFailure: function(){
                //alert('onFailure');
            }
        });
       
//здесь указываем параметр sid
        myRequest.send('sid='+document.getElementById('bron_services').value);   
    }

}

Вот и всё, а ты боялась, даже юбка не помялась  ;D
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

Счётчик полей в админке модуля

Автор zeus07

Ответов: 9
Просмотров: 1014
Последний ответ 28.06.2021, 13:40:31
от zeus07
Не занимать место под пустой вывод модуля

Автор platonische

Ответов: 11
Просмотров: 963
Последний ответ 28.04.2020, 07:53:11
от sivers
Проблема вызова модели компонента из модуля

Автор platonische

Ответов: 1
Просмотров: 790
Последний ответ 24.04.2020, 18:32:32
от platonische
Pagination компонента и данные из формы модуля

Автор platonische

Ответов: 4
Просмотров: 1050
Последний ответ 29.01.2020, 11:32:43
от mardok
Доступ к переменной модели из модуля

Автор platonische

Ответов: 18
Просмотров: 2460
Последний ответ 11.01.2020, 22:21:42
от robert