Как я могу использовать один select2 загруженный YiiBooster с закоулком и обновлять Вашу стоимость?

У меня есть проблема, которая предстает передо мной с 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> списка?

7
задан 09.07.2019, 06:52
1 ответ

Уже время, что я задал этот вопрос, после сделав анализ моего кода раньше, я понял, что у проблемы этого не было 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.

3
ответ дан 03.12.2019, 23:20