• Как узнать на чем построены графики?

    Shutik
    @Shutik
    Погромист халявщик
    https://www.amcharts.com/ на этом сайте
    Ответ написан
    Комментировать
  • Как упростить функции контроллера?

    shakatakas
    @shakatakas
    So so developer
    Не совсем пойму почему ты пишешь sql запрос в ручную, если можно:
    Sheel::find()->where([
        'and',
        ['>=', 'date_execution', $rangeData['firstDay']],
        ['<', 'date_execution', $rangeData['lastDay']],
    ]);


    Actions..
    public function actionAddress()
        {
            $company =$_GET['id'];
        }
    /// 
      /**
         * view Company
         */
        public function actionCompany() 
        {
            $company =$_GET['company'];

    в
    public function actionAddress($company)

    Суть этого я вообще не понял, если тебе нужен один последний или какой либо адрес. Просто сделай запрос с лимитом и сортировкой что бы выбрать нужный адрес.
    foreach ($addreses as $key=>$one){
         $addres =$one->address;
                };


    Вот это еще.
    $res[] = [
                    'id_sheel'=>$item->id_sheel,
                    'parent_recipies'=>$item->parent_recipies,
                    'id_company'=>$item->company->id_company,
                    'name_company' => $item->company->name_company,
                    'address' => $item->address,
                    'recipies' =>
                        $item->recipies->porous_recipies . " " .
                        $item->recipies->size_min . " " .
                        $item->recipies->type_recipies . " " .
                        $item->recipies->brand_recipies . " " .
                        "№ " . $item->recipies->number_recipies,
                    'amount_sheel' => $item->amount_sheel,
                    'date_execution' => $item->date_execution,
                ];

    Это обязательное? Тебе нельзя переделать view под модель?

    И скрытые вспомогательные методы в контроллере пиши через private. Можешь так же часть данных вынести в helper. Используй все возможности фреймворка. Смотри еще внимательно у тебя повторяется код "orderBy", или же я чего то не до понял.
    ->onCondition('address = :name AND date_execution >= :time1 AND date_execution < :time2')
                ->orderBy('date_execution DESC')
                ->params([
                                ':name' => $addres,
                                ':time1' => ($firstDay = date("Y-m-d", mktime(0,0,0,$month,1,$year))),
                                ':time2' => date("Y-m-d", mktime(0,0,0,$month+1,1,$year)),
                ])
                ->orderBy('date_execution DESC')
    Ответ написан
    2 комментария
  • Как упростить функции контроллера?

    @dimabdc
    Можно (и нужно) выделять одинаковые куски кода в отдельные функции:
    /**
         * view Month
         */
        public function actionMonth()
        {
            $rangeData = $this->_getDateRange();
    
            return $this->render('month', [
                'result' => $this->_getSheel(),
                'firstDay' => $rangeData['firstDay'],
            ]);
    
        }
    
        /**
         * view Company
         */
        public function actionCompany()
        {
            $company =$_GET['company']; // с 1 месяца по 12
            $rangeData = $this->_getDateRange();
    
            //  VarDumper::dump($res);
            return $this->render('company', [
                // 'materials' => $materials,
                'company' => $company,
                'result' => $this->_getSheel('parent_company', $company),
                'firstDay' => $rangeData['firstDay'],
            ]);
    
        }
        
        /**
         *
         * view Address
         */
        public function actionAddress()
        {
            $company =$_GET['id'];
            $addreses =  Sheel::findAll(['id_sheel' => $company]);
            foreach ($addreses as $key=>$one){
                $addres = $one->address;
            };
            $rangeData = $this->_getDateRange();
    
            return $this->render('address', [
                'result' => $result,
                'firstDay' => $rangeData['firstDay'],
            ]);
    
        }
    
        /**
         * Get date range
         * 
         * @return array
         */
        protected function _getDateRange()
        {
            $month = date('n', $_GET['time']); // с 1 месяца по 12
            $year = date('Y', $_GET['time']); // 2011
    
            return [
                'firstDay' => date("Y-m-d", mktime(0, 0, 0, $month, 1, $year)),
                'lastDay' => date("Y-m-d", mktime(0, 0, 0, $month + 1, 1, $year))
            ];
        }
    
        /**
         * Get sheel
         * 
         * @param mixed $name
         * @param mixed $value
         * @return ArrayDataProvider
         */
        protected function _getSheel($name = null, $value = null)
        {
            $rangeData = $this->_getDateRange();
    
            $params = [
                ':time1' => $rangeData['firstDay'],
                ':time2' => $rangeData['lastDay'],
            ];
            $where = 'date_execution >= :time1 AND date_execution < :time2';
    
            if ($name) {
                $where .= " AND :$name = :name";
                $params[":$name"] = $value;
            }
    
            $customers = Sheel::find()
                ->andWhere($where, $params)
                ->orderBy('date_execution DESC')
                ->joinWith('recipies')
                ->with('company')
                ->all();
            $res = [];
            foreach ($customers as &$item) {
                $res[] = [
                    'id_sheel'=>$item->id_sheel,
                    'parent_recipies'=>$item->parent_recipies,
                    'id_company'=>$item->company->id_company,
                    'name_company' => $item->company->name_company,
                    'address' => $item->address,
                    'recipies' =>
                        $item->recipies->porous_recipies . " " .
                        $item->recipies->size_min . " " .
                        $item->recipies->type_recipies . " " .
                        $item->recipies->brand_recipies . " " .
                        "№ " . $item->recipies->number_recipies,
                    'amount_sheel' => $item->amount_sheel,
                    'date_execution' => $item->date_execution,
                ];
            }
            return new ArrayDataProvider(['allModels' => $res]);
        }
    Ответ написан
    Комментировать
  • Как подружить urlManager в конфиге c urlManager модуля в Yii2?

    Есть решение для Yii 1:
    Сам код нашел в сети, частично допилил его, на предмет кеширования, и на предмет вложенных модулей.
    Возможно можно допилить для Yii2
    1. В конфиг
    /* Правила роутинга для модулей */
                'onBeginRequest' => array('ModuleUrlManager', 'collectRules'),

    2. Файл ModuleUrlManager
    /**
     * Класс менеджер путей модулей 
     * Активирует urlRules параметр активного модуля
     * Работает с многоуровневой вложеностью модулей
     * Реализовано кеширование urlRules модулей
     */
    class ModuleUrlManager {
    
        static function collectRules() {
            if (!empty(Yii::app()->modules)) {
                $cache = Yii::app()->getCache();
                $route = Yii::app()->getRequest()->getPathInfo();
                $patharray = explode('/', $route);
                $moduleName = substr($route, 0, strpos($route, '/'));
                /* Если роут имеет вид module.html */
                if (empty($moduleName)) {
                    $moduleName = substr($route, 0, strpos($route, '.'));
                }
    
                if (Yii::app()->hasModule($moduleName)) {
                    $urlRules = false;
                    if ($cache)
                        $urlRules = $cache->get('module.url.rules.' . $moduleName);
    
                    if ($urlRules === false) {
                        $module = Yii::app()->getModule($moduleName);
                        if (isset($module->urlRules)) {
                            $urlRules = $module->urlRules;
                            if ($cache && !empty($urlRules))
                                $cache->set('module.url.rules.' . $module->id, $urlRules);
                        }
                    }
                    if (!empty($urlRules))
                        Yii::app()->getUrlManager()->addRules($urlRules);
                    if (!empty($patharray)) {
                        foreach ($patharray as $pathUnit) {
                            $position = strpos($pathUnit, '.html');
                            if ($position) {
                                $pathUnit = substr($pathUnit, 0, $position);
                            }
                            $urlRules = false;
                            if ($cache)
                                $urlRules = $cache->get('module.url.rules.' . $moduleName . '/' . $pathUnit);
    
                            if ($urlRules === false) {
                                $module = Yii::app()->getModule($moduleName);
                                if ($module->hasModule($pathUnit)) {
                                    $submodule = $module->getModule($pathUnit);
                                    if (isset($submodule->urlRules)) {
                                        $urlRules = $submodule->urlRules;
                                        if ($cache && !empty($urlRules))
                                            $cache->set('module.url.rules.' . $submodule->id, $urlRules);
                                    }
                                }
                            }
                            if (!empty($urlRules))
                                Yii::app()->getUrlManager()->addRules($urlRules);
                        }
                    }
                }
                return true;
            }
        }
    
    }
    Ответ написан
    Комментировать