Доброго всем дня!
По просьбам трудящихся выкладываю код для OC второй версии)
Скачал:
ocStore 2.1.0.2.1
Во-первых, сразу предупреждаю:
ВНИМАНИЕ! Все изменения, вносимые в код вы делаете на свой страх и риск, все файлы советую бэкапить, В ТОМ ЧИСЛЕ БАЗУ ДАННЫХ!
Во-вторых, этот код писался под мой любимый ocStore, поэтому для чистого Opencart и его просто русифицированных версий будет отличаться.
Итак, во-первых, как и раньше, лезем в файл:
/admin/controller/catalog/category.php
там перед последней фигурной скобкой } вставляем следующий код:
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
public function my_copy() {
$this->load->language('catalog/category');
$this->document->setTitle($this->language->get('heading_title'));
$this->load->model('catalog/category');
if (isset($this->request->post['selected'])) {
foreach ($this->request->post['selected'] as $category_id) {
$this->my_copycat($category_id);
}
}
$this->getList();
}
private function my_copycat($cid) {
// GET LAST CID
$query_id = $this->db->query("SELECT * FROM " . DB_PREFIX . "category;");
$last_cid=0;
foreach ($query_id->rows as $qqqq) {
if ($last_cid < (int)$qqqq['category_id']) {
$last_cid = (int)$qqqq['category_id'];
}
}
++$last_cid;
// 1-st QUERY ('category' DB)
$qq = "SELECT * FROM " . DB_PREFIX . "category WHERE category_id = " . $cid . ";";
$query = $this->db->query($qq);
$my_category = array();
foreach ($query->rows as $qqqq) {
foreach ($qqqq as $mkey => $mval) {
if ($mval == '') {
$my_category[$mkey] = 'NULL';
} else {
$my_category[$mkey] = $mval;
}
}
}
// 2-nd QUERY ('category_description' DB)
$qq = "SELECT * FROM " . DB_PREFIX . "category_description WHERE category_id = " . $cid . ";";
$query = $this->db->query($qq);
$my_category_description = array();
$j=0;
foreach ($query->rows as $qqqq) {
foreach ($qqqq as $mkey => $mval) {
if ($mval == '') {
$my_category_description[$j][$mkey] = 'NULL';
} else {
$my_category_description[$j][$mkey] = $mval;
}
}
$j++;
}
// 3-rd QUERY ('category_to_store' DB)
$qq = "SELECT * FROM " . DB_PREFIX . "category_to_store WHERE category_id = " . $cid . ";";
$query = $this->db->query($qq);
$my_category_to_store = array ();
foreach($query->rows as $qqqq){
foreach ($qqqq as $mkey => $mval) {
$my_category_to_store[$mkey] = $mval;
}
}
// READING ENDED // READING ENDED // READING ENDED
// WRITING TO DATABASE!!! // WRITING TO DATABASE!!! // WRITING TO DATABASE!!!
//INS 1st ARRAY
$qs = ', ';
$qq_values = $last_cid . $qs . '\'' . $my_category['image'] . '\''. $qs . $my_category['parent_id'] . $qs . $my_category['top'] . $qs . $my_category['column'] . $qs . $my_category['sort_order'] . $qs . $my_category['status'] . ', \'' . $my_category['date_added'] . '\', \'' . $my_category['date_modified'] . '\'';
$qq = 'INSERT INTO ' . DB_PREFIX . 'category (`category_id` ,`image` ,`parent_id` ,`top` ,`column` ,`sort_order` ,`status` ,`date_added` ,`date_modified`) VALUES (' . $qq_values . ');';
$query = $this->db->query($qq);
//INS 2nd ARRAY
$li = 0; $qs = ', ';
while ($li < sizeof($my_category_description)) {
$qq_values = $last_cid . $qs . $my_category_description[$li]['language_id'] . ', \'' . $my_category_description[$li]['name'] . '\', \'' . $my_category_description[$li]['description'] . '\', \'' . $my_category_description[$li]['meta_description'] . '\', \'' . $my_category_description[$li]['meta_keyword'] . '\', \'' . $my_category_description[$li]['meta_title'] . '\', \'' . $my_category_description[$li]['meta_h1'] . '\'';
$qq = 'INSERT INTO ' . DB_PREFIX . 'category_description VALUES (' . $qq_values . ');';
$query = $this->db->query($qq);
$li++;
}
//INS 3rd ARRAY
$qq = 'INSERT INTO ' . DB_PREFIX . 'category_to_store VALUES (' . $last_cid . ', ' . $my_category_to_store['store_id'] . ');';
$query = $this->db->query($qq);
// WRITING COMPLETED!!! // WRITING COMPLETED!!! // WRITING COMPLETED!!!
}
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
Далее, в этом же файле перед:
$data['add'] = $this->url->link('catalog/category/add', 'token=' . $this->session->data['token'] . $url, 'SSL');
вставляем:
$data['copy'] = $this->url->link('catalog/category/my_copy', 'token=' . $this->session->data['token'], 'SSL');
Теперь переходим к файлу:
/admin/view/template/catalog/category_list.tpl
В нём, в самом начале после:
<div class="page-header">
<div class="container-fluid">
<div class="pull-right">
Вставляем:
<a onclick="$('#form-category').attr('action', '<?php echo $copy; ?>'); $('#form-category').submit();" class="btn btn-warning"><?php echo 'Copy Category'; ?></a>
Класс кнопки может быть вместо btn-warning следующим:
btn-default (белая)
btn-primary (синяя)
btn-success (зелёная)
btn-info (голубая)
btn-warning (желтая)
btn-danger (красная)
btn-link (в виде ссылки)
Вот, собственно, и всё. Ещё раз - делайте бэкапы!
May the Force be with you!
P.S. Также поступило предложение заморочиться, чтобы копировалась не только сама категория, но и рекрсивно все подкатегории. Что ж, как будет время реализую)
P.P.S. Весь мусорный отладочный выврд убрал, код работает чисто.