• Как запретить выбор прошедших дат в DatePicker?

    Ballly
    @Ballly Автор вопроса
    Максим, а не подскажите как сделать, чтобы блокировался каждый прошедший день, вот например сегодня 13 сентября закончится, и чтобы по времени после 00:00 когда уже будет 14 сентября, он становился недоступен к выбору?
  • Почему не отображается гугл карта?

    Ballly
    @Ballly Автор вопроса
    Дмитрий, проблема то еще и в том, что в консоли ошибок нет, если верить консоли - то все вообще хорошо. Сейчас я подключаю скрипт вывода карты через отдельный файл, и на сайте он подключается уже после всех js, но увы это мне все равно не помогло.
  • Почему не отображается гугл карта?

    Ballly
    @Ballly Автор вопроса
    Максим, ответ 123 приходит при открытии, либо перезагрузке страницы. Буду думать и смотреть в чем же дело с картой. Насчет key, то я намерено поставил там звездочки.
  • Почему не отображается гугл карта?

    Ballly
    @Ballly Автор вопроса
    Максим, с оберткой вариант не проходит. Я вынес функцию initMap в отдельный файл и подключаю теперь через AppAsset, но увы карта как не отображалась, так и не отображается, ошибок в консоли по прежнему нет.
    public $js = [
        'js/gmaps.js',
        '//maps.googleapis.com/maps/api/js?key=***&libraries=places&callback=initMap',
    ];
  • Почему не отображается гугл карта?

    Ballly
    @Ballly Автор вопроса
    Максим, подключал я просто через тег script, подключил в файле вида как Вы описали, но теперь функция initMap() вообще не отрабатывает, если до этого не выводилась только карта, то сейчас вводя адрес поле input не происходит автозаполнения
    <div class="col-md-4 col-sm-6 m-b30">
        <div id="map"></div>
    </div>

    <?php 
    $js = <<< JS
        var autocompletes, marker, infowindow, map;
        function initMap() {
             map = new google.maps.Map(document.getElementById('map'), {
              center: {lat: -33.8688, lng: 151.2195},
              zoom: 13
            });
            infowindow = new google.maps.InfoWindow();
    
            marker = new google.maps.Marker({
              map: map
            });
    
            // адрес откуда
            var inputs = document.querySelector('#place_departure');
            autocompletes = new google.maps.places.Autocomplete(inputs);
            
            google.maps.event.addListener(autocompletes, 'place_changed', function () {
                marker.setVisible(false);
                infowindow.close();
    
                var place = autocompletes.getPlace();
                if (!place.geometry) {
                    window.alert("No details available for input: '" + place.name + "'");
                    return;
                }
                
                  if (place.geometry.viewport) {
                    map.fitBounds(place.geometry.viewport);
                  } else {
                    map.setCenter(place.geometry.location);
                    map.setZoom(17);
                  }
                  
                  marker.setIcon(({
                    url: place.icon,
                    scaledSize: new google.maps.Size(35, 35)
                  }));
                  marker.setPosition(place.geometry.location);
                  marker.setVisible(true);
                  
                  var place_departure = '';
                  if (place.address_components) {
                    place_departure = [
                      (place.address_components[0] && place.address_components[0].short_name || ''),
                      (place.address_components[1] && place.address_components[1].short_name || ''),
                      (place.address_components[2] && place.address_components[2].short_name || '')
                    ].join(' ');
                  }
    
                  infowindow.setContent('<div><strong>' + place.name + '</strong><br>' + place_departure);
                  infowindow.open(map, marker);
            });
        }
    JS;
    
    $this->registerJs($js, $position = yii\web\View::POS_READY, $key = null );
    ?>
  • Как исправить ошибку "The file or directory to be published does not exist"?

    Ballly
    @Ballly Автор вопроса
    Максим Федоров, согласен, тупанул я конечно мощно, ночь на дворе - спать пора ) Спасибо!
  • Как исправить ошибку "Call to a member function isAttributeRequired() on null" при открытии формы связных таблиц?

    Ballly
    @Ballly Автор вопроса
    Максим, смотрите, у меня есть в БД две таблицы (на скриншоте), форма добавления / редактирования содержит инпуты двух этих таблиц. Соответственно, если посмотреть на скриншоте, то форму для объекта с идентификатором 811 я открываю спокойно, могу вносить изменения и сохраняю без проблем, а вот если выберу любой другой объект, к примеру с id 812 содержащийся в Accept, но не имеющих данных в Address, то получаю ошибку описанную выше.
    5d447fa9ac4ce277016747.jpeg
  • Как исправить ошибку "Call to a member function isAttributeRequired() on null" при открытии формы связных таблиц?

    Ballly
    @Ballly Автор вопроса
    Максим, в примере который Вы предложили, в принципе отображено тоже самое что и у меня, только Дмитрий в своем проекте обращение к получению списка категорий делал из модели, у меня же обращение к модели городов сделано просто в файле формы
    $listing = app\models\City::find()->indexBy('city_name')->orderBy('city_name')->asArray()->all();
    $city = ArrayHelper::map($listing,'id','city_name');

    Потом я использую $city в виджете Select2 от Kartik, Дмитрий же делает через dropDownList выводит полученный список городов, в принципе одно и тоже. Проблема в том, как мне указать что city_id может отсутствовать, но все равно вывести форму для редактирования.
  • Как исправить ошибку "Call to a member function isAttributeRequired() on null" при открытии формы связных таблиц?

    Ballly
    @Ballly Автор вопроса
    Максим, подскажите, а где сделать такую проверку - в контроллере, или в запросе получения массива городов?
  • Как исправить ошибку "Call to a member function isAttributeRequired() on null" при открытии формы связных таблиц?

    Ballly
    @Ballly Автор вопроса
    Дмитрий Дерепко, при переходе к форме у меня получается, что city (city_id) null, так как данных о текущей записи в таблице Address отсутствуют, параметр city_id является обязательным, но в записи которую я хочу отредактировать его нет. Или может я не правильно понимаю, что надо сделать.
  • Как исправить ошибку "Call to a member function isAttributeRequired() on null" при открытии формы связных таблиц?

    Ballly
    @Ballly Автор вопроса
    Дмитрий Дерепко, вот что пишет в дебагере
    Error: Call to a member function isAttributeRequired() on null in J:\OSPanel\domains\forms6.loc\vendor\yiisoft\yii2\widgets\ActiveField.php:915
    Stack trace:
    #0 J:\OSPanel\domains\forms6.loc\vendor\yiisoft\yii2\widgets\ActiveField.php(776): yii\widgets\ActiveField->addAriaAttributes('<span class="st...')
    #1 J:\OSPanel\domains\forms6.loc\views\accept\form_user.php(36): yii\widgets\ActiveField->widget('kartik\\select2\\...', Array)
    #2 J:\OSPanel\domains\forms6.loc\vendor\yiisoft\yii2\base\View.php(336): require('J:\\OSPanel\\doma...')
    #3 J:\OSPanel\domains\forms6.loc\vendor\yiisoft\yii2\base\View.php(254): yii\base\View->renderPhpFile('J:\\OSPanel\\doma...', Array)
    #4 J:\OSPanel\domains\forms6.loc\vendor\yiisoft\yii2\base\View.php(156): yii\base\View->renderFile('J:\\OSPanel\\doma...', Array, NULL)
    #5 J:\OSPanel\domains\forms6.loc\views\accept\_form.php(29): yii\base\View->render('form_user', Array)
    #6 J:\OSPanel\domains\forms6.loc\vendor\yiisoft\yii2\base\View.php(336): require('J:\\OSPanel\\doma...')
    #7 J:\OSPanel\domains\forms6.loc\vendor\yiisoft\yii2\base\View.php(254): yii\base\View->renderPhpFile('J:\\OSPanel\\doma...', Array)
    #8 J:\OSPanel\domains\forms6.loc\vendor\yiisoft\yii2\base\View.php(156): yii\base\View->renderFile('J:\\OSPanel\\doma...', Array, NULL)
    #9 J:\OSPanel\domains\forms6.loc\views\accept\update.php(17): yii\base\View->render('_form', Array)
    #10 J:\OSPanel\domains\forms6.loc\vendor\yiisoft\yii2\base\View.php(336): require('J:\\OSPanel\\doma...')
    #11 J:\OSPanel\domains\forms6.loc\vendor\yiisoft\yii2\base\View.php(254): yii\base\View->renderPhpFile('J:\\OSPanel\\doma...', Array)
    #12 J:\OSPanel\domains\forms6.loc\vendor\yiisoft\yii2\base\View.php(156): yii\base\View->renderFile('J:\\OSPanel\\doma...', Array, Object(app\controllers\AcceptController))
    #13 J:\OSPanel\domains\forms6.loc\vendor\yiisoft\yii2\base\Controller.php(384): yii\base\View->render('update', Array, Object(app\controllers\AcceptController))
    #14 J:\OSPanel\domains\forms6.loc\controllers\AcceptController.php(129): yii\base\Controller->render('update', Array)
    #15 [internal function]: app\controllers\AcceptController->actionUpdate('818')
    #16 J:\OSPanel\domains\forms6.loc\vendor\yiisoft\yii2\base\InlineAction.php(57): call_user_func_array(Array, Array)
    #17 J:\OSPanel\domains\forms6.loc\vendor\yiisoft\yii2\base\Controller.php(157): yii\base\InlineAction->runWithParams(Array)
    #18 J:\OSPanel\domains\forms6.loc\vendor\yiisoft\yii2\base\Module.php(528): yii\base\Controller->runAction('update', Array)
    #19 J:\OSPanel\domains\forms6.loc\vendor\yiisoft\yii2\web\Application.php(103): yii\base\Module->runAction('accept/update', Array)
    #20 J:\OSPanel\domains\forms6.loc\vendor\yiisoft\yii2\base\Application.php(386): yii\web\Application->handleRequest(Object(yii\web\Request))
    #21 J:\OSPanel\domains\forms6.loc\web\index.php(13): yii\base\Application->run()
    #22 {main}

    Связь между таблицами
    модель Address
    public function getAccepts(){
        return $this->hasMany(Accept::className(), ['id' => 'accept_id']);
    }
    
    модель Accept
    public function getAddress(){
        return $this->hasOne(Address::className(), ['accept_id' => 'id']);
    }

    Сама форма добавления / редактирования города, всю форму вставлять не стал, так как она состоит преимущественно из одних инпутов
    $listing = app\models\City::find()->indexBy('city_name')->orderBy('city_name')->asArray()->all();
    $city = ArrayHelper::map($listing,'id','city_name');
    <?=
        $form->field($address, 'city_id', ['template' => "{label}\n{input}"])->widget(Select2::classname(), [
            'data' => $city,
            'options' => ['placeholder' => 'Выбор станции'],
            'pluginOptions' => [
                'allowClear' => true
            ],
        ]);
    ?>

    При переходе к экшену Update выдает следующую ошибку (строка 'data' => $city,):
    <?=
        $form->field($address, 'city_id', ['template' => "{label}\n{input}"])->widget(Select2::classname(), [
            'data' => $city,
            'options' => ['placeholder' => 'Выбор станции'],
            'pluginOptions' => [
                'allowClear' => true
            ],
        ]);
    ?>
  • Как провести сохранение связанных моделей?

    Ballly
    @Ballly Автор вопроса
    Максим, Спасибо! Я почитал документацию по сохранению связанных данных. Думаю что в моем случае можно обойтись без установки дополнительного расширения. У меня при сохранении каждый раз такая ошибка, в принципе ошибка достаточно понятная
    SQLSTATE[23000]: Integrity constraint violation: 1048 Column 'accept_id' cannot be null
    The SQL being executed was: INSERT INTO `address` (`accept_id`, `city_id`, `street`, `house`, `name_building`, `floor`, `cabinet`) VALUES (NULL, 1, 'Дзержинского', '5', NULL, '1', 'б/н')

    Вид в контроллере
    public function actionCreate()
    {
        $model = new Accept();
        $address = new Address();
        $address->accept_id = $accept->id;
    
        if ($model->load(Yii::$app->request->post()) && $address->load(Yii::$app->request->post()) && $model->save()) {
            if ($address->save()) {
                $address->accept_id = $accept->id;
                return $this->redirect(['view', 'id' => $model->id]);
            }
        }
        return $this->render('create', compact('model', 'address'));
    }

    Я не могу понять в чем конкретно ошибка, почему в таблицу Address не записывается значение $model->id
  • Почему возникает ошибка - Unable to link models: the primary key of app\models is null?

    Ballly
    @Ballly Автор вопроса
    Konstantin Zhikhor, столбец accept_id у меня находится в таблице Address. Вообще я обе таблицы - Address и Accept делал не через миграции.
  • Как запретить вывод placeholder в yii2-images?

    Ballly
    @Ballly Автор вопроса
    elliot, я тоже находил этот ответ, но видать с обновлениями виджета модель ImageBehave была переписана, возможно неоднократно, и к сожалению описанная там информация на сегодняшний день стала неактуальна.
  • Как вывести имя пользователя вместо id?

    Ballly
    @Ballly Автор вопроса
    slo_nik, в таблице documents нет полей связанных с пользователем.
    Связи в модели DocSign
    public function getDocument(){
        return $this->hasOne(Document::className(), ['id' => 'doc_id']);
    }
    public function getUser(){
        return $this->hasOne(User::className(), ['id' => 'user_id']);
    }

    Связи в модели Documents
    public function getTypes(){
        return $this->hasOne(Documenttype::className(), ['id' => 'type_id']); 
    }
    
    public function getDocsign(){
        return $this->hasMany(Docsign::className(), ['doc_id' => 'id']);
    }


    Связи в модели User
    public function getDocUser(){
        return $this->hasMany(Docsign::className(), ['user_id' => 'id']);
    }

    Если нет, то тяните через связь с той моделью, где оно есть.

    Над этим я уже лютый час ломаю голову, ничего дельного так и не пришло
  • Как указать путь к css файлу в js?

    Ballly
    @Ballly Автор вопроса
    Максим Тимофеев, файл со стилями находится по пути web/css/skins/fullwidth/skin.css, дополнительным параметром fullwidth передается чуть выше в параметре skin, в параметре skin можно указать и другие значения, которые также будут вести к файлу skin.css. Повторюсь, но с тем кодом что я привел выше, в верстке данная карусель работала, а когда перенес на yii2, то работать уже перестала.
  • Как установить DefinaVoice в YII2?

    Ballly
    @Ballly Автор вопроса
    Алексей Долгов, я понимаю что надо самостоятельно ручками, но подобного рода опыта установки виджетов я не имею, т.к. всегда устанавливал виджеты через composer. Поэтому от туда и вопрос - как установить? Скачать архив и распаковать его в директории vendor?
  • Ошибка "Call to a member function saveAs() on a non-object" в чем ошибка?

    Ballly
    @Ballly Автор вопроса
    slo_nik, в данном случае я сохраняю форму и ничего не прикрепляю к ней - ни документ, ни картинку, но ошибка указывает именно на функцию загрузки документа. По поводу загрузок - картинок может быть много, поэтому используется getInstances, а при загрузке документа - не более одного, поэтому getInstance
  • Ошибка "Call to a member function saveAs() on a non-object" в чем ошибка?

    Ballly
    @Ballly Автор вопроса
    slo_nik, не спорю, возможно можно написать по другому, я пытался и сталкивался с другими ошибками, в данном случае сделал так, потому что в этом случае форма работала и сохраняла данные. В форме у меня два разных поля - одно поле для сохранения картинки/фотографии, а другая для сохранения документа, в предыдущих версиях которые я писал в контролере - у меня получалось, что я сохранял либо только картинку, либо документ, а в такой версии получается сохранить и фото и документ одновременно.