public function actionSearch() { $objects = array(); $criteria = new CDbCriteria(); $criteria->alias = 'co'; $criteria->condition = "is_active = 1 AND is_deleted = 0"; $criteria->addCondition("lang_id = " . $this->lang); $criteria->addCondition("category_id = 1"); //@todo - искать в реальной категории if (isset($_REQUEST['data'])) { $data = $_REQUEST['data']; if (is_array($data) && count($data)) { $criteria->join = ""; $i = 0; foreach ($data as $fieldName => $items) { $field = CatalogFilteredFields::model()->findByAttributes(array("category_id" => 1, "name" => $fieldName)); if (is_object($field) && is_array($items) && count($items)) { $cond = '('; $i1 = true; foreach ($items as $item) { if (is_numeric($item)) { if (!$i1) { $cond .= "OR (`fv{$i}`.`field_id` = {$field->id} AND `fv{$i}`.`int_val` = {$item}) "; } else { $cond .= "(`fv{$i}`.`field_id` = {$field->id} AND `fv{$i}`.`int_val` = {$item}) "; $i1 = false; } } } $cond .= ')'; $criteria->join .= "INNER JOIN `catalog_filtered_fields_values` AS `fv{$i}` ON `co`.`id` = `fv{$i}`.`object_id` " . "AND {$cond} "; $i++; } } } } //$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'])); } $count = CatalogObjects::model()->count($criteria); $pages = new CPagination($count); $pages->pageSize = 2; $pages->applyLimit($criteria); $objects = CatalogObjects::model()->findAll($criteria); $this->renderPartial('objects', array('objects' => $objects, 'pages' => $pages)); }
<div class="form-group"> <label>Meta Keywords</label> <input type="text" name="data[meta_keywords]" value="" class="form-control" /> </div> <div class="form-group"> <label>Meta Description</label> <input type="text" name="data[meta_description]" value="" class="form-control" /> </div> </div> </div> </div> <div role="tabpanel" class="tab-pane" id="additional"> <div class="row"> <div class="col-lg-12"> <?php $fields = CatalogFilteredFields::model()->findAll(); if (is_array($fields) && count($fields)) { foreach ($fields as $field) { ?> <div class="form-group"> <?php switch ($field->data_type) { case 'varchar': case 'int': ?> <label><?php echo $field->title; ?> </label> <input type="text" name="data[additional][<?php echo $field->name;
?> " class="form-control" /> </div> <div class="form-group"> <label>Meta Description</label> <input type="text" name="data[meta_description]" value="<?php echo is_object($model) ? CHtml::encode($model->meta_description) : ''; ?> " class="form-control" /> </div> </div> <div role="tabpanel" class="tab-pane" id="additional"> <div class="row"> <div class="col-lg-12"> <?php $fields = CatalogFilteredFields::model()->findAllByAttributes(array("category_id" => $model->category_id)); if (is_array($fields) && count($fields)) { foreach ($fields as $field) { ?> <div class="form-group"> <?php switch ($field->data_type) { case 'varchar': $fValue = FieldsValues::model()->findByAttributes(array("field_id" => $field->id, "object_id" => $model->id)); ?> <label><?php echo $field->title; ?> </label> <input type="text" name="data[additional][<?php echo $field->name;
public function actionToggleFiltered() { if (isset($_REQUEST['pk'])) { $model = CatalogFilteredFields::model()->findByPk($_REQUEST['pk']); if (is_object($model)) { $model->in_filter = $model->in_filter ? 0 : 1; if ($model->save()) { return true; } } } return false; }
public function createObject($name, $langId, $dataArray) { $model = new CatalogObjects(); //prepare data $uploaddir = 'images/upload/' . date("d.m.Y", time()); $attributes = array(); 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; $attributes['h1'] = $name; $attributes['title'] = $name; $toUrl = $langId == 21 ? $name . "-" . $dataArray['artikul'] . "-fr" : $name . "-" . $dataArray['artikul']; $attributes['url'] = translit::convert($toUrl, "-"); $attributes['price'] = isset($dataArray['price']) ? str_replace(",", ".", $dataArray['price']) : 0; $attributes['is_active'] = 0; $attributes['is_deleted'] = 0; $attributes['on_main'] = 0; $attributes['lang_id'] = $langId; $attributes['views_count'] = 0; $artikul = isset($dataArray['artikul']) ? $dataArray['artikul'] : ''; 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')) { $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') { $brandName = $fieldData['name']; $value = $brandName; $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; } } } } } else { print_r($model->errors); die; } }
$listsFieldsValues = ListsFieldsValues::model()->findAll($criteria); if (is_array($listsFieldsValues) && count($listsFieldsValues)) { foreach ($listsFieldsValues as $lfv) { $regions[] = ListsItems::model()->findByPk($lfv->object_id); } } } 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
/** * Служит для получения дополнительных свойств товара. В качетсве параметра принимает название * дополнительного свойства. Возвращает экземпляр класса CatalogFilteredFields * $object->field('fieldName')->value(); * @param string $name Название свойства товара * @return object */ public function field($name) { if (isset($this->cache['field'][$name])) { $model = $this->cache['field'][$name]; } else { $model = CatalogFilteredFields::model()->findByAttributes(array("category_id" => $this->category_id, "name" => $name)); if (is_object($model)) { $model->object = $this; $this->cache['field'][$name] = $model; } } return is_object($model) ? $model : new CatalogFilteredFields(); }