@rusline

Как запустить виджет depdrop?

Не получается запустить виджет depdrop на yii2 Делал по документации demos.krajee.com/widget-details/depdrop
Вот код который у меня есть frontend/views/site/signup.php
use kartik\depdrop\DepDrop;
use yii\helpers\ArrayHelper;
use frontend\models\Country;
use fronted\models\Region;

 <?php 
                $countryList = Country::find()->wherw('id = country_id')-all();
                $countryList = ArrayHelper::map($countryList, 'id', 'name');
                ?>
                <?= $form->field($model, 'country')->dropDownList($countryList, ["id"=>"country_id"]); ?>

                <?= $form->field($model, 'region')->widget(DepDrop::classname(), [
                'options' => ['id'=>'region_id'],
                'pluginOptions'=>[
                    'depends'=>['country_id'],
                    'placeholder' => 'Выберите страну',
                    'url' => Url::to(['/site/region'])
                    ]
                ]); ?>


И я добавил в frontend/views/controllers/SiteController.php данный код

class SiteController extends Controller
{
    public function actionRegion() {
    $out = [];
    if (isset($_POST['depdrop_parents'])) {
        $parents = $_POST['depdrop_parents'];
        if ($parents != null) {
            $country_id = $parents[0];
            $out = self::getRegionList($country_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'=>'']);
    }
}

и таблицы из базы frontend/views/models/Country.php
namespace frontend\models;

use yii\db\ActiveRecord;

class Country extends ActiveRecord
{
	
}

И аналогично такой же файл создан для region, только в классе там указан Region
Как я понимаю файл который я указал /site/region должен быть grid таблица или нет. Просто я не понял как этот виджет добавить к себе. Выходит вот такая ошибка: Calling unknown method: yii\db\ActiveQuery::wherw()
  • Вопрос задан
  • 1043 просмотра
Пригласить эксперта
Ответы на вопрос 2
slo_nik
@slo_nik Куратор тега Yii
Доброе утро.
Вы текст ошибки, для начала, переведите и исправьте её, потом будете двигаться дальше.

P.S.
Как я понимаю файл который я указал /site/region должен быть grid таблица или нет

Вы смотрели примеры в документации виджета? Вы увидели там grid?
Указав адрес /site/region Вы во-первых, обращаетесь к контроллеру SiteController, во-вторых, к действию этого контроллера actionRegion.
Вам надо получить данные всех регионов из базы.
Для этого достаточно обратиться к базе и получить регионы. Из этого объекта widget создаст выпадающий список в форме.
Объяснил как мог.

P.S.S Если Вы не знаете буржуйский язык, то добрый google позаботился об этом, есть автоматические переводчики, первый по адресу translate.google.com, второй Вы можете найти в магазине браузера google-chrome.
Пользуйтесь или первым или установите расширение в браузер.
Это первое.
Второе.
Открываете документацию виджета и переводя текст при помощи переводчика пытаетесь разобраться.
Рассмотрим параметр "url"
В документации сказано:
url: string The url string for the controller action that will return the Json encoded dependent dropdown data via ajax.

Ага, переводим переводчиком
URL: Строка URL Строка для действия контроллера, который будет возвращать Json закодированные зависимые данные выпадающие с помощью AJAX.

Вот, какой-то неведомый зверь ajax нам встретился. И вдобавок json... Непонятно... Ладно, посмотрим примеры...
И в примере находим строку
echo Json::encode(['output'=>$data['out'], 'selected'=>$data['selected']]);
           return;

Вот, как раз actionProd.
Нет никакого подключения файла, только использование какого-то неведомого метода getProdList() с параметрами.
В комментарии читаем:
/**
* the getProdList function will query the database based on the
* cat_id and sub_cat_id and return an array like below:
* [
* 'out'=>[
* ['id'=>'', 'name'=>''],
* ['id'=>'', 'name'=>'']
* ],
* 'selected'=>''
* ]
*/

Переводим:
функция getProdList будет запрашивать базу данных, основанную на
* cat_id и sub_cat_id и возвращает массив, как показано ниже:

Ага, вот где собака порылась!!!
Значит надо в методе написать запрос к моей базе данных, к таблице "как_там_она_называется" и получить регионы.
И при помощи
return Json::encode()
отдать виджету.
Всё.
Как написать запрос - подумайте сами. Вот Вам ссылка на документацию для разбирательства.
Ответ написан
webinar
@webinar Куратор тега Yii
Учим yii: https://youtu.be/-WRMlGHLgRg
ошибка четко указывает на
$countryList = Country::find()->wherw('id = country_id')-all();

Это описка не wherw а where
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы