[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Зависимые друг от друга селектыформы
kaww
Суть проблемы: Есть группа зависимых друг от друга селектов (страна, регион, город), т.е. optionlist селекта регион зависит от того,что выбрано в страна. (Речь идет о серверной стороне, Zend_Form_Element).

Т.о. элемент формы регион должен каким-то образом знать какое значение установлено в страна, но дело в том, что элемент не знает ничего о форме и как следствие о ее элементах.

Может конечно я копаю не в ту сторону, поэтому буду рад помощи в виде: гугли то-то и это ))
hydrogen
Это делается на JavaScript. Гугли DOM, DHTML. А вот тут обсуждается конкретно то, что тебе нужно, если я тебя правильно понял.

Цитата
Т.о. элемент формы регион должен каким-то образом знать какое значение установлено в страна

Наоборот, при выборе значения в первом поле со списком (страна) перерисовывается второе (регион) в соответствии с новым значением (очищаем список элементов OPTION, добавляем новые, соответствующие выбранной стране).

А поскольку весь массив данных (все страны и регионы) немаленький, то по хорошему еще бы сделать динамическую подгрузку данных в JSON виде (на AJAX, с кэшированием).

P.S. Правда к PHP это не имеет ровным счетом никакого отношения... Ну разве что бэк-энд аяксовский, генерирующий список регионов.

_____________
Invis1ble
делается элементарно:
1. ajax-запрос на сервер с передачей выбранной страны
2. получение ответа с регионами для выбранной страны (например в json)
3. создаем нужные option
...
5. PROFIT

_____________

Профессиональная разработка на заказ

Я на GitHub | второй профиль

kaww
hydrogen , Invis1ble , на клиенте именно так и сделано - ajax'ом подтягиваются нужные данные для зависимых селектов. Здесь речь же идет о серверной части формы. нужно каким-то образом определить что устанавливать в multioptions. т.е. $element->setMultiOptions($regiom_list); я себе представляю решение пробоемы так:
Создаем новый тип элемента формы App_Form_Element_DependentSelect, который наследует от App_Form_Element_DependentMulti проимерно такой реализации:

class App_Form_Element_DependentMulti extends Zend_Form_Element_Multi
{

private _masterElement;

public function setMasterElement($el)
{
$this->_masterElement = $el;
}

protected function _getMultiOptions()
{
if (!$this->_options){

$this->_options = $this->_getDependentOptions();
}
return $this->_options;
}

private function _getDependentOptions()
{
$this->_getMasterElement();
// some code
}

/**
*
@return Zend_Form_Element_Select
*/

private function _getMasterElement()
{
//Тут нужно каким-то образом получить элемент по имени $this->_masterElement
// х.з как это сделать

}
}
Invis1ble
kaww
с Zend'ом не работал, так что тут ничего подсказать не могу, кроме как читать мануалы smile.gif

_____________

Профессиональная разработка на заказ

Я на GitHub | второй профиль

kaww
Если абстрагироваться конкретно от zend'а, как подобные задачи решаются в известных вам фреймворках/cmsках?
Invis1ble
Цитата
как подобные задачи решаются

какие конкретно?
передать клиенту данные в json? echo json_encode($data)
или что ты еще хочешь, чтоб сервер сделал?

_____________

Профессиональная разработка на заказ

Я на GitHub | второй профиль

kaww
Цитата
какие конкретно?
передать клиенту данные в json? echo json_encode($data)
или что ты еще хочешь, чтоб сервер сделал?


имел ввиду есть ли, например, в Symfony Form Component или CForm в Yii возможность создания форм с "зависимыми" элементами из коробки, и как это работает.
P.S. Хотя это уже больше от безысходности, очевидно что подход др. фреймворка не получится использовать. но может натолкнуть на идею
Invis1ble
kaww
ты знаешь, я наверное нуб и рак smile.gif , но я не работал ни с Symphony, ни с Yii, ни, упаси господи, с какими-то ни было CMS. Единственный фрейм, на котором работаю - Kohana. Но там классов для создания форм нет (есть только статические хелперы Form). Да, и вообще - я не понимаю этих извращений - городить 100500 классов, чтоб вывести форму (в симфони и Yii я заглядывал).
Я реально одного не пойму, что конкретно у тебя не получается? Зачем ты вообще лезешь в php-код, если он отдает всего лишь данные фронтэнду, который уже сам должен решать, что с этими данными делать?

PS. Принцип работы, уверен, если это и реализовано в указанных тобой фреймах - один: отдать либо голые данные клиенту либо в виде сформированного html. Лично я предпочитаю передавать голые данные (html только в сложных случаях, когда код для сборки html клиентом выходит слишком сложным)

_____________

Профессиональная разработка на заказ

Я на GitHub | второй профиль

kaww
Invis1ble, я как раз не пресекался с kohana и не могу знать как в нем организованна работа с формами ). Но нахожу мега удобным возможность описания формы в конфиге с указанием фильтров, валидаторов, атрибутов. В итоге в контроллере мы имеем код

$form = new Zend_Form($config);
if ($this->getRequest()->isPost()) {

if ($form->isValid($this->getRequest()->getPost())){

$model->bind($form->getValues());
$model->save();
}
}

В шаблоне : <?=$this->form?>, все. эти пять строк кода выводят форму, показывают ошибки при заполнении пользователем (выполняют валидацию), и в приведенном коде биндит в модель и сохраняет в бд.

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

_____________

Профессиональная разработка на заказ

Я на GitHub | второй профиль

Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2025 Invision Power Services, Inc.