Merhaba, aşağıdaki kod bloklarından products.php dosyasını containeradmin yolunu takip ederek güncelleyebilirsiniz
{if $sonuc}
{$sonuc|escape}
{/if}
{include file='admin/partials/filter-funnel-icon.tpl'}
{'Filters'|adminT}
{'Search...'|adminT}
{'Search'|adminT}
{'Category'|adminT}
{'All categories'|adminT}
{foreach $categoryOptions as $cat}
{if isset($cat.depth) && $cat.depth > 0}{for $i=1 to $cat.depth}—{/for} {/if}{$cat.categoryname|escape}
{/foreach}
{'Brand'|adminT}
{'All brands'|adminT}
{foreach $brandOptions as $b}
{$b.brandname|escape}
{/foreach}
{'Supplier'|adminT}
{'All suppliers'|adminT}
{foreach $supplierOptions as $s}
{$s.suppliername|escape}
{/foreach}
{'Status'|adminT}
{'All statuses'|adminT}
{'Active'|adminT}
{'Inactive'|adminT}
{'Filter'|adminT}
{'Clear'|adminT}
{'New Product'|adminT}
0 {'selected'|adminT}
{'Active'|adminT}
{'Deactive'|adminT}
{'Delete'|adminT}
{'ID'|adminT}
{'Product'|adminT}
{'Category'|adminT}
{'Brand'|adminT}
{'Supplier'|adminT}
{'Price'|adminT}
{'Stock'|adminT}
{'Status'|adminT}
{if $products|@count}
{foreach $products as $row}
{$row.idproduct}
{$row.productname|escape|truncate:40}{if $row.producttype|default:'physical' == 'virtual'} {'Virtual'|adminT}{/if}
{$row.categoryname|escape}
{$row.brandname|escape}
{if $row.suppliername|default:'' != ''}{$row.suppliername|escape}{else}—{/if}
{$row.priceformatted}
{$row.stockformatted|default:$row.stock}
{$row.active_label|escape}
{/foreach}
{else}
{'No records found.'|adminT}
{/if}
{include file='admin/plugin/pagination.tpl'}
(function () {
'use strict';
var selectAll = document.getElementById('productsSelectAll');
var bulkForm = document.getElementById('productsBulkForm');
var countEl = document.getElementById('productsBulkCount');
function getBoxes() {
return document.querySelectorAll('.js-product-select');
}
function updateBulkBar() {
var checked = document.querySelectorAll('.js-product-select:checked');
var total = getBoxes().length;
var selected = checked.length;
if (bulkForm) {
bulkForm.hidden = selected === 0;
}
if (countEl) {
countEl.textContent = selected + ' ürün seçildi';
}
if (!selectAll) {
return;
}
selectAll.checked = total > 0 && selected === total;
selectAll.indeterminate = selected > 0 && selected < total;
}
if (selectAll) {
selectAll.addEventListener('change', function () {
getBoxes().forEach(function (box) {
box.checked = selectAll.checked;
});
updateBulkBar();
});
}
document.addEventListener('change', function (event) {
if (event.target && event.target.classList.contains('js-product-select')) {
updateBulkBar();
}
});
document.querySelectorAll('.js-bulk-product-submit').forEach(function (btn) {
btn.addEventListener('click', function (event) {
if (document.querySelectorAll('.js-product-select:checked').length === 0) {
event.preventDefault();
event.stopPropagation();
if (window.AdminToast) {
AdminToast.show('{'Select at least one product'|adminT|escape:'javascript'}', 'warning');
}
}
});
});
})();
<?php
if (!defined('IN_ADMIN')) {
exit;
}
$sonuc = '';
$sonucType = 'success';
if (Tools::isSubmit('deleteProduct'))
{
$formToken = md5(Tools::getValue('deleteProduct'));
if (md5($adminToken) == $formToken)
{
$idProduct = (int)Tools::getValue('idProduct');
$isHave = DB::getRow('products', 'id_product = '.(int)$idProduct.'', 'product_name');
if ($isHave)
{
DB::execute('DELETE FROM products WHERE id_product = '.(int)$idProduct.' LIMIT 1');
$sonuc = $isHave.' ürünü başarıyla silindi';
}
}
}
if (Tools::isSubmit('duplicateProduct'))
{
$formToken = md5(Tools::getValue('duplicateProduct'));
if (md5($adminToken) == $formToken)
{
$idProduct = (int)Tools::getValue('idProduct');
$isHave = DB::getRow('products', 'id_product = ' . (int)$idProduct, 'product_name');
if ($isHave)
{
$suffix = time();
$sql = "INSERT INTO products (
id_category, id_brand, id_supplier, product_name, short_description,
meta_title, meta_description, description, product_link, price,
pack_price_override, cost, doviz, doviz_price, doviz_old_price,
doviz_cost, old_price, vat, active, stock, sale_unit,
sale_qty_min, sale_qty_step, cargo_day, label, product_video,
stock_code, barcode, desi, product_type, virtual_kind,
virtual_file, virtual_file_name, virtual_text
)
SELECT
id_category, id_brand, id_supplier,
CONCAT(product_name, ' (Kopya)'),
short_description, meta_title, meta_description, description,
CONCAT(product_link, '-kopya-{$suffix}'),
price, pack_price_override, cost, doviz, doviz_price,
doviz_old_price, doviz_cost, old_price, vat, active, stock,
sale_unit, sale_qty_min, sale_qty_step, cargo_day, label,
product_video,
CONCAT(stock_code, '-{$suffix}'),
barcode, desi, product_type, virtual_kind,
virtual_file, virtual_file_name, virtual_text
FROM products
WHERE id_product = " . (int)$idProduct;
$result = DB::execute($sql);
if ($result) {
$sonuc = 'Ürün başarıyla kopyalandı.';
$sonucType = 'success';
} else {
$sonuc = 'Ürün kopyalanırken bir hata oluştu.';
$sonucType = 'danger';
}
} else {
$sonuc = 'Kopyalanacak ürün bulunamadı.';
$sonucType = 'danger';
}
}
}
if (Tools::isSubmit('bulkProductAction'))
{
$formToken = md5(Tools::getValue('bulkProductToken'));
if (md5($adminToken) === $formToken)
{
$action = trim((string) Tools::getValue('bulkProductAction'));
$productIds = Tools::getValue('productIds');
$ids = is_array($productIds) ? $productIds : [];
if ($action === 'activate') {
$result = Product::bulkSetActive($ids, 1);
} elseif ($action === 'deactivate') {
$result = Product::bulkSetActive($ids, 0);
} elseif ($action === 'delete') {
$result = Product::bulkDelete($ids);
} else {
$result = ['success' => false, 'message' => 'Geçersiz toplu işlem'];
}
$sonuc = (string) ($result['message'] ?? '');
$sonucType = !empty($result['success']) ? 'success' : 'danger';
}
}
$currentPage = max(1, (int) Tools::getValue('page'));
$query = trim((string) Tools::getValue('q'));
$idCategory = (int) Tools::getValue('category');
$idBrand = (int) Tools::getValue('brand');
$idSupplier = (int) Tools::getValue('supplier');
$activeRaw = Tools::getValue('active', -1);
$activeFilter = ($activeRaw === '' || $activeRaw === false || $activeRaw === null)
? -1
: (int) $activeRaw;
$perPage = 30;
$total = Product::countAdmin($query, $idCategory, $idBrand, $activeFilter, $idSupplier);
$queryParams = array_filter([
'q' => $query,
'category' => $idCategory > 0 ? $idCategory : null,
'brand' => $idBrand > 0 ? $idBrand : null,
'supplier' => $idSupplier > 0 ? $idSupplier : null,
'active' => $activeFilter >= 0 ? $activeFilter : null,
], static fn($v) => $v !== null && $v !== '');
$pagination = Pagination::build($total, $currentPage, $perPage, Admin::url('products'), $queryParams);
$products = Product::getAdminList($query, $idCategory, $idBrand, $activeFilter, $perPage, $pagination['offset'], $idSupplier);
$flash = class_exists('ExportExcelService', false) ? ExportExcelService::consumeFlash() : null;
if ($flash && $flash['message'] !== '') {
$sonuc = $flash['message'];
$sonucType = $flash['type'] === 'danger' ? 'danger' : 'success';
}
$smarty->assign([
'products' => $products,
'pagination' => $pagination,
'searchQuery' => $query,
'categoryFilter' => $idCategory,
'brandFilter' => $idBrand,
'supplierFilter' => $idSupplier,
'activeFilter' => $activeFilter,
'categoryOptions' => Category::getProductSelectOptions(),
'brandOptions' => Brand::getOptions(),
'supplierOptions' => Supplier::getOptions(),
'sonuc' => $sonuc,
'sonucType' => $sonucType,
]);
AdminPage::add('products', 'Products');
aşağıdaki kod bloğunu templatesadmin yolunda products.tpl dosyasını değiştirerek ürün kopyalama için gerekn html kodu ile ekli görünecektir.php{if $sonuc}
{$sonuc|escape}
{/if}
{include file='admin/partials/filter-funnel-icon.tpl'}
{'Filters'|adminT}
{'Search...'|adminT}
{'Search'|adminT}
{'Category'|adminT}
{'All categories'|adminT}
{foreach $categoryOptions as $cat}
{if isset($cat.depth) && $cat.depth > 0}{for $i=1 to $cat.depth}—{/for} {/if}{$cat.categoryname|escape}
{/foreach}
{'Brand'|adminT}
{'All brands'|adminT}
{foreach $brandOptions as $b}
{$b.brandname|escape}
{/foreach}
{'Supplier'|adminT}
{'All suppliers'|adminT}
{foreach $supplierOptions as $s}
{$s.suppliername|escape}
{/foreach}
{'Status'|adminT}
{'All statuses'|adminT}
{'Active'|adminT}
{'Inactive'|adminT}
{'Filter'|adminT}
{'Clear'|adminT}
{'New Product'|adminT}
0 {'selected'|adminT}
{'Active'|adminT}
{'Deactive'|adminT}
{'Delete'|adminT}
{'ID'|adminT}
{'Product'|adminT}
{'Category'|adminT}
{'Brand'|adminT}
{'Supplier'|adminT}
{'Price'|adminT}
{'Stock'|adminT}
{'Status'|adminT}
{if $products|@count}
{foreach $products as $row}
{$row.idproduct}
{$row.productname|escape|truncate:40}{if $row.producttype|default:'physical' == 'virtual'} {'Virtual'|adminT}{/if}
{$row.categoryname|escape}
{$row.brandname|escape}
{if $row.suppliername|default:'' != ''}{$row.suppliername|escape}{else}—{/if}
{$row.priceformatted}
{$row.stockformatted|default:$row.stock}
{$row.active_label|escape}
{/foreach}
{else}
{'No records found.'|adminT}
{/if}
{include file='admin/plugin/pagination.tpl'}
(function () {
'use strict';
var selectAll = document.getElementById('productsSelectAll');
var bulkForm = document.getElementById('productsBulkForm');
var countEl = document.getElementById('productsBulkCount');
function getBoxes() {
return document.querySelectorAll('.js-product-select');
}
function updateBulkBar() {
var checked = document.querySelectorAll('.js-product-select:checked');
var total = getBoxes().length;
var selected = checked.length;
if (bulkForm) {
bulkForm.hidden = selected === 0;
}
if (countEl) {
countEl.textContent = selected + ' ürün seçildi';
}
if (!selectAll) {
return;
}
selectAll.checked = total > 0 && selected === total;
selectAll.indeterminate = selected > 0 && selected < total;
}
if (selectAll) {
selectAll.addEventListener('change', function () {
getBoxes().forEach(function (box) {
box.checked = selectAll.checked;
});
updateBulkBar();
});
}
document.addEventListener('change', function (event) {
if (event.target && event.target.classList.contains('js-product-select')) {
updateBulkBar();
}
});
document.querySelectorAll('.js-bulk-product-submit').forEach(function (btn) {
btn.addEventListener('click', function (event) {
if (document.querySelectorAll('.js-product-select:checked').length === 0) {
event.preventDefault();
event.stopPropagation();
if (window.AdminToast) {
AdminToast.show('{'Select at least one product'|adminT|escape:'javascript'}', 'warning');
}
}
});
});
})();

