Jump to content

Наследование свойств при создании категории


Recommended Posts

Появилась необходимость сделать так, что бы новая создаваемая категория товаров наследовала те же свойства, что и родительская!

Есть у нас, к примеру, категория "Мойки", она родительская, мы в ней создали подкатегории "Мойки для кухни", "Мойки из гранита" и т.п. Создали кучу свойств товара, закрепили их за этими категориями и вроде все хорошо... Но пришло время создать новую подкатегорию "Мойки из стекла" и получаем следующее, что этой подкатегории придется опять, ручками, проставлять все те же самые свойства.

 

Небольшая доработка в пару строк поможет нам наследовать свойства от родителя, в нашем случае достаточно привязать нужные свойства категории "Мойки" и все подкатегории в ней будут привязываться к тем же свойствам.

 

И так...

1. Меняем API, немного правим класс по работе с категориями Categories.php. Находим там функцию add_category и добавляем ей дополнительный входной параметр, меняем:

public function add_category($category)

на это

public function add_category($category, $copy_features = false)

и добавляем после

$this->db->query("UPDATE __categories SET position=id WHERE id=?", $id);

следующее

if ($copy_features && $category['parent_id'] > 0) {
	$query = $this->db->placehold("INSERT INTO __categories_features SELECT ?, f.feature_id FROM __categories_features f WHERE f.category_id = ?", $id, $category['parent_id']);
	$this->db->query($query);			
}

2. Далее лезем в CategoryAdmin.php и добавляем после

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

следующее

$copy_features = $this->request->post('copy_features', 'boolean');

потом чуть ниже находим 

$category->id = $this->categories->add_category($category);

и меняем эту строчку на

$category->id = $this->categories->add_category($category, $copy_features);

3. Открываем шаблон category.tpl и в нужное место добавляем 

<input type="checkbox" name="copy_features" id="copy_features" checked value="1"> <label for="copy_features">Скопировать свойства родителя</label>

лучше всего это будет смотреться тут:

<!-- Параметры страницы -->
<div class="block layer">
	<h2>Параметры страницы</h2>
	<ul>
	...
	<li><input type="checkbox" name="copy_features" id="copy_features" checked value="1"> <label for="copy_features">Скопировать свойства родителя</label></li>
	</ul>
</div>

Вроде все! Теперь если при создании категории будет стоять галочка, то произойдет копирование свойств для вновь созданной подкатегории от родителя

 

У меня не было необходимости, но эту доработку можно развить, позволив при создании категории выбрать из списка категорию, с которой будут скопированы свойства. Или например вывести список свойств и прям при создании/редактировании категории закреплять за ней свойства.

Link to post
Share on other sites
  • 2 weeks later...

Спасибо, очень полезная и нужная вещь, в отличии от разных слайдеров и прочих примочек ))).

Намного упрощает заполнение товара!

Link to post
Share on other sites
  • 2 months later...

В "Свойствах" у меня около 100 свойств, и категории около 40. 
Вопрос: Как можно к каждому свойству присвоить использование во всех категориях? 

Link to post
Share on other sites
  • 1 year later...

Проблема решена. В simpla/html/category.tpl надо вставить такой код:

 

<input name=copy_features type="checkbox" id="copy_features" checked value='1'> <label for="copy_features">Скопировать свойства родителя</label>
 

Прикрепляю все измененные файлы (у category.tpl.php убрать .php). Автору спасибо.

Categories.php

CategoryAdmin.php

category.tpl.php

Link to post
Share on other sites

 

Проблема решена. В simpla/html/category.tpl надо вставить такой код:

 

<input name=copy_features type="checkbox" id="copy_features" checked value='1'> <label for="copy_features">Скопировать свойства родителя</label>
 

 

это пункт 3, мануала из первого поста)

Link to post
Share on other sites

это пункт 3, мануала из первого поста)

 

А теперь внимательно сравниваем код:

пункт 3<input type="checkbox" name="copy_features" id="copy_features" checked value="1"> <label for="copy_features">Скопировать свойства родителя</label>

мой код: <input name=copy_features type="checkbox" id="copy_features" checked value='1'> <label for="copy_features">Скопировать свойства родителя</label>

Edited by trainracing
Link to post
Share on other sites

А теперь внимательно сравниваем код:

пункт 3<input type="checkbox" name="copy_features" id="copy_features" checked value="1"> <label for="copy_features">Скопировать свойства родителя</label>

мой код: <input name=copy_features type="checkbox" id="copy_features" checked value='1'> <label for="copy_features">Скопировать свойства родителя</label>

 

и что? в чем ваши изменения? вы поменяли местами атрибуты у инпута.

Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
×
×
  • Create New...