Связанные списки

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
Ответить
Аватара пользователя
krosh87
Сообщения: 160
Зарегистрирован: 2015.02.18, 15:32
Контактная информация:

Связанные списки

Сообщение krosh87 »

Ребята подкиньте плиз пример связанных списков в ActiveForm
Разработка, продвижение, сопровождение сайтов на Modx, Bitrix, Yii http://www.webapplex.ru
inververs
Сообщения: 87
Зарегистрирован: 2015.04.25, 11:31
Откуда: Минск, Беларусь

Re: Связанные списки

Сообщение inververs »

Через DepDrop виджет: http://demos.krajee.com/widget-details/depdrop

Код: Выделить всё

<div class="row">
    <div class="<?= $columnsClass ?>">
        <?php
        echo $form->field($model, $brandAttribute)->widget(Select2::classname(), [
            'size' => $size,
            'data' => $data,
            'options' => [
                'id' => $dependId,
            ],
            'pluginOptions' => [
                'multiple' => $multiple,
                'allowClear' => true,
                'placeholder' => 'Марка',
            ],
            'theme' => Select2::THEME_KRAJEE,
        ])->label($label);
        ?>
    </div>
    <div class="<?= $columnsClass ?>">
        <?php
        echo $form->field($model, $modelAttribute)->widget(DepDrop::classname(), [
            'data' => [],
            'type' => DepDrop::TYPE_SELECT2,
            'select2Options' => [
                'theme' => Select2::THEME_KRAJEE,
                'size' => $size,
                'pluginOptions' => [
                    'multiple' => $multiple,
                    'allowClear' => true,
                    'placeholder' => 'Модель',
                ],
            ],
            'pluginOptions' => [
                'placeholder' => false,
                'depends' => [$dependId],
                'url' => Url::to(['/brand-model/brand-models']),
            ],
        ])->label($label);
        ?>
    </div>
</div>
Аватара пользователя
krosh87
Сообщения: 160
Зарегистрирован: 2015.02.18, 15:32
Контактная информация:

Re: Связанные списки

Сообщение krosh87 »

что то не выходит, вообщем в базе есть 3 таблицы ads_category(id | name_ad), ads_sub_category (id | sub_name | id_ad (внешний ключ)), ads (id | header |...| id_category (внешний ключ)), связь один ко многим категории объявлений -> подкатегории объявлений -> объявления

во вьюхе пишу

Код: Выделить всё

use yii\helpers\Html;
use yii\widgets\ActiveForm;
use vova07\imperavi\Widget;
use yii\helpers\ArrayHelper;
use app\models\Cities;
use app\models\AdsSubCategory;
use app\models\AdsCategory;
use kartik\depdrop\DepDrop;
use yii\helpers\Url;
 

Код: Выделить всё

<?= Html::dropDownList('id_cat', null, ArrayHelper::map(AdsCategory::find()->all(), 'id', 'name_ad'), ['class' => 'form-control', 'id' => 'id_cat']) ?>
выполняю через html, т.к в таблице объявления напрямую не связана с категориями объявлений,

Код: Выделить всё

    <?= $form->field($model, 'id_sub_category')->widget(DepDrop::classname(), [
        'pluginOptions'=>[
            'depends'=>['id_cat'],
            'placeholder'=>'Выбрать...',
            'url'=>Url::to(['/ads/subcat'])
        ]
    ]);
    ?>
во контроллере Ads

Код: Выделить всё

public function getSubCatList($cat_id) {
    $adscat = AdsCategory::find()->where(['id' => $cat_id])->all();
    return $adscat;
}


public function actionSubcat() {
    $out = [];
    if (isset($_POST['depdrop_parents'])) {
        $parents = $_POST['depdrop_parents'];
        if ($parents != null) {
            $cat_id = $parents[0];
            $out = self::getSubCatList($cat_id); 
            // the getSubCatList function will query the database based on the
            // cat_id and return an array like below:
            // [
            //    ['id'=>'<sub-cat-id-1>', 'name'=>'<sub-cat-name1>'],
            //    ['id'=>'<sub-cat_id_2>', 'name'=>'<sub-cat-name2>']
            // ]
            echo Json::encode(['output'=>$out, 'selected'=>'']);
            return;
        }
    }
    echo Json::encode(['output'=>'', 'selected'=>'']);
} 
После выбора из списка категории объявления, в списке подкатегории объявлений не чего не происходит просто Loading... и все
Разработка, продвижение, сопровождение сайтов на Modx, Bitrix, Yii http://www.webapplex.ru
Аватара пользователя
Neuromance
Сообщения: 716
Зарегистрирован: 2011.09.06, 13:04

Re: Связанные списки

Сообщение Neuromance »

ну так у вас там скорее всего 500 ошибка. Смотрите, что за ошибка.
Аватара пользователя
krosh87
Сообщения: 160
Зарегистрирован: 2015.02.18, 15:32
Контактная информация:

Re: Связанные списки

Сообщение krosh87 »

Пишет Not Found (#404): Страница не найдена. странно зачем там страница если там json
Разработка, продвижение, сопровождение сайтов на Modx, Bitrix, Yii http://www.webapplex.ru
Аватара пользователя
PaSiS
Сообщения: 88
Зарегистрирован: 2011.11.15, 18:07
Контактная информация:

Re: Связанные списки

Сообщение PaSiS »

krosh87 писал(а):Пишет Not Found (#404): Страница не найдена. странно зачем там страница если там json
Посмотрите адрес, куда запрос уходит, скорее всего url неправильный
Аватара пользователя
krosh87
Сообщения: 160
Зарегистрирован: 2015.02.18, 15:32
Контактная информация:

Re: Связанные списки

Сообщение krosh87 »

Пасиб разобрался

Код: Выделить всё

use app\models\AdsSubCategory;
use yii\helpers\Json; 

Код: Выделить всё

public function getSubCatList($cat_id) {
    $adscat = AdsSubCategory::find()->select('id, name')->where(['id_ad' => $cat_id])->all();
    return $adscat;
}
 

Код: Выделить всё

    <?= $form->field($model, 'id_sub_category')->widget(DepDrop::classname(), [
        'pluginOptions'=>[
            'depends'=>['id_cat'],
            'placeholder'=>'Выбрать...',
            'url'=>Url::to(['/cabinet/ads/subcat'])
        ]
    ]);
    ?>
Вот это изменил и все заработало
Разработка, продвижение, сопровождение сайтов на Modx, Bitrix, Yii http://www.webapplex.ru
Arroyo
Сообщения: 105
Зарегистрирован: 2014.11.29, 11:24

Re: Связанные списки

Сообщение Arroyo »

Подскажите, как сделать первый выпадающий список без модели? Я не хочу выбранные в нем данные сохранять в бд. Сохраняться будет только значение последнего списка.
Аватара пользователя
Neuromance
Сообщения: 716
Зарегистрирован: 2011.09.06, 13:04

Re: Связанные списки

Сообщение Neuromance »

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

Код: Выделить всё

<?= Html::dropDownList('id_cat', null, $array) ?>
Arroyo
Сообщения: 105
Зарегистрирован: 2014.11.29, 11:24

Re: Связанные списки

Сообщение Arroyo »

Благодарю.
А div'ы все руками рисовать?
Ответить