/** * */ public function afterSave() { Yii::app()->eventManager->fire(StoreEvents::CATEGORY_AFTER_SAVE, new Event($this)); return parent::afterSave(); }
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(); }
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(); }