Помогите разобраться с импортом товаров

Общие вопросы по использованию фреймворка. Если не знаете как что-то сделать и это про Yii, вам сюда.
Закрыто
wizard31337
Сообщения: 2
Зарегистрирован: 2016.12.24, 13:30

Помогите разобраться с импортом товаров

Сообщение wizard31337 »

Здравствуйте, я новичок и работал с пхп только в процедурном стиле и тут встала передо мной задача организовать импорт прайса из екселя в интернет магазин на yii2, MVC я знал совсем немного и мне пришлось очень много рыться в коде и гуглить, чтобы понять как вообще тут все устроено.
Загрузку и парсинг екселя я написал, на это ума хватило, проблемы начались с записью, вначале я попробовал так сказать метод лома и просто заносил данные в соответствующие поля таблицы, данные появлялись, а товары на сайте нет, я стал искать все возможные зависимости, выставлял их прямо в phpmyadmin и не добился ничего, товара так и нет. Тогда я стиснул извилины и пошел анализировать как жешь все таки добавляет товар сама админка, зашел в меню создания товарной позиции, определил контроллер, метод, параметры, прошел по цепочки наследований метода Create и на последнем этапе спасовал, я просто не понимаю где в этом коде вызывает что-либо, что заносит данные в базу, разными другими методами искал код заносящий в базу и тоже ничего не нашел, прошу подсказать мне по этому приложенному коду как он работает, разъясните пожалуйста.

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

 public function actionCreate($modelName = null, $parentID = null, $scenario = null)
    {
        if ($modelName == null)
            $modelName = $this->_baseModelName;
        $this->actionUpdate(null, $modelName, $parentID, $scenario);
    }

    /**
     * @param null|int $id
     * @param null|string $modelName
     * @param null|int $parentID
     * @param null|string $scenario
     * @throws CHttpException
     */
    public function actionUpdate($id = null, $modelName = null, $parentID = null, $scenario = null)
    {
        /**
         * @var $parentModel ItexActiveRecord|ItexTreeActiveRecord
         */
        $parentModel = null;
        if ($id != null)
            $this->loadModel($id, $modelName, false, $scenario);
        else {
            if ($parentID != null && $parentID != 0) {
                $this->loadModel($parentID, $modelName, false, $scenario);
                $parentModel = $this->_cwm;
            }
            $this->loadModel(null, $modelName, true, $scenario);
            if ($parentID != null && $this->_cwm instanceof ItexTreeActiveRecord)
                $this->_cwm->setAttribute('parent_id', $parentID);
        }
        $isNewRecord = $this->_cwm->isNewRecord;
        if ($isNewRecord && (($parentModel != null && !$parentModel->canDoAction('create')) /*|| ($parentModel == null && !$this->_cwm->canDoAction('create'))*/))
             throw new CHttpException(403, $this->t('itexcms', 'RECORD_CREATE_ACCESS_DENIED'));
        elseif (!$isNewRecord && !$this->_cwm->canDoAction('update'))
             throw new CHttpException(403, $this->t('itexcms', 'RECORD_UPDATE_ACCESS_DENIED'));
        $modelName = get_class($this->_cwm);
        $redirectParams = array();
        $redirectParams['modelName'] = $modelName;
        if ($this->_cwm instanceof ItexTreeActiveRecord && $this->_cwm->parent_id != 0)
            $redirectParams['parentID'] = $this->_cwm->parent_id;
        if (Yii::app()->request->isPostRequest && isset($_POST['_reset'])) {
            Yii::app()->user->setFlash('info', $isNewRecord ? $this->t('itexcms', 'CREATE_RECORD_CANCEL') : $this->t('itexcms', 'UPDATE_RECORD_CANCEL'));
            $this->_cwm->cancel();
            if (($page = $this->webUser->getState('itexCmsGridPageForm', 0)) != 0) {
                $redirectParams['redirectPage'] = $page;
                $this->webUser->setState('itexCmsGridPageForm', null);
            }
            $this->redirect($this->createUrl('index', $redirectParams));
        }
        $this->_cwm->withRelated($isNewRecord ? 'create' : 'update');
        if (!empty($_POST[$modelName])) {
            $this->_cwm->rawData = $_POST;
            $this->_cwm->attributes = $_POST[$modelName];
            $this->_cwm->setRelatedAttributes($_POST);
            $valid = $this->_cwm->validate();
            if ($valid) {
                $this->_cwm->save(false, null, $parentModel);
                if (Yii::app()->getRequest()->isAjaxRequest) {
                    echo CJavaScript::jsonEncode(array('success' => true, 'attributes' => $this->_cwm->attributes));
                    Yii::app()->end();
                }
                Yii::app()->user->setFlash('success', $isNewRecord ? $this->t('itexcms', 'CREATE_RECORD_SUCCESS') : $this->t('itexcms', 'UPDATE_RECORD_SUCCESS'));
                if (isset($_POST['_continue'])) {
                    Yii::app()->user->setState('lastFormButton', '_continue');
                    $this->redirect($this->createUrl('update', array('id' => $this->_cwm->primaryKey, 'modelName' => $modelName)));
                }
                if (isset($_POST['_new'])) {
                    Yii::app()->user->setState('lastFormButton', '_new');
                    $this->redirect($this->createUrl('create', array_merge(array('modelName' => $modelName), $redirectParams)));
                }
                if (isset($_POST['_save'])) {
                    Yii::app()->user->setState('lastFormButton', '_save');
                    if (($page = $this->webUser->getState('itexCmsGridPageForm', 0)) != 0) {
                        $redirectParams['redirectPage'] = $page;
                        $this->webUser->setState('itexCmsGridPageForm', null);
                    }
                    $this->redirect($this->createUrl('index', $redirectParams));
                }
            }
        }
        if ($isNewRecord)
            $this->pageTitle = $this->t('itexcms', 'CREATE_NEW_RECORD');
        else
            $this->pageTitle = $this->t('itexcms', 'UPDATE_RECORD', array('{recordName}' => $this->_cwm->getRecordName()));
        if (Yii::app()->getRequest()->isAjaxRequest)
            $this->layout = 'simple';
        $this->render($this->viewFileMap($this->action->id), array('model' => $this->_cwm));
    }
wizard31337
Сообщения: 2
Зарегистрирован: 2016.12.24, 13:30

Re: Помогите разобраться с импортом товаров

Сообщение wizard31337 »

Я так понимаю это тут

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

 $this->_cwm->rawData = $_POST;
            $this->_cwm->attributes = $_POST[$modelName];
            $this->_cwm->setRelatedAttributes($_POST);
            $valid = $this->_cwm->validate();
            if ($valid) {
                $this->_cwm->save(false, null, $parentModel);
                 
Скажите пожалуйста по логике для импорта нужно создавать отдельный модуль или дописать контроллер, который будет использовать готовую модель? Просто тут куча всяких действий направленных на получения данных через браузер именно и они лишние при импорте из файла.
Закрыто