Редактирование товара с витрины для (opencart 2.3.0.2)

 

Здравствуйте, потребовался одному из клиентов плагин для быстрого редактирования товара с пользователmcкой части сайта. Сделали и решили поделиться со всеми нуждающимися. Плагин проверяли на версии opencart 2.3.0.2, но думается, что подойдет и для более поздних версий 2.0 и выше.

 

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

Мы не стали делать установочник для данного плагина, это занимает большое кол-во времени, которого у нас совсем нет, для установки Вам потребуется потратить немного времени. 

Скачать плагин

 

 

 

 

Инструкця:

ВАЖНО!!! Перед тем, как сделать изменения, делаем бекап всего сайта (файлов и базы данных).

 

1) Находим файл /catalog/view/theme/default/template/product/product.tpl

    В него, после строки

<?php echo $header;?>

   

вставляем код. 

<!--Форма редактироования-->
<script src="/catalog/view/javascript/common1.js" type="text/javascript"></script> 
<?php if ($ids == 1) {?>
<div class="modal fade bs-example-modal-lg" tabindex="-1" role="dialog" aria-labelledby="myLargeModalLabel" aria-hidden="true">
<div class="modal-dialog modal-lg">
<div class="modal-content" style=" overflow: auto;max-height: 900px;">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button>
<h4 class="modal-title" style="font-size: 18px;">Редактирование товара</h4>
</div>


<div class="modal-body">
<form action="" method="post"> 
<table class="table table-bordered table-striped">

<tbody>
<tr>
<td style="width: 150px;">Название товара</td>
<td><input name="id" type="hidden" value="<?php echo $product_id; ?>"><input name="title" type="input" class="form-control" value="<?php echo $heading_title; ?>"> </td>

</tr>
<tr>
<td>Описание товара</td>
<td><textarea name="product_description" id="input-description<?php echo $language['language_id']; ?>" class="form-control summernote"><?php echo $description; ?></textarea></td>

</tr>

<tr>
<td style="width: 150px;">Цена</td>
<td><input name="price"class="form-control" style="max-width: 200px;" type="input" value="<?php echo preg_replace('/[^0-9.]/', '', $price); ?>"></td>

</tr>
<tr>
<td style="width: 150px;">Количество на складе</td>
<td><input name="stock" class="form-control" style="max-width: 200px;" type="input" value="<?php echo str_replace("Pre-Order","0",$stock); ?>"></td>

</tr>




</tr>
<tr>
<td style="width: 150px;">Дополнительные параметры</td>
<td>
<div class="panel panel-default">
<div class="panel-heading">
<h4 class="panel-title">
<a data-toggle="collapse" data-parent="#accordion" href="#collapseOne">
Развернуть
</a>
</h4>
</div>
<div id="collapseOne" class="panel-collapse collapse">
<div class="panel-body">
<div style="width: 100%; display: table; margin-bottom: 20px;">
<a href="/" id="thumb-image" data-toggle="image" class="img-thumbnail"><img style="width: 100px; height: 100px;" src="/<?php if ($thumb) {echo $thumb;} else { echo '/image/cache/no_image-100x100.png';} ?>" alt="" title="" data-placeholder="/image/cache/no_image-100x100.png" /></a>
<input type="hidden" name="imagess" value="<?php echo $thumb_orig; ?>" id="input-image" />
</div>
<table id="images" class="table table-striped table-bordered table-hover">
<thead>
<tr>
<td class="text-left">Дополнительные изображения</td>
<td></td>
</tr>
</thead>
<tbody>
<?php $image_row = 0; ?>
<?php foreach ($images as $image) { ?>

<tr id="image-row<?php echo $image_row; ?>">
<td class="text-left"><a href="/" id="thumb-image<?php echo $image_row; ?>" data-toggle="image" class="img-thumbnail"><img src="/<?php if ($image['thumb']) {echo$image['thumb'];} ?>" title="<?php echo $heading_title; ?>" alt="<?php echo $heading_title; ?>" /></a><input type="hidden" name="product_image[<?php echo $image_row; ?>][image]" value="<?php echo $image['thumb_orig']; ?>" id="input-image<?php echo $image_row; ?>" /></td>
<td class="text-left"><button type="button" onclick="$('#image-row<?php echo $image_row; ?>').remove();" data-toggle="tooltip" title="" class="btn btn-danger"><i class="fa fa-minus-circle"></i></button></td>
</tr>
<?php $image_row++; ?>
<?php } ?>
</tbody>
<tfoot>
<tr>
<td></td>
<td class="text-left"><button type="button" onclick="addImage();" class="btn btn-primary"><i class="fa fa-plus-circle"></i></button></td>
</tr>
</tfoot>
</table>


<script type="text/javascript"><!--
var image_row = <?php echo $image_row; ?>;

function addImage() {
html = '<tr id="image-row' + image_row + '">';
html += ' <td class="text-left"><a href="/" id="thumb-image' + image_row + '"data-toggle="image" class="img-thumbnail"><img src="/<?php echo $placeholder; ?>" alt="" title="" data-placeholder="<?php echo $thumb_orig; ?>" /><input type="hidden" name="product_image[' + image_row + '][image]" value="<?php echo $image['thumb_orig']; ?>" id="input-image' + image_row + '" /></td>';
html += ' <td class="text-left"><button type="button" onclick="$(\'#image-row' + image_row + '\').remove();" data-toggle="tooltip" title="<?php echo $button_remove; ?>" class="btn btn-danger"><i class="fa fa-minus-circle"></i></button></td>';
html += '</tr>';

$('#images tbody').append(html);

image_row++;
}
//--></script> 
<table>
<tbody>
<tr>
<td style="width: 150px;">Артикул</td>
<td><input name="skus" class="form-control" style="max-width: 200px;" type="input" value="<?php echo $sku;?>"></td>
</tr>

<tr>
<td style="width: 150px;">Вес</td>
<td><input name="weight" class="form-control" style="max-width: 200px;" type="input" value="<?php echo $weight;?>"></td>
</tr>
<tr>
<td style="width: 150px;">Отключить товар</td>
<td><input type="checkbox" name="status" value="0"></td>
</tr>
</tbody>
</table>
</div> 
</div> 
</div>


</div>

</td>

</tr> 
<tr>
<td>Сохранить</td>
<td><button type="submit" name="submit_go" class="btn btn-primary" ><i class="fa fa-save"></i></button></td>

</tr>
</tbody>
</table>


</form>
</div>
</div>
</div>
</div>


<script type="text/javascript" src="/admin/view/javascript/summernote/summernote.js"></script>
<link href="/admin/view/javascript/summernote/summernote.css" rel="stylesheet" />
<script type="text/javascript" src="/admin/view/javascript/summernote/opencart.js"></script>
<script type="text/javascript"><!--
// Manufacturer
$('input[name=\'manufacturer\']').autocomplete({
'source': function(request, response) {
$.ajax({
url: 'index.php?route=catalog/manufacturer/autocomplete&token=<?php echo $token; ?>&filter_name=' + encodeURIComponent(request),
dataType: 'json',
success: function(json) {
json.unshift({
manufacturer_id: 0,
name: '<?php echo $text_none; ?>'
});

response($.map(json, function(item) {
return {
label: item['name'],
value: item['manufacturer_id']
}
}));
}
});
},
'select': function(item) {
$('input[name=\'manufacturer\']').val(item['label']);
$('input[name=\'manufacturer_id\']').val(item['value']);
}
});

// Category
$('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();
});

// Filter
$('input[name=\'filter\']').autocomplete({
'source': function(request, response) {
$.ajax({
url: 'index.php?route=catalog/filter/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['filter_id']
}
}));
}
});
},
'select': function(item) {
$('input[name=\'filter\']').val('');

$('#product-filter' + item['value']).remove();

$('#product-filter').append('<div id="product-filter' + item['value'] + '"><i class="fa fa-minus-circle"></i> ' + item['label'] + '<input type="hidden" name="product_filter[]" value="' + item['value'] + '" /></div>');
}
});

$('#product-filter').delegate('.fa-minus-circle', 'click', function() {
$(this).parent().remove();
});

// Downloads
$('input[name=\'download\']').autocomplete({
'source': function(request, response) {
$.ajax({
url: 'index.php?route=catalog/download/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['download_id']
}
}));
}
});
},
'select': function(item) {
$('input[name=\'download\']').val('');

$('#product-download' + item['value']).remove();

$('#product-download').append('<div id="product-download' + item['value'] + '"><i class="fa fa-minus-circle"></i> ' + item['label'] + '<input type="hidden" name="product_download[]" value="' + item['value'] + '" /></div>');
}
});

$('#product-download').delegate('.fa-minus-circle', 'click', function() {
$(this).parent().remove();
});

// Related
$('input[name=\'related\']').autocomplete({
'source': function(request, response) {
$.ajax({
url: 'index.php?route=catalog/product/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['product_id']
}
}));
}
});
},
'select': function(item) {
$('input[name=\'related\']').val('');

$('#product-related' + item['value']).remove();

$('#product-related').append('<div id="product-related' + item['value'] + '"><i class="fa fa-minus-circle"></i> ' + item['label'] + '<input type="hidden" name="product_related[]" value="' + item['value'] + '" /></div>');
}
});

$('#product-related').delegate('.fa-minus-circle', 'click', function() {
$(this).parent().remove();
});
//--></script>
<?php } ?>


2) в этом же файле находим данные строки

<ul class="breadcrumb">
<?php foreach ($breadcrumbs as $breadcrumb) { ?>
<li><a href="/<?php echo $breadcrumb['href']; ?>"><?php echo $breadcrumb['text']; ?></a></li>
<?php } ?>
</ul>

 

И меняем на

<ul class="breadcrumb">
<?php foreach ($breadcrumbs as $breadcrumb) { ?>
<li><a href="/<?php echo $breadcrumb['href']; ?>"><?php echo $breadcrumb['text']; ?></a></li>
<?php } ?>
<!--Кнопка открытие окна редактирования товара--><?php if ($ids == 1) {?><button style="float: right; margin-top: -5px;margin-right: 5px; padding: 5px 10px; background: #e21616;border: 1px solid #e21616;" class="btn btn-primary" data-toggle="modal" data-target=".bs-example-modal-lg"><i class="fa fa-pencil"></i></button> <?php } ?> 
</ul>
<!--Оповещение об удачном изменении данных--> <?php echo $ok_save; ?>

 

 


3) Далее редактируем файл /catalog/view/theme/default/template/common/footer.tpl

   В самый низ, перед закрывающимся тегом </body> вставляем данный скрипт

<?php if ($ids == 1) {?>
<!-- Theme created by Welford Media for OpenCart 2.0 www.welfordmedia.co.uk -->
<!--Модуль редактировуание с фронтальной части-->

<script>
$(".product-thumb a").attr("href", function(i, origValue){
return origValue + "&token=<?php echo $token?>"; 
});

</script>
<?php }?>

 

 

4) 

Открываем файл /catalog/controller/product/product.php , находим в нем строку

$data['text_discount'] = $this->language->get('text_discount');

 

и после нее вставляем данный код

if ($data['ids'] == 1) { 
//Редактирование товара 
if (isset($_POST['submit_go'])) {
$product_description_POST = $_POST['product_description'];
$product_id_post = $_POST['id'];
$product_title_post = $_POST['title'];
$product_price_post = $_POST['price'];
$product_stock_post = $_POST['stock'];
$product_image_post = $_POST['imagess'];
$product_sku_post = $_POST['skus'];
$product_weight_post = $_POST['weight'];
if (isset($_POST['status'])) {$product_status_post = $_POST['status'];}else{$product_status_post = '1';}
$this->db->query("UPDATE " . DB_PREFIX . "product_description SET description = '$product_description_POST' , name = '$product_title_post' WHERE " . DB_PREFIX . "product_description . product_id = '$product_id_post'");
$this->db->query("UPDATE " . DB_PREFIX . "product SET price = '$product_price_post', status = '$product_status_post', quantity = '$product_stock_post', weight = '$product_weight_post', image = '$product_image_post', sku = '$product_sku_post' WHERE " . DB_PREFIX . "product. product_id = '$product_id_post'");

$this->db->query(" DELETE FROM " . DB_PREFIX . "product_image WHERE `product_id` = '".$product_id_post."' ");
if (isset($_POST['product_image'])) {

$_POST['product_image'] = $_POST['product_image'];
} else {
$_POST['product_image'] = false; 
}
//сделал кустарно без цикла, потому что нет времени изучать тонкости opencart.

if (isset($_POST['product_image']['0']['image'])) {$this->db->query("INSERT INTO " . DB_PREFIX . "product_image (product_id, image, sort_order) VALUES ('".$product_id_post."', '".$_POST['product_image']['0']['image']."', 0)");}
if (isset($_POST['product_image']['1']['image'])) {$this->db->query("INSERT INTO " . DB_PREFIX . "product_image (product_id, image, sort_order) VALUES ('".$product_id_post."', '".$_POST['product_image']['1']['image']."', 0)");}
if (isset($_POST['product_image']['2']['image'])) {$this->db->query("INSERT INTO " . DB_PREFIX . "product_image (product_id, image, sort_order) VALUES ('".$product_id_post."', '".$_POST['product_image']['2']['image']."', 0)");}
if (isset($_POST['product_image']['3']['image'])) {$this->db->query("INSERT INTO " . DB_PREFIX . "product_image (product_id, image, sort_order) VALUES ('".$product_id_post."', '".$_POST['product_image']['3']['image']."', 0)");}
if (isset($_POST['product_image']['4']['image'])) {$this->db->query("INSERT INTO " . DB_PREFIX . "product_image (product_id, image, sort_order) VALUES ('".$product_id_post."', '".$_POST['product_image']['4']['image']."', 0)");}
if (isset($_POST['product_image']['5']['image'])) {$this->db->query("INSERT INTO " . DB_PREFIX . "product_image (product_id, image, sort_order) VALUES ('".$product_id_post."', '".$_POST['product_image']['5']['image']."', 0)");}
if (isset($_POST['product_image']['6']['image'])) {$this->db->query("INSERT INTO " . DB_PREFIX . "product_image (product_id, image, sort_order) VALUES ('".$product_id_post."', '".$_POST['product_image']['6']['image']."', 0)");}
if (isset($_POST['product_image']['7']['image'])) {$this->db->query("INSERT INTO " . DB_PREFIX . "product_image (product_id, image, sort_order) VALUES ('".$product_id_post."', '".$_POST['product_image']['7']['image']."', 0)");}
if (isset($_POST['product_image']['8']['image'])) {$this->db->query("INSERT INTO " . DB_PREFIX . "product_image (product_id, image, sort_order) VALUES ('".$product_id_post."', '".$_POST['product_image']['8']['image']."', 0)");}
if (isset($_POST['product_image']['9']['image'])) {$this->db->query("INSERT INTO " . DB_PREFIX . "product_image (product_id, image, sort_order) VALUES ('".$product_id_post."', '".$_POST['product_image']['9']['image']."', 0)");}
}
}
$data['placeholder'] = '/image/cache/no_image-100x100.png'; 
if (isset($_POST['submit_go'])) {
$data['ok_save'] = '<div class="alert alert-success">Данные успешно отредактированы</div>';
} else {
$data['ok_save'] = ''; 


$data['sku'] = $product_info['sku'];
$data['weight'] = $product_info['weight'];
//Обязательный перенос
$data['thumb_orig'] = $product_info['image'];
//

 

5) Далее в этом же файле находим

$data['images'][] = array(
'popup' => $this->model_tool_image->resize($result['image'], $this->config->get($this->config->get('config_theme') . '_image_popup_width'), $this->config->get($this->config->get('config_theme') . '_image_popup_height')),
'thumb' => $this->model_tool_image->resize($result['image'], $this->config->get($this->config->get('config_theme') . '_image_additional_width'), $this->config->get($this->config->get('config_theme') . '_image_additional_height')),

);

 

меняем на это

$data['images'][] = array(
'popup' => $this->model_tool_image->resize($result['image'], $this->config->get($this->config->get('config_theme') . '_image_popup_width'), $this->config->get($this->config->get('config_theme') . '_image_popup_height')),
'thumb' => $this->model_tool_image->resize($result['image'], $this->config->get($this->config->get('config_theme') . '_image_additional_width'), $this->config->get($this->config->get('config_theme') . '_image_additional_height')),
'thumb_orig' => $result['image']
);

 

6) Файл common1.js из архива загружаем в /catalog/view/javascript

7) меняем файл /admin/view/template/common/filemanager.tpl  на тот, что находится в архиве

8) вставляем в файл /catalog/controller/common/footer.php
после строки

$data['newsletter'] = $this->url->link('account/newsletter', '', true);

 

Вставляем  это

if (isset($this->session->data['token'])) { 
$data['token'] = $this->session->data['token'];
}
if (isset($this->session->data['user_id'])) { 
$data['ids'] = $this->session->data['user_id'];
$data['token'] = $this->session->data['token'];

} else {
$data['ids'] = false; 
}

 

Если возникнут проблемы, пишите в комментариях

Добавить комментарий


Защитный код
Обновить