Мое приложение бизнес-каталога требует 3 связанных поля выбора, и я использую cakephp для создания этого приложения.
Иерархия и порядок выбора разделов таковы:
1 - бизнес-группа
2 - бизнес-тип
3 - город (входит в таблицу заказчика)
Отношения:
типы бизнеса клиента HABTM
бизнес-группы имеют много типов бизнеса
типы бизнеса имеют одну бизнес-группу, клиенты HABTM
Я искал плагины jquery, которые помогают в этом, и нашел один от Remy Sharp, но у него нет более сложных отношений, которые есть у меня. 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 использование поиска «список» не создает запрос на соединение, тогда как поиск «все» создает.
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>
И форма:
Когда я тестирую функцию цепочки бизнес-типов /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]
Любая дополнительная помощь в этом очень ценится.
Спасибо, Пол.