示例#1
0
 public function afterSave()
 {
     if ($this->type == Attribute::TYPE_DROPDOWN) {
         // список новых значений опций атрибута, не пустые, без лишних пробелов по бокам, уникальные
         $newOptions = array_unique(array_filter(array_map('trim', explode("\n", $this->rawOptions))));
         // в нижнем регистре, чтобы не надо было переназначать привязку атрибутов в товарах
         $newOptionsLower = array_map(function ($x) {
             return mb_strtolower($x, 'utf-8');
         }, $newOptions);
         $oldOptionsLower = [];
         // список имен опций, которые уже сохранены
         // удалим те из них, которых нет, в остальных обновим значение и позицию
         foreach ((array) $this->options as $option) {
             /* @var $option AttributeOption */
             $position = array_search(mb_strtolower($option->value), $newOptionsLower);
             // опция была удалена
             if ($position === false) {
                 $option->delete();
             } else {
                 $oldOptionsLower[] = mb_strtolower($option->value, 'utf-8');
                 $option->value = $newOptions[$position];
                 // если поменяли регистр опции
                 $option->position = $position;
                 $option->save();
             }
         }
         // добавим оставшиеся
         foreach (array_diff($newOptionsLower, $oldOptionsLower) as $position => $value) {
             $option = new AttributeOption();
             $option->attribute_id = $this->id;
             $option->value = $newOptions[$position];
             $option->position = $position;
             $option->save();
         }
     }
     parent::afterSave();
 }
示例#2
0
 /**
  * @param $id
  * @throws CHttpException
  */
 public function actionAddOption($id)
 {
     if (Yii::app()->getRequest()->getIsPostRequest()) {
         $model = $this->loadModel($id);
         $option = new AttributeOption();
         $option->setAttributes(['value' => Yii::app()->getRequest()->getPost('value'), 'attribute_id' => $model->id]);
         if (true === $option->save()) {
             Yii::app()->ajax->success();
         }
         Yii::app()->ajax->failure();
     } else {
         throw new CHttpException(400, Yii::t('StoreModule.store', 'Bad request. Please don\'t use similar requests anymore'));
     }
 }
示例#3
0
 public function afterSave()
 {
     // удаляем старые значения
     AttributeOption::model()->deleteAllByAttributes(['attribute_id' => $this->id]);
     if (in_array($this->type, [Attribute::TYPE_DROPDOWN])) {
         $newOptions = explode("\n", $this->rawOptions);
         $newOptions = array_filter($newOptions, function ($x) {
             return strlen(trim($x));
         });
         foreach (array_values((array) $newOptions) as $key => $op) {
             $option = new AttributeOption();
             $option->attribute_id = $this->id;
             $option->value = trim($op);
             $option->position = $key;
             $option->save();
         }
     }
     parent::afterSave();
 }
示例#4
0
 /**
  * @param array $attributes
  * @return bool
  * @throws CDbException
  */
 public function setMultipleValuesAttributes(array $attributes)
 {
     if (!$this->isMultipleValues()) {
         return true;
     }
     $transaction = Yii::app()->getDb()->beginTransaction();
     try {
         foreach ($attributes as $attribute) {
             $model = new AttributeOption();
             $model->setAttributes(['attribute_id' => $this->id, 'value' => trim($attribute)]);
             if (false === $model->save()) {
                 throw new CDbException();
             }
         }
         $transaction->commit();
         return true;
     } catch (Exception $e) {
         $transaction->rollback();
         return false;
     }
 }
 public function addOption($spec, $attr)
 {
     $options = AttributeOption::model()->findAllByAttributes(['attribute_id' => $attr->id]);
     $list = CHtml::listData($options, 'position', 'value');
     if (!in_array($spec['value'], $list)) {
         end($list);
         $key = key($list);
         $option = new AttributeOption();
         $option->attribute_id = $attr->id;
         $option->position = $key + 1;
         $option->value = $spec['value'];
         $option->save();
         if (!$option->save()) {
             echo "\n";
             echo "Error: save AttributeOption for id_product = {$spec['id_product']} \n";
             echo "\n";
         }
     }
 }