Перейти к содержимому


Фото
* * * * * 1 голосов

Выбор свойств при создании/редактировании категории


  • Чтобы отвечать, сперва войдите на форум
1 ответ в теме

#1 Gloobus

Gloobus
  • Фрилансер
  • 135 сообщений
  • Программирование
  • Версия CMS:1.x, 2.x
  • Откуда:Москва

Опубликовано 02.09.2014 - 15:39

При создании и редактировании свойства товара вы можете указать, к товаром какой категории будет применимо это свойство. НО в симпле нет обратного действия, нельзя при создании и редактировании категории указать свойства, которые будут применимы к товарам данной категории.

 

Я решил это немного подправить, получилось так:

Прикрепленный файл  features.JPG   74,29К   113 раз скачано

 

Как пользоваться, думаю понятно... Попробую расписать как это организовать!

 

1. В api/Features.php находим функцию

public function update_feature_categories($id, $categories)
{
   ...
}

и после нее добавляем новую:

public function update_category_features($id, $features)
{
	$id = intval($id);
	$query = $this->db->placehold("DELETE FROM __categories_features WHERE category_id=?", $id);
	$this->db->query($query);
	
	
	if(is_array($features))
	{
		$values = array();
		foreach($features as $feature)
			$values[] = "($id , ".intval($feature).")"; 

		$query = $this->db->placehold("INSERT INTO __categories_features (category_id, feature_id) VALUES ".implode(', ', $values));
		$this->db->query($query);

		// Удалим значения из options 
		$query = $this->db->placehold("DELETE o FROM __options o WHERE o.product_id in 
				 (SELECT c.product_id FROM __products_categories c WHERE c.category_id = ?)
				 AND o.feature_id not in (?@)", $id, $features);
		$this->db->query($query);
	}
	else
	{
		// Удалим значения из options 
		$query = $this->db->placehold("DELETE o FROM __options o WHERE o.product_id in 
				 (SELECT c.product_id FROM __products_categories c WHERE c.category_id = ?)", $id);
		$this->db->query($query);
	}
}

2. Открываем simpla/CategoryAdmin.php и после

$category->description = $this->request->post('description');

добавляем

$features = $this->request->post('features');

Чуть ниже, после 

// Загрузка изображения
$image = $this->request->files('image');
if(!empty($image['name']) && in_array(strtolower(pathinfo($image['name'], PATHINFO_EXTENSION)), $this->allowed_image_extentions))
{
	$this->categories->delete_image($category->id);
	move_uploaded_file($image['tmp_name'], $this->root_dir.$this->config->categories_images_dir.$image['name']);
	$this->categories->update_category($category->id, array('image'=>$image['name']));
}

добавляем это:

$this->features->update_category_features($category->id, $features);

и почти в конце после 

$categories = $this->categories->get_categories_tree();

добавляем:

$features = $this->features->get_features();
$this->design->assign('features', $features);

$feature_categories_tmp = array();
if (!empty($category->id)) {
	$feature_categories = $this->features->get_features(array('category_id' => $category->id));
	foreach ($feature_categories as $f_cat) {
		$feature_categories_tmp[] = $f_cat->id;
	}
}
$this->design->assign('feature_categories', $feature_categories_tmp);

 

3. Открываем simpla/design/html/category.tpl и в удобное место вставляем "селектлист"

<!-- Свойства категории -->	
<div class="block layer">
	<h2>Свойства категории</h2>
	<select class="multiple_categories" multiple name="features[]">
	{foreach $features as $feature}
		<option value="{$feature->id}" {if in_array($feature->id, $feature_categories)}selected{/if}>{$feature->name|escape}</option>
	{/foreach}
	<select>
</div>

 

Вроде все. Делал на быструю руку и возможно мог что-нибудь упустить.



#2 FDA

FDA
  • Пользователь
  • 49 сообщений
  • Пользователь
  • Версия CMS:2.x
  • Откуда:РФ

Опубликовано 01.12.2019 - 02:48

Тег <select> должен быть парным, т.е. второй должен быть закрытым </select>.

И еще, при данном дополнении не будет работать решение "Наследование свойств при создании категории" написанное Вами же.

http://forum.simplac...тегория +товара


Изменено: FDA, 01.12.2019 - 03:03





0 пользователей читают эту тему

0 пользователей, 0 гостей, 0 скрытых