public function setValue($val) { if (!is_object($this->object)) { return false; } switch ($this->data_type) { case 'multiple': $fv = FieldsValues::model()->findAllByAttributes(array("field_id" => $this->id, "object_id" => $this->object->id)); $exists = array(); $hasErrors = false; if (is_array($fv) && count($fv)) { foreach ($fv as $item) { if (!in_array($item->int_val, $val)) { $item->delete(); } else { $exists[] = $item->int_val; } } } if (is_array($val) && count($val)) { foreach ($val as $v) { if (!in_array($v, $exists)) { $listItem = ListsItems::model()->findByPk($v); if (is_object($listItem)) { $newFieldValue = new FieldsValues(); $newFieldValue->setAttributes(array("field_id" => $this->id, "object_id" => $this->object->id, "int_val" => $v)); if (!$newFieldValue->save()) { $hasErrors = true; } } } } } return !$hasErrors; case 'list': $hasErrors = true; $fv = FieldsValues::model()->findByAttributes(array("field_id" => $this->id, "object_id" => is_object($this->object) ? $this->object->id : 0)); if (!is_object($fv)) { $fv = new FieldsValues(); } $v = ListsItems::model()->findByPk($val); if (is_object($v)) { $fv->setAttributes(array("field_id" => $this->id, "object_id" => $this->object->id, "int_val" => $val)); if ($fv->save()) { $hasErrors = false; } } return !$hasErrors; case 'int': case 'bool': case 'date': $v = FieldsValues::model()->findByAttributes(array("field_id" => $this->id, "object_id" => $this->object->id)); if (!is_object($v)) { $v = new FieldsValues(); } $v->setAttributes(array("field_id" => $this->id, "object_id" => $this->object->id, "int_val" => $val)); return $v->save(); default: $v = FieldsValues::model()->findByAttributes(array("field_id" => $this->id, "object_id" => $this->object->id)); if (!is_object($v)) { $v = new FieldsValues(); } $v->setAttributes(array("field_id" => $this->id, "object_id" => $this->object->id, "text_val" => $val)); return $v->save(); } }
public function actionSearch1() { $objects = array(); $criteria = new CDbCriteria(); $criteria->alias = 'catalog_filtered_fields_values'; $criteria->condition = "object_id > 0"; if (isset($_REQUEST['data'])) { $criteria->condition = ""; $data = $_REQUEST['data']; if (is_array($data) && count($data)) { foreach ($data as $fieldName => $items) { $field = CatalogFilteredFields::model()->findByAttributes(array("category_id" => 1, "name" => $fieldName)); if (is_object($field) && is_array($items) && count($items)) { foreach ($items as $item) { if (is_numeric($item)) { $criteria->addCondition("field_id = " . $field->id . " AND int_val = " . $item, "OR"); } } } } } } $criteria->group = "object_id"; if (isset($_REQUEST['min_price']) && isset($_REQUEST['max_price'])) { $criteria->join = "LEFT JOIN `catalog_objects` ON `catalog_filtered_fields_values`.`object_id` = `catalog_objects`.`id`"; $criteria->addBetweenCondition('price', CatalogObjects::convertPrice($_REQUEST['min_price']), CatalogObjects::convertPrice($_REQUEST['max_price'])); } $objects = FieldsValues::model()->findAll($criteria); $this->renderPartial('objects', array('objects' => $objects)); }
echo in_array($option->id, $fvArr) ? ' selected="selected"' : ''; ?> ><?php echo $option->name; ?> </option> <?php } } } ?> </select> <?php break; case 'bool': $fValue = FieldsValues::model()->findByAttributes(array("field_id" => $field->id, "object_id" => $model->id)); ?> <input type="checkbox" name="data[additional][<?php echo $field->name; ?> ]" value="1"<?php echo is_object($fValue) && $fValue->int_val ? ' checked="checked"' : ''; ?> /> <label><?php echo $field->title; ?> </label> <?php break; }
public function updateObject($artikul, $name, $langId, $dataArray) { $model = null; switch ($langId) { case 19: $criteria = new CDbCriteria(); $criteria->addCondition("field_id = 11"); $criteria->addCondition("text_val = " . $artikul); $fv = FieldsValues::model()->find($criteria); if (is_object($fv)) { $model = $fv->object; } break; case 20: $criteria = new CDbCriteria(); $criteria->addCondition("field_id = 29"); $criteria->addCondition("text_val = " . $artikul); $fv = FieldsValues::model()->find($criteria); if (is_object($fv)) { $model = $fv->object; } break; case 21: $criteria = new CDbCriteria(); $criteria->addCondition("field_id = 47"); $criteria->addCondition("text_val = " . $artikul); $fv = FieldsValues::model()->find($criteria); if (is_object($fv)) { $model = $fv->object; } break; } if (!is_object($model)) { $this->createObject($dataArray['name_orig'], $langId, $dataArray); } else { //prepare data $attributes = array(); $uploaddir = 'images/upload/' . date("d.m.Y", time()); switch ($langId) { case 19: $attributes['category_id'] = 1; //@todo Выбор категории для импорта break; case 20: $attributes['category_id'] = 5; break; case 21: $attributes['category_id'] = 9; break; } $attributes['name'] = $name; $toUrl = $langId == 21 ? $name . "-" . $dataArray['artikul'] . "-fr" : $name . "-" . $dataArray['artikul']; $attributes['url'] = translit::convert($toUrl, "-"); $attributes['h1'] = $name; $attributes['title'] = $name; $attributes['price'] = isset($dataArray['price']) ? str_replace(",", ".", $dataArray['price']) : 0; if ($langId == 19) { $attributes['anons'] = $dataArray['name_ru']; } else { $attributes['anons'] = ''; } if (is_dir('import_images/' . $artikul)) { if (is_file('import_images/' . $artikul . '/1.jpg')) { if (isset($model->anons_pic) && is_file($model->anons_pic)) { unlink($model->anons_pic); } if (isset($model->content_pic) && is_file($model->content_pic)) { unlink($model->content_pic); } if (isset($model->extra_img) && is_file($model->extra_img)) { unlink($model->extra_img); } $anonsPicPath = $uploaddir . "/a_" . md5(time() . $artikul . "a1") . ".jpg"; $contentPicPath = $uploaddir . "/c_" . md5(time() . $artikul . "c1") . ".jpg"; if (copy('import_images/' . $artikul . '/1.jpg', $anonsPicPath)) { $attributes['anons_pic'] = "/" . $anonsPicPath; } if (copy('import_images/' . $artikul . '/1.jpg', $contentPicPath)) { $attributes['content_pic'] = "/" . $contentPicPath; } } if (is_file('import_images/' . $artikul . '/2.jpg')) { $extraPicPath = $uploaddir . "/e_" . md5(time() . $artikul . "2") . ".jpg"; if (copy('import_images/' . $artikul . '/2.jpg', $extraPicPath)) { $attributes['extra_img'] = "/" . $extraPicPath; } } } //push data $model->setAttributes($attributes); if ($model->save()) { //prepare additional data if (isset($dataArray['ratings']['RP'])) { $model->field('rp')->setValue($dataArray['ratings']['RP']); } if (isset($dataArray['ratings']['WS'])) { $model->field('ws')->setValue($dataArray['ratings']['WS']); } $additionalFields = CatalogFilteredFields::model()->findAllByAttributes(array("category_id" => $model->category_id)); if (is_array($additionalFields) && count($additionalFields)) { foreach ($additionalFields as $f) { $fieldData = isset($dataArray[$f->name]) ? $dataArray[$f->name] : null; $langPrefix = 'ru'; switch ($langId) { case 19: $langPrefix = 'ru'; break; case 20: $langPrefix = 'en'; break; case 21: $langPrefix = 'fr'; break; } //if(is_array($fieldData) || ($fieldData && !is_array($fieldData))){ switch ($f->data_type) { case 'int': if (is_numeric($dataArray[$f->name])) { $model->field($f->name)->setValue($dataArray[$f->name]); } break; case 'date': if ($dataArray[$f->name]) { $model->field($f->name)->setValue(strtotime($dataArray[$f->name])); } break; case 'bool': $model->field($f->name)->setValue($fieldData ? 1 : 0); break; case 'multiple': if (is_array($fieldData) && isset($fieldData[$langPrefix])) { $values = $fieldData[$langPrefix]; if (is_array($values) && count($values)) { $setArr = array(); $num = 0; foreach ($values as $value) { $listItem = ListsItems::model()->findByAttributes(array("list_id" => $f->rel, "name" => $value)); if (!is_object($listItem)) { $listItem = new ListsItems(); $listItem->setAttributes(array("list_id" => $f->rel, "name" => $value)); $listItem->save(); if (isset($fieldData['en'][$num]) && $fieldData['en'][$num]) { $listItem->field("en_name")->setValue($fieldData['en'][$num]); } if (isset($fieldData['fr'][$num]) && $fieldData['fr'][$num]) { $listItem->field("fr_name")->setValue($fieldData['fr'][$num]); } } $setArr[] = $listItem->id; $num++; } $model->field($f->name)->setValue($setArr); } } else { if (is_array($fieldData)) { $values = $fieldData; if (is_array($values) && count($values)) { $setArr = array(); foreach ($values as $value) { $listItem = ListsItems::model()->findByAttributes(array("list_id" => $f->rel, "name" => $value)); if (!is_object($listItem)) { $listItem = new ListsItems(); $listItem->setAttributes(array("list_id" => $f->rel, "name" => $value)); $listItem->save(); } $setArr[] = $listItem->id; } $model->field($f->name)->setValue($setArr); } } } break; case 'list': if (is_array($fieldData) && isset($fieldData[$langPrefix])) { $value = $fieldData[$langPrefix]; $listItem = ListsItems::model()->findByAttributes(array("list_id" => $f->rel, "name" => $value)); if (!is_object($listItem)) { $listItem = new ListsItems(); $listItem->setAttributes(array("list_id" => $f->rel, "name" => $value)); $listItem->save(); if (isset($fieldData['en']) && $fieldData['en']) { $listItem->field("en_name")->setValue($fieldData['en']); } if (isset($fieldData['fr']) && $fieldData['fr']) { $listItem->field("fr_name")->setValue($fieldData['fr']); } } $model->field($f->name)->setValue($listItem->id); } else { if ($f->name == 'brand') { $value = $fieldData['name']; $listItem = ListsItems::model()->findByAttributes(array("list_id" => $f->rel, "name" => $value)); if (!is_object($listItem)) { $listItem = new ListsItems(); $listItem->setAttributes(array("list_id" => $f->rel, "name" => $value)); $listItem->save(); if (isset($fieldData['en']) && $fieldData['en']) { $listItem->field("en_name")->setValue($fieldData['en']); } if (isset($fieldData['fr']) && $fieldData['fr']) { $listItem->field("fr_name")->setValue($fieldData['fr']); } if (isset($fieldData['site'])) { $listItem->field('ru_site')->setValue($fieldData['site']); } } else { if (isset($fieldData['en']) && $fieldData['en']) { $listItem->field("en_name")->setValue($fieldData['en']); } if (isset($fieldData['fr']) && $fieldData['fr']) { $listItem->field("fr_name")->setValue($fieldData['fr']); } if (isset($fieldData['site'])) { $listItem->field('ru_site')->setValue($fieldData['site']); } } $model->field($f->name)->setValue($listItem->id); } else { if (!is_array($fieldData)) { //$value = $fieldData; $listItem = ListsItems::model()->findByAttributes(array("list_id" => $f->rel, "name" => $fieldData)); if (!is_object($listItem)) { $listItem = new ListsItems(); $listItem->setAttributes(array("list_id" => $f->rel, "name" => $fieldData)); $listItem->save(); } $model->field($f->name)->setValue($listItem->id); } } } break; default: $value = is_array($fieldData) && isset($fieldData[$langPrefix]) ? $fieldData[$langPrefix] : $fieldData; $model->field($f->name)->setValue(trim($value)); break; } //} } } } } }
if (is_array($regions) && count($regions)) { ?> <ul class="region f_<?php echo $fieldName; ?> "> <?php foreach ($regions as $region) { $regionField = CatalogFilteredFields::model()->findByAttributes(array("category_id" => $this->currentCategory->id, "name" => "region")); $count = 0; if (is_object($regionField)) { $countCriteria = new CDbCriteria(); $countCriteria->addCondition("field_id = " . $regionField->id); $countCriteria->addCondition("int_val = " . $region->id); $countCriteria->group = "object_id"; $count = FieldsValues::model()->count($countCriteria); } if ($count) { ?> <li> <input type="checkbox" data-name="<?php echo $region->name; ?> " id="c<?php echo $region->id; ?> " name="data[region][]" value="<?php echo $region->id; ?> "<?php if (in_array($region->id, $requestData)) {
break; case 20: $regionFieldId = 25; break; case 21: $regionFieldId = 43; break; } if ($regionFieldId) { $countCriteria = new CDbCriteria(); $countCriteria->alias = 'fv'; $countCriteria->addCondition("field_id = " . $regionFieldId); $countCriteria->addCondition("int_val = " . $region->id); $countCriteria->join = "INNER JOIN `catalog_objects` as co ON `fv`.`object_id` = `co`.`id` AND `co`.`lang_id` = " . $this->lang . ' AND `co`.`is_active` = 1'; $countCriteria->group = "object_id"; $count = count(FieldsValues::model()->findAll($countCriteria)); } if ($count) { ?> <li> <input type="checkbox" data-name="<?php echo $region->name; ?> " id="c<?php echo $region->id; ?> " name="data[region][]" value="<?php echo $region->id; ?> "<?php if (in_array($region->id, $requestData)) {