в модели product нужен метод, который принимает sku как параметр, делает запрос COUNT к таблице oc_product и возвращает либо количество, либо сразу true/false в контроллере в методе validateForm вписываем вызов этого метода и если такой sku найден, то пишем ошибку в $this->error текст ошибки закидываем в языковой файл. ну общий алгоритм примерно такой
Код: <?xml version="1.0" encoding="utf-8"?> <modification> <name>UNIK SKU</name> <code>UNIK SKU</code> <version>1.0</version> <author>Tom</author> <link>UNIK SKU</link> <file path="admin/model/catalog/product.php"> <operation> <search><![CDATA[public function getProduct($product_id) {]]></search> <add position="before"><![CDATA[ public function getTotalProductsBySku($sku, $product_id = 0) { if ($product_id) { $query = $this->db->query("SELECT * FROM " . DB_PREFIX . "product WHERE LOWER(sku) = '" . $this->db->escape(utf8_strtolower($sku)) . "' AND product_id != '" . (int)$product_id . "'"); } else { $query = $this->db->query("SELECT * FROM " . DB_PREFIX . "product WHERE LOWER(sku) = '" . $this->db->escape(utf8_strtolower($sku)) . "'"); } return $query->row; } ]]></add> </operation> </file> <file path="admin/controller/catalog/product.php"> <operation> <search><![CDATA[$data['error_keyword'] = '';]]></search> <add position="after" offset="1"><![CDATA[ if (isset($this->error['sku'])) { $data['error_sku'] = $this->error['sku']; } else { $data['error_sku'] = ''; }]]></add> </operation> <operation> <search><![CDATA[$this->error['model'] = $this->language->get('error_model');]]></search> <add position="after" offset="1"><![CDATA[ $this->load->model('catalog/product'); if ($this->request->post['sku']) { if (isset($this->request->get['product_id'])) { if ($this->model_catalog_product->getTotalProductsBySku($this->request->post['sku'], $this->request->get['product_id'])) { $this->error['sku'] = $this->language->get('error_sku'); } } else { if ($this->model_catalog_product->getTotalProductsBySku($this->request->post['sku'])) { $this->error['sku'] = $this->language->get('error_sku'); } } }]]></add> </operation> </file> <file path="admin/view/template/catalog/product_form.twig"> <operation> <search><![CDATA[<input type="text" name="sku" value="{{ sku }}" placeholder="{{ entry_sku }}" id="input-sku" class="form-control"/>]]></search> <add position="after"><![CDATA[{% if error_sku %}<div class="text-danger">{{ error_sku }}</div>{% endif %}]]></add> </operation> </file> <file path="admin/language/ru-ru/catalog/product.php"> <operation> <search><![CDATA[// Text]]></search> <add position="after"><![CDATA[$_['error_sku'] = 'Артикул должен быть уникален, данный артикул уже присутсвует в другом товаре!';]]></add> </operation> </file> </modification>
Код: <?xml version="1.0" encoding="utf-8"?> <modification> <name>UNIK SKU SIMPLE</name> <code>UNIK SKU SIMPLE</code> <version>1.0</version> <author>Tom</author> <link>UNIK SKU SIMPLE</link> <file path="admin/controller/catalog/product.php"> <operation> <search><![CDATA[if ((utf8_strlen($this->request->post['model']) < 1) || (utf8_strlen($this->request->post['model']) > 64)) {]]></search> <add position="before"><![CDATA[ if (!empty($this->request->post['sku'])) { $query = $this->db->query("SELECT COUNT(*) AS total FROM " . DB_PREFIX . "product WHERE sku LIKE '" . $this->db->escape($this->request->post['sku']) . "'" . (isset($this->request->get['product_id']) ? " AND product_id != '" . (int)$this->request->get['product_id'] . "'" : "")); if ($query->row['total'] > 0) $this->error['sku'] = $this->language->get('error_sku'); } ]]></add> </operation> </file> <file path="admin/controller/catalog/product.php"> <operation> <search><![CDATA[$data['error_keyword'] = '';]]></search> <add position="after" offset="1"><![CDATA[ if (isset($this->error['sku'])) { $data['error_sku'] = $this->error['sku']; } else { $data['error_sku'] = ''; } ]]></add> </operation> </file> <file path="admin/view/template/catalog/product_form.twig"> <operation> <search><![CDATA[<input type="text" name="sku" value="{{ sku }}" placeholder="{{ entry_sku }}" id="input-sku" class="form-control"/>]]></search> <add position="after"><![CDATA[{% if error_sku %}<div class="text-danger">{{ error_sku }}</div>{% endif %}]]></add> </operation> </file> <file path="admin/language/ru-ru/catalog/product.php"> <operation> <search><![CDATA[// Text]]></search> <add position="after"><![CDATA[$_['error_sku'] = 'Артикул должен быть уникален, данный артикул уже присутсвует в другом товаре!';]]></add> </operation> </file> </modification>