В общем решил сделать выборку категорий, которые будут выводиться дополнительно к подкатегориям.
Начал так. Добавил новую таблицу в базе:
CREATE TABLE IF NOT EXISTS `oc_category_dop` (
`category_id` int(11) NOT NULL,
`parent_id` int(11) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=3 ;
где oc поменял на свой
В admin/view/template/catalog/category_form.tpl
Добавил, после выбора Родительской категории:
<div class="form-group">
<label class="col-sm-2 control-label" for="input-category"><span data-toggle="tooltip" title="<?php echo $help_category; ?>"><?php echo $entry_category; ?></span></label>
<div class="col-sm-10">
<input type="text" name="category" value="" placeholder="<?php echo $entry_category; ?>" id="input-category" class="form-control" />
<div id="product-category" class="well well-sm" style="height: 150px; overflow: auto;">
<?php foreach ($product_categories as $product_category) { ?>
<div id="product-category<?php echo $product_category['category_id']; ?>"><i class="fa fa-minus-circle"></i> <?php echo $product_category['name']; ?>
<input type="hidden" name="product_category[]" value="<?php echo $product_category['category_id']; ?>" />
</div>
<?php } ?>
</div>
</div>
</div>
и скрипт в конце файла
<script type="text/javascript"><!--
$('input[name=\'category\']').autocomplete({
'source': function(request, response) {
$.ajax({
url: 'index.php?route=catalog/category/autocomplete&token=<?php echo $token; ?>&filter_name=' + encodeURIComponent(request),
dataType: 'json',
success: function(json) {
response($.map(json, function(item) {
return {
label: item['name'],
value: item['category_id']
}
}));
}
});
},
'select': function(item) {
$('input[name=\'category\']').val('');
$('#product-category' + item['value']).remove();
$('#product-category').append('<div id="product-category' + item['value'] + '"><i class="fa fa-minus-circle"></i> ' + item['label'] + '<input type="hidden" name="product_category[]" value="' + item['value'] + '" /></div>');
}
});
$('#product-category').delegate('.fa-minus-circle', 'click', function() {
$(this).parent().remove();
});
$('#product-category' + item['value']).remove();
$('#product-category').append('<div id="product-category' + item['value'] + '"><i class="fa fa-minus-circle"></i> ' + item['label'] + '<input type="hidden" name="product_category[]" value="' + item['value'] + '" /></div>');
}
});
$('#product-category').delegate('.fa-minus-circle', 'click', function() {
$(this).parent().remove();
});
//--></script>
В admin/language/*/catalog/category.php добавил:
$_['entry_category'] = 'Дополнительные категории';
$_['help_category'] = 'Дополнительные категории для отображения';
В admin/controller/catalog/category.php в protected function getForm() { добавил:
$data['entry_category'] = $this->language->get('entry_category');
$data['help_category'] = $this->language->get('help_category');
и
if (isset($this->request->post['product_category'])) {
$categories1 = $this->request->post['product_category'];
} elseif (isset($this->request->get['category_id'])) {
$categories1 = $this->model_catalog_category->getParentCategories($this->request->get['category_id']);
} else {
$categories1 = array();
}
$data['product_categories'] = array();
foreach ($categories1 as $category_id) {
$category_info = $this->model_catalog_category->getCategory($category_id);
if ($category_info) {
$data['product_categories'][] = array(
'category_id' => $category_info['category_id'],
'name' => ($category_info['path']) ? $category_info['path'] . ' > ' . $category_info['name'] : $category_info['name']
);
}
}
и в protected function getList() { добавил
$data['categories1'] = array();
$results1 = $this->model_catalog_category->getCategories($filter_data);
foreach ($results1 as $result1) {
$multipleCategories = $this->model_catalog_category->getMultipleParentCategories($result1['category_id']);
$data['categories1'][] = array(
'category_id' => $result1['category_id'],
'name' => $multipleCategories[0]['parentcategories'].$result1['name'],
'sort_order' => $result1['sort_order'],
'edit' => $this->url->link('catalog/category/edit', 'token=' . $this->session->data['token'] . '&category_id=' . $result1['category_id'] . $url, 'SSL'),
'delete' => $this->url->link('catalog/category/delete', 'token=' . $this->session->data['token'] . '&category_id=' . $result1['category_id'] . $url, 'SSL')
);
}
Теперь идем в модель admin/model/catalog/category.php
и добавляем новый метод
public function getParentCategories($category_id) {
$parent_category_data = array();
$query = $this->db->query("SELECT * FROM " . DB_PREFIX . "category_dop WHERE category_id = '" . (int)$category_id . "'");
foreach ($query->rows as $result) {
$parent_category_data[] = $result['parent_id'];
}
return $parent_category_data;
}
и
public function getMultipleParentCategories($category_id) {
$query = $this->db->query("SELECT CONCAT( CONCAT( '(', GROUP_CONCAT( cd1.name ORDER BY cp.level SEPARATOR ')(' ) ) , ') >' ) AS parentcategories FROM " . DB_PREFIX . "category_dop cmprt LEFT JOIN " . DB_PREFIX . "category_description cd1 ON ( cmprt.parent_id = cd1.category_id ) LEFT JOIN " . DB_PREFIX . "category_path cp ON ( cp.category_id = cmprt.parent_id ) WHERE cmprt.category_id='" . (int)$category_id . "'");
return $query->rows;
}
Далее в этом же файле в моделе public function editCategory($category_id, $data) {
добавляем
$this->db->query("DELETE FROM " . DB_PREFIX . "category_dop WHERE category_id = '" . (int)$category_id . "'");
if (isset($data['product_category'])) {
foreach ($data['product_category'] as $parent_id) {
echo "Category parentid". $parent_id;
$this->db->query("INSERT INTO " . DB_PREFIX . "category_dop SET category_id = '" . (int)$category_id . "', parent_id = '" . (int)$parent_id . "'");
}
}
в моделе public function addCategory($data) {
if (isset($data['product_category'])) {
foreach ($data['product_category'] as $parent_id) {
echo "Category parentid". $parent_id;
$this->db->query("INSERT INTO " . DB_PREFIX . "category_dop SET category_id = '" . (int)$category_id . "', parent_id = '" . (int)$parent_id . "'");
}
}
По идее с этого момента должны выбираться категории и добавляться в базу при сохранении категории. Но они даже не выбираются, подскажите что пропустил или не так сделал!