Перейти к содержанию
Официальный форум поддержки Simpla

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


Рекомендуемые сообщения

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

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

 

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

 

И так...

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>

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

 

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

Ссылка на сообщение
Поделиться на другие сайты
  • 2 недели спустя...

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

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

Ссылка на сообщение
Поделиться на другие сайты
  • 2 месяца спустя...

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

Ссылка на сообщение
Поделиться на другие сайты
  • 1 год спустя...

Проблема решена. В 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

Ссылка на сообщение
Поделиться на другие сайты

 

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

 

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

 

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

Ссылка на сообщение
Поделиться на другие сайты

это пункт 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>

Изменено пользователем trainracing
Ссылка на сообщение
Поделиться на другие сайты

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

пункт 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>

 

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

Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

Загрузка...
×
×
  • Создать...