Как сделать свою сортировку товаров для каждой категории в опенкарт 3 ?
Создал в таблице
product_to_category столбец с названием
category_order
далее добавил в
admin/model/catalog/product.php что бы была выборка по
category_order
if (isset($data['product_category'])) {
foreach ($data['product_category'] as $category_id) {
$this->db->query("INSERT INTO " . DB_PREFIX . "product_to_category SET product_id = '" . (int)$product_id . "', category_id = '" . (int)$category_id . "', category_order = '" . (int)$category['category_order'] . "'");
}
}
if (isset($data['main_category_id']) && $data['main_category_id'] > 0) {
$this->db->query("DELETE FROM " . DB_PREFIX . "product_to_category WHERE product_id = '" . (int)$product_id . "' AND category_id = '" . (int)$data['main_category_id'] . "'");
$this->db->query("INSERT INTO " . DB_PREFIX . "product_to_category SET product_id = '" . (int)$product_id . "', category_id = '" . (int)$data['main_category_id'] . "', main_category = 1, category_order = '" . (int)$data['sort_order'] . "'");
} elseif (isset($data['product_category'][0])) {
$this->db->query("UPDATE " . DB_PREFIX . "product_to_category SET main_category = 1 WHERE product_id = '" . (int)$product_id . "' AND category_id = '" . (int)$data['product_category'][0] . "'");
и функцию выборки сортировок категорий
public function getProductCategorySorts($product_id) {
$product_category_data = array();
$query = $this->db->query('SELECT * FROM ' . DB_PREFIX . "product_to_category WHERE product_id = '" . (int)$product_id . "'");
foreach ($query->rows as $result) {
$product_category_data[$result['category_id']] = $result['category_order'];
}
return $product_category_data;
}
В
admin/controller/catalog/product.php для передачи в шаблон
if (isset($this->request->post['product_category'])) {
$data['product_category_sorts'] = $this->request->post['product_category'];
} elseif (isset($this->request->get['product_id'])) {
$data['product_category_sorts'] = $this->model_catalog_product->getProductCategorySorts($this->request->get['product_id']);
} else {
$data['product_category_sorts'] = array();
}
и В самом шаблоне
<div class="form-group">
<label class="col-sm-2 control-label" for="input-category"><span data-toggle="tooltip" title="{{ help_category }}">{{ entry_category }}</span></label>
<div class="col-sm-10">
<input type="text" name="category" value="" placeholder="{{ entry_category }}" id="input-category" class="form-control"/>
<div id="product-category" class="well well-sm" style="height: 150px; overflow: auto;"> {% for product_category in product_categories %}
<div id="product-category{{ product_category.category_id }}"><i class="fa fa-minus-circle"></i> {{ product_category.name }}
<input type="hidden" name="product_category[]" value="{{ product_category.category_id }}"/>
<input type="text" name="sort_order-category" value="{{ product_category_sorts }}" placeholder="{{ entry_sort_order }}" id="input-sort-order-category" class="form-order" style="height: 25px !important;width: 145px;"/>
</div>
{% endfor %}</div>
</div>
</div>
Но в базу не пишет вставленные значения не записываются.