/** * @inheritdoc */ public function appendPart($route, $parameters = [], &$used_params = [], &$cacheTags = []) { if (isset($parameters['properties'])) { $used_params[] = 'properties'; if (isset($parameters['properties'][$this->property_id]) && is_array($parameters['properties'][$this->property_id])) { $psv = PropertyStaticValues::findById($parameters['properties'][$this->property_id][0]); if (count($this->include_if_value) > 0) { if (!in_array($psv['value'], $this->include_if_value)) { return false; } } if (is_array($psv)) { $cacheTags[] = ActiveRecordHelper::getObjectTag(PropertyStaticValues::className(), $psv['id']); return $psv['slug']; } else { return false; } } else { return $this->checkIncludeIfValue(); } } else { return $this->checkIncludeIfValue(); } }
/** * This function build array for widget "Breadcrumbs" * @param Category $selCat - model of current category * @param Product|null $product - model of product, if current page is a page of product * @param array $properties - array of properties and static values * Return an array for widget or empty array */ private function buildBreadcrumbsArray($selCat, $product = null, $properties = []) { if ($selCat === null) { return []; } // init $breadcrumbs = []; if ($product !== null) { $crumbs[$product->slug] = !empty($product->breadcrumbs_label) ? $product->breadcrumbs_label : ''; } $crumbs[$selCat->slug] = $selCat->breadcrumbs_label; // get basic data $parent = $selCat->parent_id > 0 ? Category::findById($selCat->parent_id) : null; while ($parent !== null) { $crumbs[$parent->slug] = $parent->breadcrumbs_label; $parent = $parent->parent; } // build array for widget $url = ''; $crumbs = array_reverse($crumbs, true); foreach ($crumbs as $slug => $label) { $url .= '/' . $slug; $breadcrumbs[] = ['label' => $label, 'url' => $url]; } if (is_null($product) && $this->module->showFiltersInBreadcrumbs && !empty($properties)) { $route = ['@category', 'last_category_id' => $selCat->id, 'category_group_id' => $selCat->category_group_id]; $params = []; foreach ($properties as $propertyId => $propertyStaticValues) { $localParams = $params; foreach ($propertyStaticValues as $propertyStaticValue) { $psv = PropertyStaticValues::findById($propertyStaticValue); if (is_null($psv)) { continue; } $localParams[$propertyId][] = $propertyStaticValue; $breadcrumbs[] = ['label' => $psv['name'], 'url' => array_merge($route, ['properties' => $localParams])]; } $params[$propertyId] = $propertyStaticValues; } } unset($breadcrumbs[count($breadcrumbs) - 1]['url']); // last item is not a link if (isset(Yii::$app->response->blocks['breadcrumbs_label'])) { // last item label rewrited through prefiltered page or something similar $breadcrumbs[count($breadcrumbs) - 1]['label'] = Yii::$app->response->blocks['breadcrumbs_label']; } return $breadcrumbs; }
/** * @param $id * @throws NotFoundHttpException * @throws \yii\db\Exception */ public function actionGenerate($id) { $post = \Yii::$app->request->post(); if (!isset($post['GeneratePropertyValue'])) { throw new NotFoundHttpException(); } $parent = Product::findById($id, null); if ($parent === null) { throw new NotFoundHttpException(); } $object = Object::getForClass(Product::className()); $catIds = (new Query())->select('category_id')->from([$object->categories_table_name])->where('object_model_id = :id', [':id' => $id])->orderBy(['sort_order' => SORT_ASC, 'id' => SORT_ASC])->column(); if (isset($post['GeneratePropertyValue'])) { $generateValues = $post['GeneratePropertyValue']; $post[HasProperties::FIELD_ADD_PROPERTY_GROUP]['Product'] = $post['PropertyGroup']['id']; } else { $generateValues = []; } $parent->option_generate = Json::encode(['group' => $post['PropertyGroup']['id'], 'values' => $generateValues]); $parent->save(); $postProperty = []; foreach ($post['GeneratePropertyValue'] as $key_property => $values) { $inner = []; foreach ($values as $key_value => $trash) { $inner[] = [$key_property => $key_value]; } $postProperty[] = $inner; } $optionProperty = self::generateOptions($postProperty); foreach ($optionProperty as $option) { /** @var Product|HasProperties $model */ $model = new Product(); $model->load($post); $model->parent_id = $parent->id; $nameAppend = []; $slugAppend = []; $tempPost = []; // @todo something foreach ($option as $optionValue) { foreach ($optionValue as $propertyKey => $propertyValue) { if (!isset($valueModels[$propertyKey])) { $propertyStaticValues = PropertyStaticValues::findOne($propertyValue); $propertyValue = PropertyStaticValues::findById($propertyValue); $key = $propertyStaticValues->property->key; $tempPost[$key] = $propertyValue; } $nameAppend[] = $propertyValue['name']; $slugAppend[] = $propertyValue['id']; } } $model->measure_id = $parent->measure_id; $model->name = $parent->name . ' (' . implode(', ', $nameAppend) . ')'; $model->slug = $parent->slug . '-' . implode('-', $slugAppend); $save_model = $model->save(); $postPropertyKey = 'Properties_Product_' . $model->id; $post[$postPropertyKey] = $tempPost; if ($save_model) { foreach (array_keys($parent->propertyGroups) as $key) { $opg = new ObjectPropertyGroup(); $opg->attributes = ['object_id' => $parent->object->id, 'object_model_id' => $model->id, 'property_group_id' => $key]; $opg->save(); } $model->saveProperties(['Properties_Product_' . $model->id => $parent->abstractModel->attributes]); $model->saveProperties($post); unset($post[$postPropertyKey]); $add = []; foreach ($catIds as $value) { $add[] = [$value, $model->id]; } if (!empty($add)) { Yii::$app->db->createCommand()->batchInsert($object->categories_table_name, ['category_id', 'object_model_id'], $add)->execute(); } $params = $parent->images; if (!empty($params)) { $rows = []; foreach ($params as $param) { $rows[] = [$param['object_id'], $model->id, $param['filename'], $param['image_title'], $param['image_alt'], $param['sort_order']]; } Yii::$app->db->createCommand()->batchInsert(Image::tableName(), ['object_id', 'object_model_id', 'filename', 'image_title', 'image_alt', 'sort_order'], $rows)->execute(); } } } }