Помогите разобраться с проблемой. При создании товара opencart 2.2 не заполняет поле Артикул(SKU) оставляя его пустым. Я захотел сделать автоматическое заполнение этого поля как при создании нового товара так и при копирование. После поисков в инете использовал такой способ Заполнение при создании товара admin/controller/catalog/product.php находим if(isset($this->request->post['sku'])){ $this->data['sku']= $this->request->post['sku']; } elseif (!empty($product_info)){ $this->data['sku']= $product_info['sku']; }else{ $this->data['sku']=''; } делаем if(isset($this->request->post['sku'])){ $this->data['sku']= $this->request->post['sku']; } elseif (!empty($product_info)){ $this->data['sku']= $product_info['sku']; }else{ $sku_auto = $this->db->query("SELECT MAX(sku) as sku FROM ". DB_PREFIX ."product"); $this->data['sku']= $sku_auto->row['sku']+1; } Для того чтобы артикул генерировался при копировании admin/model/catalog/product.php ищем publicfunction copyProduct($product_id) куданить тут if($query->num_rows){ $data = array(); $data = $query->row; $data['keyword']=''; добавим $sku_auto = $this->db->query("SELECT MAX(sku) as sku FROM ". DB_PREFIX ."product"); $data['sku']= $sku_auto->row['sku']+1; В итоге при отработки данного изменение в админке я вижу ошибку Notice: Indirect modification of overloaded property ControllerCatalogProduct::$data has no effect in /admin/controller/catalog/product.php on line 753 генерация Артикула не происходит :-(
Не трогайте контроллер. Вам нужно в моделе делать update. Вот как у меня устроено PHP: $this->db->query("UPDATE " . DB_PREFIX . "product SET sku = LPAD(product_id,4,'0000') WHERE product_id = ' " . (int)$product_id . " ' " ); т.е данный запрос формирует sku вида id товара с постоянным кол-м цифр. Т.е если id = 12 то sku будет 0012
\admin\model\catalog\product.php в начале кода, сразу после PHP: $product_id = $this->db->getLastId();
Есть грубый мод, дорабатывать нет времени. Задаёт товарам при редактировании и создании артикул вида id производителя 00 + id товара 0000. А недоработки в следующем: Во время редактирования поле артикула пустое, это нормально, артикул заполниться после сохранения. Нет возможности задать артикул вручную, после сохранения он всё равно сгенерится по алгоритму. На своё менять вот здесь: Код: CONCAT (LPAD(manufacturer_id,2,'00'), LPAD(product_id,4,'0000'))
Спасибо. Уже решил свою задачу иначе. Видимо нужно было так: меняем sku на model и убираем "обязательность" поля model в админке. Код: $this->db->query("UPDATE " . DB_PREFIX . "product SET model = LPAD(product_id,4,'0000') WHERE product_id = ' " . (int)$product_id . " ' " ); Поправьте, пожалуйста, если не так, чтобы не дезинформировать ищущего решение
Подскажите, как добавить префикс к артикулу Что-то совсем с гуглом сегодня не дружится((( есть конструкция в контроллере Код: if (isset($this->request->post['model'])) { $data['model'] = $this->request->post['model']; } elseif (!empty($product_info)) { $data['model'] = $product_info['model']; } else { $auto_model = $this->db->query("SELECT LPAD( MAX(product_id) + 1, 4, '0000') FROM " . DB_PREFIX . "product"); $data['model'] = $auto_model->row["LPAD( MAX(product_id) + 1, 4, '0000')"]; } Получаю например 0115, как добавить префикс слева? чтобы было abc-0115 ?