У меня есть проблема, которая предстает передо мной с yiibooster и один <select>
с большой информацией, произведенной с select2 Yiibooster.
Проблема состоит в том, что я хочу загрузить список городов пределом приблизительно 1500 реестров, все, группируемые ведомством. Для этого я сделал этот код в моей модели:
public function getCiudades() {
$criteria = new CDbCriteria();
$criteria->order = "ID asc";
$ciudades = Ciudad::model()->cache(86500)->findAll($criteria);
return CHtml::listData($ciudades, "ID", "Nombre", 'departamento.Nombre');
}
Здесь система загружает информацию, в которой я нуждаюсь, и все функционирует очень хорошо, и эта информация переводится модели в поле зрения в одном select2
произведенный с такого YiiBooster:
echo $form->select2Group($model, 'Ciudad', array(
'widgetOptions' => array(
'asDropDownList' => true,
"data" => $model->getCiudades(),
'options' => array(
'placeholder' => 'Seleccione o busque la ciudad',
'width' => '100%'
)
)
));
Это функционирует хорошо, проблема состоит в том, что render опаздывает слишком много. Чтобы исправлять эту проблему, я использовал закоулок файлов yii и разместил фрагмент кода, который он производит, будь готова таково:
if ($this->beginCache("contacto.ciudades", array("duration" => 86400))) {
echo $form->select2Group($model, 'Ciudad', array(
'widgetOptions' => array(
'asDropDownList' => true,
"data" => $model->getCiudades(),
'options' => array(
'placeholder' => 'Seleccione o busque la ciudad',
'width' => '100%'
)
)
));
$this->endCache();
}
Конечно система грузит очень быстро, но сейчас у меня есть проблема, загрузив снова список уже сохраняемой стоимостью, как закоулок статический, стоимость реестра не меняется dinámicamente и вновь показывает последняя сохраняемая стоимость последний раз, что закоулок произвелся.
Также я не могу размещать меньшую стоимость во время закоулка, потому что я нуждаюсь в том, чтобы повторно использовать этот список в нескольких частях.
Есть какой-то способ размещать этот закоулок в элементы <option>
и <optgroup>
списка?
Уже время, что я задал этот вопрос, после сделав анализ моего кода раньше, я понял, что у проблемы этого не было Select2, моя базовая проблема была информацией, которую он приносил, чтобы наполнять этот Select, а именно.
На груз Select он был должен идти в таблицу Ciudades
, со стоимостью приблизительно 1500 реестров, все их он загружал с базовой модели Ciudad
, который приносила абсолютно вся информация модели, это точно - то, что делает медленным груз, потому что пока он наполняет всю информацию берется очень длинное время.
Исследуя немного я искал решение, основанное на прямом SQL, которая не зависела от модели (не так), тогда находил решение, которое я могу применять прямо в SQL используя базовую модель с CreateCommand
так:
$elementos = Yii::app()->db->createCommand()
->setFetchMode(PDO::FETCH_OBJ)
->select('e.ID as ID, e.Nombre as Nombre, e.Categoria as Categoria')
->from('Elemento e')
->where("e.Clasificacion='Elemento' and e.Servicio=1 and e.Estado=1")
->queryAll();
return CHtml::listData($elementos, "ID", "Nombre", 'Categoria');
Вне кода, который дает Select, важное, здесь это эта линия:-setFetchMode (PDO:: FETCH_OBJ), эта линия обратит твой select в объект, таким образом, ты можешь использовать это прямо с CHtml::listData
не будучи должен конвертировать информацию.
Я надеюсь, что этот ответ помогает им решать Ваши проблемы с Select2 и YII.