public function actionSave() { $index = new CRatingIndex(); $index->setAttributes(CRequest::getArray(CRatingIndex::getClassName())); if ($index->validate()) { if (array_key_exists(CRatingValueForm::getClassName(), $_POST)) { $values = $_POST[CRatingValueForm::getClassName()]; foreach ($values as $key => $value) { if (strpos($key, "unsaved_") !== false) { // здесь несохраненное значение из словаря $key = substr($key, 8); $itemValue = new CRatingIndexValue(); $itemValue->index_id = $index->id; $itemValue->fromTaxonomy = 1; $itemValue->title = $key; $itemValue->value = $value['value']; $itemValue->evaluate_method = $value['evaluate_method']; $itemValue->evaluate_code = $value['evaluate_code']; $itemValue->save(); } elseif (is_numeric($key)) { // это уже ранее сохраненное значение $itemValue = CRatingManager::getRatingIndexValue($key); if (is_null($itemValue)) { $itemValue = new CRatingIndexValue(); } $itemValue->value = $value['value']; if (array_key_exists("edit_title", $value)) { if ($value['edit_title'] == "1") { if ($value['title'] !== "") { $itemValue->title = $value['title']; } } } $itemValue->evaluate_method = $value['evaluate_method']; $itemValue->evaluate_code = $value['evaluate_code']; $itemValue->save(); } elseif (strpos($key, "new_") !== false) { // это добавленное вручную значение $itemValue = new CRatingIndexValue(); $itemValue->index_id = $index->id; $itemValue->fromTaxonomy = 0; $itemValue->title = $value['title']; $itemValue->value = $value['value']; $itemValue->evaluate_method = $value['evaluate_method']; $itemValue->evaluate_code = $value['evaluate_code']; $itemValue->save(); } else { // это какая-то ошибка } } } $index->save(); if ($this->continueEdit()) { $this->redirect("?action=edit&id=" . $index->getId()); } else { $this->redirect("?action=index"); } } $this->setData("form", new CRatingValueForm()); $this->setData("index", $index); $this->renderView("_rating/index/add.tpl"); }