как создать форму выбора цепочки в cakephp

Мое приложение бизнес-каталога требует 3 связанных поля выбора, и я использую cakephp для создания этого приложения.

Иерархия и порядок выбора для разделов таковы:

1 - бизнес-группа

2 - бизнес-тип

3 - город (включен в таблицу клиент)

Взаимосвязи следующие:

  • клиентские бизнес-типы HABTM

  • бизнес-группы имеют много типов бизнеса

  • бизнес-группы имеют одну бизнес-группу, клиенты HAB TM

Я искал плагины jquery, которые помогают в этом, и нашел один от Реми Шарпа, но он не У меня нет более сложных взаимоотношений. http://remysharp.com/2007/09/18/auto-populate-multiple-select-boxes/

Я думаю, что происходит то, что происходит. первое поле выбора (бизнес-группы) заполняется заранее, и после того, как выбор сделан, прослушиватель событий отправляет сообщение, которое фильтрует второе поле выбора и то же самое для третьего.

Чего я не знаю, так это того, как структурировать действие поиска на основе прослушивателя событий.

Что-нибудь посоветуете, или я ошибаюсь?

Как всегда, я прихожу к колодцу за помощью.

Очень признателен. Пол


Большое спасибо, Ник, я прочитал много ваших сообщений, я очень признателен за ваш ответ.

Я выполнил ваши инструкции, но столкнулся с проблемами. Я изо всех сил старался их решить, но не понял.

Это то, что я сделал до сих пор:

1) создал «связанные» действия как в business_type, так и в business_directory (переименовал клиента в бизнес-каталог, что более уместно).

цепное действие бизнес-типа:

function chained($business_group_id) {
    $business_types = $this->BusinessType->find('list', array(
        'conditions' => array( 'BusinessType.business_group_id' => $business_group_id)
        ));

         $this->set('business_types', $business_types);
     }

Связанное действие бизнес-каталога:

function chained($business_type_id) {
    $business_directories = $this->BusinessDirectory->bindModel(array( 'hasOne' => array('business_directories_business_types' )));         
    $business_directories = $this->BusinessDirectory->find('all', array(
        'fields' => array( ' BusinessDirectory.city'),
        'conditions' => array( 'business_directories_business_types.business_type_id' => $business_type_id)
        ));
            $this->set('business_directories', $business_directories);
     }

Я обнаружил, что с отношением HABTM использование find 'list' не создает запрос соединения, тогда как find 'all' делает.

2) Затем я создал действие поиска в бизнес-каталоге и соответствующее представление.

Для бизнес-групп я создал действие getList для заполнения списка параметров в форме поиска:

function getList() {
     return $this->BusinessGroup->find('list');
}

В режиме поиска я добавил JavaScript для выбора цепочки:

<script type="text/javascript">
<!--
$(function () {
    var group = $('#businessGoup');
    var type = $('#businessType');
    var city = $('#businessDirectoryCity');

    type.selectChain({
        target: city,
        url:  '../business_directories/chained/'+$(this).val(),
  data: { ajax: true, anotherval: "anotherAction" }
    });

    group.selectChain({
        target: type,
        url: '../business_types/chained/'+$(this).val()   
    }).trigger('change');

});
//-->
</script>

И форму:

create ('business_directories', array ('action' => '/ search_results')); ?> input ('business_group_id', array ('type' => 'select', { {1}} 'id' => 'businessGoup', 'empty' => '- Выберите бизнес-группу -', 'multiple' => true, 'options' => $ this-> requestAction ('/ business_groups / getList'), 'label' => 'Business Group')); ?> {{ 1}} input ('business_type.id', array ('type' => 'select', 'id' => 'businessType') , 'empty' => '- Выберите вид деятельности -', 'multiple' => true, 'options' => 'none selected', {{ 1}} 'label' => 'Business Type')); ?> input ('business_directories.id', array ('type' => 'select', 'id' => 'businessDirectoryCity', 'empty' => '- Выбрать город -', { {1}} 'multiple' => true, 'options' => 'options', 'label' => 'City')); ?> {{ 1}} конец ("Поиск"); ?>

Когда я тестирую функцию цепочки бизнес-типов, / business_types / chained / 1, все работает.

Но когда я тестирую режим поиска, я получаю сообщение об ошибке предупреждения javascript. Затем, когда я проверяю firebug, я получаю следующие две ошибки:

Предупреждение (2): Отсутствует аргумент 1 для BusinessTypesController :: chained () [APP \ controllers \ business_types_controller.php, строка 71]

Уведомление (8) : Неопределенная переменная: business_group_id [APP \ controllers \ business_types_controller.php, строка 73]

Приветствуется любая дополнительная помощь в этом вопросе.

Спасибо, Пол

1
задан marc_s 10 August 2015 в 20:42
поделиться