/** * Actual run function for all widget classes extending BaseWidget * * @return mixed */ public function widgetRun() { $pages = Page::getDb()->cache(function ($db) { return Page::find()->where(['parent_id' => $this->parent_id])->orderBy([$this->order_by => $this->order])->limit($this->limit)->all(); }, 86400, new TagDependency(['tags' => [ActiveRecordHelper::getObjectTag(Page::className(), $this->parent_id)]])); return $this->render($this->view_file, ['pages' => $pages, 'parent_id' => $this->parent_id, 'more_pages_label' => $this->more_pages_label, 'display_date' => $this->display_date, 'date_format' => $this->date_format]); }
public function run() { $query = Category::find(); $query->andWhere([Category::tableName() . '.active' => 1]); if ($this->root_category_id !== null) { $query->andWhere([Category::tableName() . '.parent_id' => $this->root_category_id]); } if ($this->category_group_id !== null) { $query->andWhere([Category::tableName() . '.category_group_id' => $this->category_group_id]); } $query->groupBy(Category::tableName() . ".id"); $query->orderBy($this->sort); if ($this->limit !== null) { $query->limit($this->limit); } $object = Object::getForClass(Category::className()); \app\properties\PropertiesHelper::appendPropertiesFilters($object, $query, $this->values_by_property_id, []); $sql = $query->createCommand()->getRawSql(); $cacheKey = "FilteredCategoriesWidget:" . md5($sql); $result = Yii::$app->cache->get($cacheKey); if ($result === false) { $categories = Category::findBySql($sql)->all(); $result = $this->render($this->viewFile, ['categories' => $categories]); Yii::$app->cache->set($cacheKey, $result, 86400, new \yii\caching\TagDependency(['tags' => ActiveRecordHelper::getCommonTag(Category::tableName())])); } return $result; }
/** * @inheritdoc */ public function appendPart($route, $parameters = [], &$used_params = [], &$cacheTags = []) { /* В parameters должен храниться last_category_id Если его нет - используем parameters.category_id */ $category_id = null; if (isset($parameters['last_category_id'])) { $category_id = $parameters['last_category_id']; } elseif (isset($parameters['category_id'])) { $category_id = $parameters['category_id']; } $used_params[] = 'last_category_id'; $used_params[] = 'category_id'; if ($category_id === null) { return false; } $category = Category::findById($category_id); if (is_object($category) === true) { $parentIds = $category->getParentIds(); foreach ($parentIds as $id) { $cacheTags[] = ActiveRecordHelper::getObjectTag(Category::className(), $id); } $cacheTags[] = ActiveRecordHelper::getObjectTag(Category::className(), $category_id); return $category->getUrlPath($this->include_root_category); } else { return false; } }
/** * Handle decoration * @param \yii\base\Controller $controller * @param string $viewFile * @param array $params * @return void */ public function decorate($controller, $viewFile, $params) { if (isset($controller->view->blocks['content'])) { $dependency = new TagDependency(['tags' => [ActiveRecordHelper::getCommonTag(app\modules\core\models\ContentBlock::className()), ActiveRecordHelper::getCommonTag(get_class($params['model']))]]); $controller->view->blocks['content'] = ContentBlockHelper::compileContentString($controller->view->blocks['content'], get_class($params['model']) . ':' . $params['model']->id, $dependency); } }
public function run() { Yii::beginProfile("NavigationWidget for " . $this->rootId); $items = null; $cacheKey = implode(':', ['Navigation', $this->rootId, $this->depth, $this->viewFile]); if ($this->useCache) { if (false === ($items = \Yii::$app->cache->get($cacheKey))) { $items = null; } } if (null === $items) { $root = Navigation::find()->where(['id' => $this->rootId])->with('children')->orderBy(['sort_order' => SORT_ASC])->one(); $items = []; if ($this->depth > 0) { foreach ($root->children as $child) { $items[] = self::getTree($child, $this->depth - 1); } } if (count($items) > 0) { \Yii::$app->cache->set($cacheKey, $items, 86400, new TagDependency(['tags' => [\devgroup\TagDependencyHelper\ActiveRecordHelper::getCommonTag(Navigation::className())]])); } } $items = ArrayHelper::merge((array) $this->prependItems, $items, (array) $this->appendItems); $currentUri = Yii::$app->request->url; array_walk($items, function (&$item) use($currentUri) { if ($item['url'] === $currentUri) { $item['active'] = true; } }); $result = $this->render($this->viewFile, ['widget' => $this->widget, 'items' => $items, 'options' => $this->options, 'linkTemplate' => $this->linkTemplate, 'submenuTemplate' => $this->submenuTemplate]); Yii::endProfile("NavigationWidget for " . $this->rootId); return $result; }
/** * @return string */ public function run() { parent::run(); if (null === $this->rootCategory) { return ''; } $cacheKey = $this->className() . ':' . implode('_', [$this->viewFile, $this->rootCategory, null === $this->depth ? 'null' : intval($this->depth), intval($this->includeRoot), intval($this->fetchModels), intval($this->onlyNonEmpty), implode(',', $this->excludedCategories), \Yii::$app->request->url]) . ':' . json_encode($this->additional); if (false !== ($cache = \Yii::$app->cache->get($cacheKey))) { return $cache; } /** @var array|Category[] $tree */ $tree = Category::getMenuItems(intval($this->rootCategory), $this->depth, boolval($this->fetchModels)); if (true === $this->includeRoot) { if (null !== ($_root = Category::findById(intval($this->rootCategory)))) { $tree = [['label' => $_root->name, 'url' => Url::toRoute(['@category', 'category_group_id' => $_root->category_group_id, 'last_category_id' => $_root->id]), 'id' => $_root->id, 'model' => $this->fetchModels ? $_root : null, 'items' => $tree]]; } } if (true === $this->onlyNonEmpty) { $_sq1 = (new Query())->select('main_category_id')->distinct()->from(Product::tableName()); $_sq2 = (new Query())->select('category_id')->distinct()->from('{{%product_category}}'); $_query = (new Query())->select('id')->from(Category::tableName())->andWhere(['not in', 'id', $_sq1])->andWhere(['not in', 'id', $_sq2])->all(); $this->excludedCategories = array_merge($this->excludedCategories, array_column($_query, 'id')); } $tree = $this->filterTree($tree); $cache = $this->render($this->viewFile, ['tree' => $tree, 'fetchModels' => $this->fetchModels, 'additional' => $this->additional, 'activeClass' => $this->activeClass, 'activateParents' => $this->activateParents]); \Yii::$app->cache->set($cacheKey, $cache, 0, new TagDependency(['tags' => [ActiveRecordHelper::getCommonTag(Category::className()), ActiveRecordHelper::getCommonTag(Product::className())]])); return $cache; }
/** * @param $modelName * @param $id * @param bool $createIfEmptyId * @param bool $useCache * @param int $cacheLifetime * @param bool $throwException * @return ActiveRecord|null * @throws NotFoundHttpException */ public static function loadModel($modelName, $id, $createIfEmptyId = false, $useCache = true, $cacheLifetime = 3600, $throwException = true) { $model = null; if (empty($id)) { if ($createIfEmptyId === true) { $model = new $modelName(); } else { if ($throwException) { throw new NotFoundHttpException(); } else { return null; } } } if ($useCache === true && $model === null) { $model = Yii::$app->cache->get($modelName::className() . ":" . $id); } if (!is_object($model)) { $model = $modelName::findOne($id); if (is_object($model) && $useCache === true) { Yii::$app->cache->set($modelName::className() . ":" . $id, $model, $cacheLifetime, new TagDependency(['tags' => ActiveRecordHelper::getCommonTag($modelName::className())])); } } if (!is_object($model)) { if ($throwException) { throw new NotFoundHttpException(); } else { return null; } } return $model; }
/** * @inheritdoc */ public function run() { if ($this->model === null) { throw new InvalidConfigException("Model should be set for WarehousesRemains widget"); } $state = $this->model->getWarehousesState(); $activeWarehousesIds = Warehouse::activeWarehousesIds(); $remains = []; foreach ($state as $remain) { $remains[$remain->warehouse_id] = $remain; if (($key = array_search($remain->warehouse_id, $activeWarehousesIds)) !== false) { unset($activeWarehousesIds[$key]); } } // if we have new warehouses that not represented in warehouses state if (count($activeWarehousesIds) > 0) { foreach ($activeWarehousesIds as $id) { // create new record with default values $remain = new WarehouseProduct(); $remain->warehouse_id = $id; $remain->product_id = $this->model->id; $remain->save(); // add to remains $remains[$remain->warehouse_id] = $remain; } TagDependency::invalidate(Yii::$app->cache, ActiveRecordHelper::getObjectTag($this->model->className(), $this->model->id)); } return $this->render('warehouses-remains', ['model' => $this->model, 'remains' => $remains]); }
public function down() { $tbl = '{{%backend_menu}}'; $this->update($tbl, ['route' => '/shop/backend-order/index'], ['route' => 'shop/backend-order/index']); $this->update($tbl, ['route' => '/shop/backend-customer/index'], ['route' => 'shop/backend-customer/index']); $this->update($tbl, ['route' => '/shop/backend-contragent/index'], ['route' => 'shop/backend-contragent/index']); \yii\caching\TagDependency::invalidate(Yii::$app->cache, [\devgroup\TagDependencyHelper\ActiveRecordHelper::getCommonTag(\app\backend\models\BackendMenu::className())]); }
/** * @param string $type * @return SpecialPriceList[]|array */ public static function getModelsByKey($type) { $cacheKey = static::className() . '_' . $type; if (false === ($results = Yii::$app->cache->get($cacheKey))) { $results = self::find()->where(['type' => $type])->all(); Yii::$app->cache->set($cacheKey, $results, 86400, new TagDependency(['tags' => [ActiveRecordHelper::getCommonTag(static::className())]])); } return $results; }
/** * Retrieves all decorators from db, using cache and static variable caching * @return ContentDecorator[] * @throws \Exception */ public static function getAllDecorators() { if (static::$allDecorators === null) { static::$allDecorators = self::getDb()->cache(function ($db) { return self::find()->orderBy(['sort_order' => SORT_ASC])->all($db); }, 86400, new TagDependency(['tags' => ActiveRecordHelper::getCommonTag(self::className())])); } return static::$allDecorators; }
/** * Returns array of ID of all active warehouses * @return integer[] * @throws \Exception */ public static function activeWarehousesIds() { if (static::$activeWarehousesIds === null) { static::$activeWarehousesIds = Warehouse::getDb()->cache(function ($db) { return Warehouse::find()->where('is_active=1')->select('id')->orderBy(['sort_order' => SORT_ASC, 'id' => SORT_ASC])->asArray()->column($db); }, 86400, new TagDependency(['tags' => [ActiveRecordHelper::getCommonTag(Warehouse::className())]])); } return static::$activeWarehousesIds; }
public function down() { $this->dropTable('{{%addon}}'); $this->dropTable('{{%addon_category}}'); $this->dropTable('{{%addon_bindings}}'); $this->delete('{{%object}}', ['name' => 'Addon']); $this->delete('{{%backend_menu}}', ['name' => 'Addons']); \yii\caching\TagDependency::invalidate(Yii::$app->cache, [\devgroup\TagDependencyHelper\ActiveRecordHelper::getCommonTag(\app\backend\models\BackendMenu::className())]); $this->dropColumn('{{%order_item}}', 'addon_id'); }
public static function availableAddons($id) { $cacheKey = 'Addons4' . $id; $addons = Yii::$app->cache->get($cacheKey); if ($addons === false) { $addons = Addon::findAll(['addon_category_id' => $id]); Yii::$app->cache->set($cacheKey, $addons, 86400, new TagDependency(['tags' => [ActiveRecordHelper::getCommonTag(Addon::className()), ActiveRecordHelper::getCommonTag(AddonCategory::className())]])); } return $addons; }
protected function getManagersList() { $managers = Yii::$app->cache->get('ManagersList'); if ($managers === false) { $managers = User::find()->join('INNER JOIN', '{{%auth_assignment}}', '{{%auth_assignment}}.user_id = ' . User::tableName() . '.id')->where(['{{%auth_assignment}}.item_name' => 'manager'])->all(); $managers = ArrayHelper::map($managers, 'id', 'username'); Yii::$app->cache->set('ManagersList', $managers, 86400, new TagDependency(['tags' => [\devgroup\TagDependencyHelper\ActiveRecordHelper::getCommonTag(User::className())]])); } return $managers; }
/** * @inheritdoc * @return string */ public function run() { $cacheKey = "PlainCategoriesWidget:" . $this->root_category_id . ":" . $this->viewFile; $result = Yii::$app->cache->get($cacheKey); if ($result === false) { $categories = Category::getByParentId($this->root_category_id); $result = $this->render($this->viewFile, ['categories' => $categories]); Yii::$app->cache->set($cacheKey, $result, 86400, new \yii\caching\TagDependency(['tags' => ActiveRecordHelper::getCommonTag(Category::className())])); } return $result; }
/** * @return ActiveRecord[] */ public function getChildren() { $cacheKey = 'TreeChildren:' . $this->owner->className() . ':' . $this->owner->{$this->idAttribute}; $children = Yii::$app->cache->get($cacheKey); if ($children === false) { /** @var $className ActiveRecord */ $className = $this->owner->className(); $children = $className::find()->where([$this->parentIdAttribute => $this->owner->{$this->idAttribute}])->orderBy($this->sortOrder)->all(); Yii::$app->cache->set($cacheKey, $children, 86400, new TagDependency(['tags' => [\devgroup\TagDependencyHelper\ActiveRecordHelper::getCommonTag($className)]])); } return $children; }
/** * Returns all db-stored variations in array representation * * @param bool $force True if you want to refresh static-variable cache * @return array */ public static function getAllVariations($force = false) { if (static::$allVariations === null || $force === true) { $cacheKey = 'AllThemeVariations'; static::$allVariations = Yii::$app->cache->get($cacheKey); if (static::$allVariations === false) { static::$allVariations = ThemeVariation::find()->orderBy(['exclusive' => SORT_DESC])->asArray()->all(); Yii::$app->cache->set($cacheKey, static::$allVariations, 86400, new TagDependency(['tags' => [ActiveRecordHelper::getCommonTag(ThemeVariation::className())]])); } } return static::$allVariations; }
/** * @param integer $id * @return \yii\db\ActiveRecord */ public static function findById($id) { $cache_key = static::className() . ':' . $id; $model = Yii::$app->cache->get($cache_key); if (is_object($model) === false) { $model = static::findOne($id); if (is_object($model)) { Yii::$app->cache->set(static::className() . ":" . $id, $model, 86400, new TagDependency(['tags' => [\devgroup\TagDependencyHelper\ActiveRecordHelper::getObjectTag(static::className(), $model->id)]])); } } return $model; }
/** * Returns all enabled sorts as array of rows * Caches through cache and static variable * @return array */ public static function enabledSorts() { if (static::$_cachedRows === null) { $cacheKey = "ProductListingSorts:all:arrayOfRows"; static::$_cachedRows = Yii::$app->cache->get($cacheKey); if (!is_array(static::$_cachedRows)) { static::$_cachedRows = ProductListingSort::find()->where(['enabled' => 1])->orderBy('sort_order ASC')->indexBy('id')->asArray()->all(); Yii::$app->cache->set($cacheKey, static::$_cachedRows, 86400, new TagDependency(['tags' => [\devgroup\TagDependencyHelper\ActiveRecordHelper::getCommonTag(static::className())]])); } } return static::$_cachedRows; }
/** * Get measure by id. * @param int $id * @return Measure */ public static function findById($id) { $cacheKey = 'Measure: ' . $id; $measure = Yii::$app->cache->get($cacheKey); if ($measure === false) { $measure = self::findOne($id); if (is_null($measure)) { return null; } Yii::$app->cache->set($cacheKey, $measure, 86400, new TagDependency(['tags' => [ActiveRecordHelper::getCommonTag(self::className()), ActiveRecordHelper::getObjectTag(self::className(), $id)]])); } return $measure; }
/** * Returns model instance by ID using IdentityMap * @param integer $id * @return Object */ public static function findById($id) { if (!isset(static::$identity_map[$id])) { static::$identity_map[$id] = Yii::$app->cache->get(static::tableName() . ': ' . $id); if (static::$identity_map[$id] === false) { static::$identity_map[$id] = static::findOne($id); if (is_object(static::$identity_map[$id])) { Yii::$app->cache->set(static::tableName() . ': ' . $id, static::$identity_map[$id], 86400, new TagDependency(['tags' => [\devgroup\TagDependencyHelper\ActiveRecordHelper::getObjectTag(static::className(), $id)]])); } } } return static::$identity_map[$id]; }
/** * @param $categoryId * @return FilterSets[] */ public static function getForCategoryId($categoryId) { Yii::beginProfile('FilterSets.GetForCategory ' . $categoryId); $category = Category::findById($categoryId); if ($category === null) { return []; } $categoryIds = $category->getParentIds(); $filter_sets = Yii::$app->db->cache(function ($db) use($categoryIds, $category) { return FilterSets::find()->where(['in', 'category_id', $categoryIds])->andWhere(['delegate_to_children' => 1])->orWhere(['category_id' => $category->id])->orderBy(['sort_order' => SORT_ASC])->all(); }, 86400, new TagDependency(['tags' => [ActiveRecordHelper::getCommonTag(static::className())]])); Yii::endProfile('FilterSets.GetForCategory ' . $categoryId); return $filter_sets; }
/** * @return string */ public function run() { parent::run(); if (!$this->product instanceof Product) { return ''; } $cacheKey = 'RelatedProduct:' . implode('_', [$this->viewFile, $this->product, json_encode($this->additional)]); if (false !== ($cache = \Yii::$app->cache->get($cacheKey))) { return $cache; } $result = $this->render($this->viewFile, ['model' => $this->product, 'products' => $this->product->relatedProducts, 'additional' => $this->additional]); \Yii::$app->cache->set($cacheKey, $result, 0, new TagDependency(['tags' => [ActiveRecordHelper::getObjectTag(Product::className(), $this->product->id), ActiveRecordHelper::getCommonTag(\app\modules\shop\models\RelatedProduct::className())]])); return $result; }
public function run() { $cacheKey = md5(__METHOD__); if (false === ($items = \Yii::$app->cache->get($cacheKey))) { $parents = ArrayHelper::map(PostMeta::find()->where(['parent' => null])->orWhere(['parent' => 0])->orderBy(['order' => SORT_ASC])->all(), 'id', 'name'); foreach ($parents as $key => $value) { $nodes[$value] = PostMeta::find()->where(['parent' => $key])->asArray()->all(); } $items = $nodes; //一天缓存 \Yii::$app->cache->set($cacheKey, $items, 86400, new TagDependency(['tags' => [ActiveRecordHelper::getCommonTag(PostMeta::className())]])); } return $this->render('node', ['nodes' => $items]); }
/** * Returns model using indentity map and cache * @param string $id * @return SliderHandler|null */ public static function findBySliderId($id) { if (!isset(SliderHandler::$identity_map[$id])) { $cacheKey = SliderHandler::tableName() . ":{$id}"; if (false === ($model = Yii::$app->cache->get($cacheKey))) { $model = SliderHandler::findById($id); if (null !== $model) { Yii::$app->cache->set($cacheKey, $model, 86400, new \yii\caching\TagDependency(['tags' => [ActiveRecordHelper::getObjectTag($model, $model->id)]])); } } static::$identity_map[$id] = $model; } return static::$identity_map[$id]; }
/** * @return array|mixed */ private static function getAllDiscounts() { if (self::$allDiscounts === []) { $cacheKey = 'getAllDiscounts'; if (!(self::$allDiscounts = Yii::$app->cache->get($cacheKey))) { self::$allDiscounts = []; $discounts = Discount::find()->all(); foreach ($discounts as $discount) { self::$allDiscounts[$discount->appliance][] = $discount; } Yii::$app->cache->set($cacheKey, self::$allDiscounts, 86400, new TagDependency(['tags' => [ActiveRecordHelper::getCommonTag(Discount::className())]])); } } return self::$allDiscounts; }
/** * Handle decoration * @param \yii\base\Controller $controller * @param string $viewFile * @param array $params * @return void */ public function decorate($controller, $viewFile, $params) { if (!Yii::$app->getModule("backend")->isBackend()) { $baseContentKey = get_class($params['model']) . ':' . (isset($params['model']->id) ? $params['model']->id : '') . ':'; $view = $controller->view; $dependency = new TagDependency(['tags' => [ActiveRecordHelper::getCommonTag(app\modules\core\models\ContentBlock::className()), ActiveRecordHelper::getCommonTag(get_class($params['model']))]]); $view->title = $this->processChunks($view->title, $baseContentKey . "title", $dependency); if (!empty($view->blocks["content"])) { $view->blocks["content"] = $this->processChunks($view->blocks["content"], $baseContentKey . "content", $dependency); } if (!empty($view->blocks["announce"])) { $view->blocks["announce"] = $this->processChunks($view->blocks["announce"], $baseContentKey . "announce", $dependency); } } }
/** * Get all model records as array key => value. * @param string $className * @param string $keyAttribute * @param string $valueAttribute * @param bool $useCache * @return array */ public static function getModelMap($className, $keyAttribute, $valueAttribute, $useCache = true) { /** @var ActiveRecord $className */ $cacheKey = 'Map: ' . $className::tableName() . ':' . $keyAttribute . ':' . $valueAttribute; if (isset(Helper::$modelMaps[$cacheKey]) === false) { Helper::$modelMaps[$cacheKey] = $useCache ? Yii::$app->cache->get($cacheKey) : false; if (Helper::$modelMaps[$cacheKey] === false) { Helper::$modelMaps[$cacheKey] = ArrayHelper::map($className::find()->asArray()->all(), $keyAttribute, $valueAttribute); if ($useCache === true) { Yii::$app->cache->set($cacheKey, Helper::$modelMaps[$cacheKey], 86400, new TagDependency(['tags' => [\devgroup\TagDependencyHelper\ActiveRecordHelper::getCommonTag($className)]])); } } } return Helper::$modelMaps[$cacheKey]; }
/** * @inheritdoc */ public function getNextPart($full_url, $next_part, &$previous_parts) { if (mb_strpos($next_part, $this->static_part) === 0) { if (count($this->parameters) === 0) { $this->parameters = ['static_part' => $this->static_part]; } $cacheTags = []; if (isset($this->parameters['last_category_id']) && $this->parameters['last_category_id'] !== null) { $cacheTags[] = ActiveRecordHelper::getObjectTag(Category::className(), $this->parameters['last_category_id']); } $part = new self(['gathered_part' => $this->static_part, 'rest_part' => mb_substr($next_part, mb_strlen($this->static_part)), 'parameters' => $this->parameters, 'cacheTags' => $cacheTags]); return $part; } else { return false; } }