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

AlekVolsk

  • Гуру
  • 6915
  • 415 / 4
Компонент, админская часть. Во вьюхе выводится два поля типа list с выборкой данных из базы через поле-потомок JFormFieldList.
Одно поле просто выводит список из таблицы, второе поле должно выводить список по условию, где значение условия равно текущему значению первого поля.
Т.е. по сути нужен master-detail в рамках двух JFormFieldList. Имеются ли готовые примеры, дабы свой велосипед не изобретать? Боюсь, у меня на очередное изобретение опять времени уйдет...
*

Aleks.Denezh

  • Живу я здесь
  • 3406
  • 428 / 4
Re: Связать два списка в админке
« Ответ #1 : 18.02.2015, 16:16:31 »
Это связанные поля, либо писать один контрол с кучей скриптов (в котором будут выводится два связанных поля)
Либо второе дергать аяксом!
*

AlekVolsk

  • Гуру
  • 6915
  • 415 / 4
Re: Связать два списка в админке
« Ответ #2 : 18.02.2015, 16:21:46 »
Упс, не все так просто в 3/9 королевстве, как это может показаться из 3/10... Вечно у меня задачки типа "как поковыряться в левой ноздре мизинцем правой пятки" ( :) )

Тема аякса все более интересна становится. Особенно его использование в админке. Вы такое делали?
« Последнее редактирование: 18.02.2015, 16:27:16 от AlekVolsk »
*

Aleks.Denezh

  • Живу я здесь
  • 3406
  • 428 / 4
Re: Связать два списка в админке
« Ответ #3 : 18.02.2015, 16:29:23 »
Вы такое делали?
Естественно... все очень просто (если у вас свой компонент, а у вас 100% свой компонент )
*

AlekVolsk

  • Гуру
  • 6915
  • 415 / 4
Re: Связать два списка в админке
« Ответ #4 : 18.02.2015, 16:34:56 »
Да, 100% свой компонент, J3.last.
Правильно ли понял: на первый список вешаем onchange js => в котором вызываем аякс-функцию => делаем выборку для второго списка = > результат возвращаем во вьюху => присваиваем второму списку результат выборки из аякс-функции. 2 последних шага чего-то в ступор вводят немного.
*

Aleks.Denezh

  • Живу я здесь
  • 3406
  • 428 / 4
Re: Связать два списка в админке
« Ответ #5 : 18.02.2015, 17:32:46 »
При смене первого селект стучимся куда то аяксом, возвращаем в результате дргой селект и ложим его в нужный нам блок
*

AlekVolsk

  • Гуру
  • 6915
  • 415 / 4
Re: Связать два списка в админке
« Ответ #6 : 18.02.2015, 17:36:13 »
возвращаем в результате дргой селект
Сформировываем готовый HTML?

Посмотрел разметку. Вывод раскрывающегося списка на bs2 - жесть. А если шаблон админки у конечного будет другой, не на bs2?
« Последнее редактирование: 18.02.2015, 17:46:51 от AlekVolsk »
*

Aleks.Denezh

  • Живу я здесь
  • 3406
  • 428 / 4
Re: Связать два списка в админке
« Ответ #7 : 18.02.2015, 19:30:14 »
Сформировываем готовый HTML?
Да ) Почему бы нет?)

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

AlekVolsk

  • Гуру
  • 6915
  • 415 / 4
Re: Связать два списка в админке
« Ответ #8 : 18.02.2015, 19:53:34 »
не совсем понял про какой вы список говорите
http://www.floomby.ru/s2/Ye3Dad
обычный список, выводимый посредством echo $this->form->getInput('fieldname'); описанный в XML как type="list" с кучей options
*

Aleks.Denezh

  • Живу я здесь
  • 3406
  • 428 / 4
Re: Связать два списка в админке
« Ответ #9 : 18.02.2015, 21:20:48 »
обычный список, выводимый посредством echo $this->form->getInput('fieldname'); описанный в XML как type="list" с кучей options
Так то же скриптом херачится ) Вам не нужно ничего делать! Просто подрубить нужный скрипт:
Код: php
<?php JHtml::_( 'formbehavior.chosen', 'select' ); ?>
И все, не нужно будет что то править!

Вот например на этом сайте так делал: http://stroykanews.com/katalog.html
Код: php
jQuery(document).ready(function ($) {
$('#region').on('change', function () {
$.get('index.php?option=com_organisations&task=getCityListSite&region=' + $(this).val(), function (response) {
$('.city-block').html(response);
$('select').chosen({width: '200px'}); // это применяем скрипт для стилизации вновь загруженного селекта
});
});
})
Второй селект лежит в блоке <div class="city-block"></div>
AJAX мне возвращает:
<select>
<option value="...">...</option>
...
</select>

А список городов формирую банально  в контроллере

Код: php
public function getCityListSite()
{
$options = array();
// получаем данные  //
echo JHtml::_( 'select.genericlist', $options, 'jform[city]', 'class="input-text width-200"' );
exit;
}

Главное в XML файле формы добавить это поле
Код: xml
<field name="city" type="list" label=""></field>
И его можно вывести с какими то базовыми данными...
« Последнее редактирование: 18.02.2015, 21:29:56 от Istaan »
*

AlekVolsk

  • Гуру
  • 6915
  • 415 / 4
Re: Связать два списка в админке
« Ответ #10 : 18.02.2015, 21:24:15 »
Спс, пробую.
*

AlekVolsk

  • Гуру
  • 6915
  • 415 / 4
Re: Связать два списка в админке
« Ответ #11 : 18.02.2015, 23:02:44 »
Что имею в начале: http://www.floomby.ru/s2/je3sjx

При попытке изменения партнера получаю: http://www.floomby.ru/s2/7e3scs (все select'ы на странице продублированы, вместо второго селекта из задействованной пары выводится вьюха компонента по-умолчанию).

Скрипт в шаблоне вьюхи:
Спойлер
[свернуть]

Поля в шаблоне вьюхи выводятся так:
Спойлер
[свернуть]

Аякс-модель:
Спойлер
[свернуть]

В контроллере, связанной с данной вьюхой:
Спойлер
[свернуть]

Задействованная пара полей в xml:
Спойлер
[свернуть]

Где я лопух?
« Последнее редактирование: 18.02.2015, 23:06:51 от AlekVolsk »
*

robert

  • Живу я здесь
  • 4974
  • 457 / 20
Re: Связать два списка в админке
« Ответ #12 : 18.02.2015, 23:12:30 »
AlekVolsk, AJAX - удобная штука и совсем не сложная. В вашем случае все примерно так выглядит:
- выбираете значение select и заодно отправляете форму обработчику,
- обрабочик принимает параметр, обрабатывает и выдает HTML-код (хотя может быть другие форматы: JSON, XML...)
- HTML-код выводится на стрнанице.
Только все это происходит без перезагрузки страницы.

P.S. Ooops, не видел ваш последний пост.
« Последнее редактирование: 18.02.2015, 23:15:56 от robert »
Не будь паразитом, сделай что-нибудь самостоятельно!
*

AlekVolsk

  • Гуру
  • 6915
  • 415 / 4
Re: Связать два списка в админке
« Ответ #13 : 18.02.2015, 23:17:58 »
P.S. Ooops, не видел ваш последний пост.
В том-то вся и фишка... До этого уже много чего на аяксе наваял, просто с мастер-детайл впервые столкнулся на нем, чего-то опять недогоняю
*

AlekVolsk

  • Гуру
  • 6915
  • 415 / 4
Re: Связать два списка в админке
« Ответ #14 : 18.02.2015, 23:28:05 »
Поменял $('.partsite').html(response); на alert(response); посмотрел, что выводит - там полная html-страница. Что-то в аякс-модели не так?
*

zomby6888

  • Завсегдатай
  • 1473
  • 171 / 3
Re: Связать два списка в админке
« Ответ #15 : 18.02.2015, 23:31:32 »
добавьте exit; в методе контроллера, он у Вас скорее всего весь шаблон тащит. А может ошибку отдает. Ответ аякса лучше в консоль выводить и там мониторить а не алертом.
« Последнее редактирование: 18.02.2015, 23:36:39 от zomby6888 »
интернет-блог: http://websiteprog.ru
*

AlekVolsk

  • Гуру
  • 6915
  • 415 / 4
Re: Связать два списка в админке
« Ответ #16 : 18.02.2015, 23:36:41 »
Он там есть:
Код: php
  public function getListSites()
  {
    $options = array();
    echo JHtml::_('select.genericlist', $options, 'jform[partsite]', '' );
    exit;
  }
*

robert

  • Живу я здесь
  • 4974
  • 457 / 20
Re: Связать два списка в админке
« Ответ #17 : 18.02.2015, 23:38:02 »
посмотрел, что выводит - там полная html-страница.
Именно та страница?
Не будь паразитом, сделай что-нибудь самостоятельно!
*

AlekVolsk

  • Гуру
  • 6915
  • 415 / 4
Re: Связать два списка в админке
« Ответ #18 : 18.02.2015, 23:42:38 »
нет, просто вьюха по умолчанию этого-же компонента, полностью вся страница админки
селекты в другой вьюхе

возвращаю из аякс-модели $result (результат запроса), $id (получаю из реквеста) - на выходе одно и тоже
« Последнее редактирование: 18.02.2015, 23:45:43 от AlekVolsk »
*

robert

  • Живу я здесь
  • 4974
  • 457 / 20
Re: Связать два списка в админке
« Ответ #19 : 18.02.2015, 23:47:54 »
С контроллером не ладно.
Не будь паразитом, сделай что-нибудь самостоятельно!
*

AlekVolsk

  • Гуру
  • 6915
  • 415 / 4
Re: Связать два списка в админке
« Ответ #20 : 18.02.2015, 23:49:11 »
весь контроллер:
Спойлер
[свернуть]
стандартный контроллер на редактирование записи в админке
*

zomby6888

  • Завсегдатай
  • 1473
  • 171 / 3
Re: Связать два списка в админке
« Ответ #21 : 18.02.2015, 23:57:57 »
а аякс-модель тут каким боком? Ее методы вроде нигде не вызываются. И пустой список почему то контроллер возвращает. Непонятно
интернет-блог: http://websiteprog.ru
*

Fedor Vlasenko

  • Живу я здесь
  • 3845
  • 733 / 7
  • https://fedor-vlasenko.web.app
Re: Связать два списка в админке
« Ответ #22 : 18.02.2015, 23:58:21 »
Код: php
$options = array();
// получаем данные  //
Саша на тебя возложил реализацию получения этих данных
кстати я не вижу здесь getCityListSite()
так наверное понятнее js
Код: javascript
(function ($) {
$('#region').on('change', function () {
var region = this.value;
$.get('index.php',
{
option: 'com_organisations',
task: 'getCityListSite',
region: region
},
function (response) {
response && $('.city-block').html(response);
});
});
})(Query);
*

AlekVolsk

  • Гуру
  • 6915
  • 415 / 4
Re: Связать два списка в админке
« Ответ #23 : 19.02.2015, 00:09:13 »
С js все понятно.

Код: php
$options = array();
// получаем данные  //
Саша на тебя возложил реализацию получения этих данных
Упс... я-то получаю данные в аякс-модели, а вызываю метод контроллера...

Данные загоняем в $options? В каком виде они должны там быть, двумерный массив? - с этим разобрался
« Последнее редактирование: 19.02.2015, 00:14:53 от AlekVolsk »
*

Aleks.Denezh

  • Живу я здесь
  • 3406
  • 428 / 4
Re: Связать два списка в админке
« Ответ #24 : 19.02.2015, 00:27:15 »
всегда в таких случаях первое действие должно быть набор в браузере адреса: site.ru/index.php?option=com_crmtourism&task=getListSites&partner=1
Смотрите что выводит! Так вы можете посмотреть правильно ли у вас сформирован адрес и ловит ли контроллер задачу!
*

AlekVolsk

  • Гуру
  • 6915
  • 415 / 4
Re: Связать два списка в админке
« Ответ #25 : 19.02.2015, 00:30:27 »
В контроллере:
Код: php
  public function getListSites()
  {
    $options = array();
    $id = filter_input(INPUT_GET, 'partner', FILTER_VALIDATE_INT);
    $result = JFactory::getDbo()->setQuery('select `id`, `s_url` from `#__crmt_sites` where `s_partner`='.(int)$id)->loadObjectList();
    foreach ($result as $item)
      $options[] = JHTML::_('select.option', $item->id, $item->s_url);
    echo JHtml::_('select.genericlist', $options, 'jform[partsite]', '' );
    exit;
  }
Скрипт:
Код: javascript
  jQuery(document).ready(function ($) {
    $('#jform_partname').on('change', function () {
      $.get('index.php', {option:'com_crmtourism', task:'getListSites', partner:$(this).val()}, function (response) {
        alert(response);
        //response && $('.partsite').html(response);
        //$('select').chosen();
      });
    });
  })
Все равно возвращает страницу админки целиком, как и в случае с
всегда в таких случаях первое действие должно быть набор в браузере адреса: site.ru/index.php?option=com_crmtourism&task=getListSites&partner=1
Смотрите что выводит! Так вы можете посмотреть правильно ли у вас сформирован адрес и ловит ли контроллер задачу!
*

Aleks.Denezh

  • Живу я здесь
  • 3406
  • 428 / 4
Re: Связать два списка в админке
« Ответ #26 : 19.02.2015, 00:32:22 »
уверены в правильности написания com_crmtourism?
попробуйте
public function getListSites()
  {
    die('method work!');
  }
*

AlekVolsk

  • Гуру
  • 6915
  • 415 / 4
Re: Связать два списка в админке
« Ответ #27 : 19.02.2015, 00:35:46 »
Я мож не в том контроллере чего пишу?
уверены в правильности написания com_crmtourism?
попробуйте
public function getListSites()
  {
    die('method work!');
  }
уверен
не помогло
*

Aleks.Denezh

  • Живу я здесь
  • 3406
  • 428 / 4
Re: Связать два списка в админке
« Ответ #28 : 19.02.2015, 00:36:46 »
Я мож не в том контроллере чего пишу?
100%! Нужно в дефолтном что у вас в com_crmtourism/controller.php
*

AlekVolsk

  • Гуру
  • 6915
  • 415 / 4
Re: Связать два списка в админке
« Ответ #29 : 19.02.2015, 00:39:37 »
не, ну надо же опять 3 часа тупить, а ведь только мес назад на том же самом споткнулся
работает!
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

На js узнать в админке в списке, какие строки (записи) отмечены

Автор AlekVolsk

Ответов: 25
Просмотров: 3623
Последний ответ 29.06.2015, 22:53:42
от AlekVolsk
Как вывести данные в админке сайта?

Автор Sergeyy

Ответов: 10
Просмотров: 1469
Последний ответ 21.11.2014, 16:06:01
от Sergeyy
Список множественного выбора (создание списка, передача, запись, вывод данных) Joomlaa 3.x

Автор ninth

Ответов: 20
Просмотров: 3399
Последний ответ 11.11.2014, 13:59:39
от lesh1j
Разработка компонента: в админке в списке не работает смена состояния записи

Автор AlekVolsk

Ответов: 4
Просмотров: 1136
Последний ответ 10.11.2014, 16:23:12
от b2z
Удаление элемента из списка

Автор ShutTap

Ответов: 3
Просмотров: 1060
Последний ответ 27.08.2014, 21:11:28
от beliyadm