Example #1
0
 /**
  * @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();
     }
 }
Example #2
0
 /**
  * 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();
             }
         }
     }
 }