Перейти к содержанию
View in the app

A better way to browse. Learn more.

Русскоязычное сообщество Opencart

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Pascha

Разработчик
  • Зарегистрирован

  • Посещение

  1. Для первого раза можно взять любой файл модуля, категории, либо страницы товаров со скидкой. В этой статье будем использовать файлы: /catalog/controller/module/special.php /catalog/view/theme/default/template/module/special.tpl Шаг №1. Вносим коррективы в контроллер - (/catalog/controller/module/special.php) Находим: if ((float)$result['special']) {$special = $this->currency->format($this->tax->calculate($result['special'], $result['tax_class_id'], $this->config->get('config_tax')));} else {$special = false;} И заменяем на: if ((float)$result['special']) {$special = $this->currency->format($this->tax->calculate($result['special'], $result['tax_class_id'], $this->config->get('config_tax')));$skidka = round(100-($result['special']/($result['price']/100)));} else {$skidka = false;$special = false;} После находим: $data['products'][] = array( Под строкой: 'special' => $special, Вставляем: 'skidka' => $skidka, Внимание! Некоторые модули место $result используют $product_info, в таком случае меняем строку: $skidka = round(100-($result['special']/($result['price']/100))); на $skidka = 100-($product_info['special']/($product_info['price']/100)); Шаг №2. Вносим правки в шаблон (/catalog/view/theme/default/template/module/special.tpl) Ищем: <span class="price-old"><?php echo $product['price']; ?></span><span class="price-new"><?php echo $product['special']; ?></span> Добавляем: <span class="procent"><?php echo $product['skidka']; ?>%</span> Как добавить скидку в процентах для карточки товара? Шаг №1. Меняем код в контроллере - (/catalog/controller/product/product.php) Находим: if ((float)$product_info['special']) {$this->data['special'] = $this->currency->format($this->tax->calculate($product_info['special'], $product_info['tax_class_id'], $this->config->get('config_tax')));} else {$this->data['special'] = false;} И заменяем на: if ((float)$product_info['special']) {$this->data['special'] = $this->currency->format($this->tax->calculate($product_info['special'], $product_info['tax_class_id'], $this->config->get('config_tax')));$this->data['skidka'] = round(100-($product_info['special']/($product_info['price']/100)));} else {$this->data['special'] = false;$this->data['skidka'] = false;} Внимание! Для Opencart 2.x меняем строку: $this->data['skidka'] = round(100-($product_info['special']/($product_info['price']/100))); на: $data['skidka'] = 100-($product_info['special']/($product_info['price']/100)); Шаг №2. Редактируем шаблон карточки товара (/catalog/view/theme/default/template/product/product.tpl) Находим: <span class="price-old"><?php echo $product['price']; ?></span><span class="price-new"><?php echo $product['special']; ?></span> И добавляем ниже или выше: <span class="procent"><?php echo $product['skidka']; ?>%</span> После чего Вы можете смело настраивать остальные модули и страницы, которые выводят товар.
  2. У нас стоит задача: вывести в списке товаров или в карточке товара "Куплено N раз". Для этого мы напишем функцию которую пропишем в catalog/model/catalog/product.php public function getCountPurchased($product_id) { $sql = "SELECT SUM(quantity) as qty FROM " . DB_PREFIX . "order_product WHERE product_id='$product_id'"; $query = $this->db->query($sql); $qty = $query->rows; return $qty[0]['qty']; } Теперь нам можно обращаться к этой функции из любого контроллера.
  3. Это делается очень просто, так как уже существует модель, которая возвращает название группы пользователя, то мы обратимся к ней из контроллера и выведем в представлении. Делается это так: 1. Открываем файл catalog/controller/account/account.php и перед строкой: $this->load->language('account/account'); вставляем: $customer_group_id = $this->config->get('config_customer_group_id'); $this->load->model('account/customer_group'); $customer_group_info = $this->model_account_customer_group->getCustomerGroup($customer_group_id); $data['customer_group'] = $customer_group_info['name']; 2. В файле catalog/view/theme/ваша_тема/template/account/account.tpl в нужном месте выводим название группы: <div>Группа: <?php echo $customer_group; ?></div>
  4. Существует ли скрипт, чтобы проверить отправляются ли письма с домена? Конечно существует и не один! Лично я использую этот, пусть не самый навороченный, но в 95% его вполне хватает для того, чтобы выяснить — пашет отправка сообщений через php или нет. $to = "mail@yandex.ru"; // Тут указываем свою почту $subject = "e-mail тест"; // Тема письма // Сообщение $message = "Это тестовое сообщение. Если ты можешь его прочитать, значит все ОК? Конец сообщения."; // Перенос строк $message = wordwrap($message, 70); // возратит TRUE, если письмо успешно передано // почтовой программе например exim if (mail($to, $subject, $message)) { echo("Почта была отправлена … вроде бы"); } else { echo("Увы, но почта не отправлена!"); } Пояснений особо не требуется. Сохраняете код в кодировке UTF-8 без BOM (чтобы иероглифы не вылезали) в php-файл на всякий случай обернув сам код в <?php ?>, меняете в первой строке email на свой собственный, заливаете на сервак и запускаете. Если есть явные проблемы — скрипт сразу сообщит. Если же вы получите сообщение об успешной отправке, но при этом письма не будет даже в СПАМе — значит придется копать глубже и искать причину. Так же вы можете воспользоваться сайтом https://www.mail-tester.com/ для тестирования отправки почты.
  5. По умолчанию CMS не имеет такой возможности и нам потребуется создать SQL запрос для изменения кодировки в нужных полях, данные пример приведен для версии OcStore. Для начала сменим кодировку в файле /system/library/db/mysqli.php, на $this->connection->set_charset("utf8mb4"); Далее мы делаем SQL запрос в базе данных: ALTER TABLE oc_review CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; ALTER TABLE oc_review_article CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; ALTER TABLE oc_article_description CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; ALTER TABLE oc_blog_category_description CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; ALTER TABLE oc_category_description CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; ALTER TABLE oc_information_description CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; ALTER TABLE oc_product_description CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; Проверяем возможность сохранения в тексте и отображение на фронте. Не забываем предварительно сделать бэкап БД и файлов.
  6. Очистка всех данных о товарах в Opencart 3x через запрос в базу данных Важно!!! Перед любым изменением в базе данных, необходимо делать бекап базы данных!!! При создании нового магазина, часто требуется очистить демо товары или ошибочно загруженные товары (атрибуты, опции, категории, производителей). Сделать это все просто, достаточно прописать запрос к базе данных: Очистка всех категорий, товаров, атрибутов, опций и производителей в Opencart 3: TRUNCATE TABLE `oc_category`; TRUNCATE TABLE `oc_category_description`; TRUNCATE TABLE `oc_category_filter`; TRUNCATE TABLE `oc_category_path`; TRUNCATE TABLE `oc_category_to_layout`; TRUNCATE TABLE `oc_category_to_store`; DELETE FROM oc_seo_url WHERE query LIKE 'category_id=%'; TRUNCATE TABLE oc_product; TRUNCATE TABLE oc_product_attribute; TRUNCATE TABLE oc_product_description; TRUNCATE TABLE oc_product_discount; TRUNCATE TABLE oc_product_image; TRUNCATE TABLE oc_product_option; TRUNCATE TABLE oc_product_option_value; TRUNCATE TABLE oc_product_related; TRUNCATE TABLE oc_product_related; TRUNCATE TABLE oc_product_reward; TRUNCATE TABLE oc_product_special; TRUNCATE TABLE oc_product_to_category; TRUNCATE TABLE oc_product_to_download; TRUNCATE TABLE oc_product_to_layout; TRUNCATE TABLE oc_product_to_store; TRUNCATE TABLE oc_review; DELETE FROM oc_seo_url WHERE query LIKE 'product_id=%'; TRUNCATE TABLE oc_attribute; TRUNCATE TABLE oc_attribute_description; TRUNCATE TABLE oc_attribute_group; TRUNCATE TABLE oc_attribute_group_description; TRUNCATE TABLE oc_product_attribute; TRUNCATE TABLE oc_option; TRUNCATE TABLE oc_option_description; TRUNCATE TABLE oc_option_value; TRUNCATE TABLE oc_option_value_description; TRUNCATE TABLE oc_product_option; DELETE FROM oc_seo_url WHERE query LIKE 'manufacturer_id=%'; TRUNCATE TABLE oc_manufacturer; TRUNCATE TABLE oc_manufacturer_description; TRUNCATE TABLE oc_manufacturer_to_store; Как очистить все категории в Opencart 3: TRUNCATE TABLE `oc_category`; TRUNCATE TABLE `oc_category_description`; TRUNCATE TABLE `oc_category_filter`; TRUNCATE TABLE `oc_category_path`; TRUNCATE TABLE `oc_category_to_layout`; TRUNCATE TABLE `oc_category_to_store`; DELETE FROM oc_seo_url WHERE query LIKE 'category_id=%'; Как очистить все товары в Opencart 3: TRUNCATE TABLE oc_product; TRUNCATE TABLE oc_product_attribute; TRUNCATE TABLE oc_product_description; TRUNCATE TABLE oc_product_discount; TRUNCATE TABLE oc_product_image; TRUNCATE TABLE oc_product_option; TRUNCATE TABLE oc_product_option_value; TRUNCATE TABLE oc_product_related; TRUNCATE TABLE oc_product_related; TRUNCATE TABLE oc_product_reward; TRUNCATE TABLE oc_product_special; TRUNCATE TABLE oc_product_to_category; TRUNCATE TABLE oc_product_to_download; TRUNCATE TABLE oc_product_to_layout; TRUNCATE TABLE oc_product_to_store; TRUNCATE TABLE oc_review; DELETE FROM oc_seo_url WHERE query LIKE 'product_id=%'; Как очистить все атрибуты в Opencart: TRUNCATE TABLE oc_attribute; TRUNCATE TABLE oc_attribute_description; TRUNCATE TABLE oc_attribute_group; TRUNCATE TABLE oc_attribute_group_description; TRUNCATE TABLE oc_product_attribute; Как очистить все опции в Opencart: TRUNCATE TABLE oc_option; TRUNCATE TABLE oc_option_description; TRUNCATE TABLE oc_option_value; TRUNCATE TABLE oc_option_value_description; TRUNCATE TABLE oc_product_option;
  7. Очистка всех данных о товарах в Opencart 2x через запрос в базу данных Важно!!! Перед любым изменением в базе данных, необходимо делать бекап базы данных!!! При создании нового магазина, часто требуется очистить демо товары или ошибочно загруженные товары (атрибуты, категории). Сделать это все просто, достаточно прописать запрос к базе данных: Очистка всех категорий, товаров, атрибутов, опций и производителей в Opencart: TRUNCATE TABLE `oc_category`; TRUNCATE TABLE `oc_category_description`; TRUNCATE TABLE `oc_category_filter`; TRUNCATE TABLE `oc_category_path`; TRUNCATE TABLE `oc_category_to_layout`; TRUNCATE TABLE `oc_category_to_store`; DELETE FROM oc_url_alias WHERE query LIKE 'category_id=%'; TRUNCATE TABLE oc_product; TRUNCATE TABLE oc_product_attribute; TRUNCATE TABLE oc_product_description; TRUNCATE TABLE oc_product_discount; TRUNCATE TABLE oc_product_image; TRUNCATE TABLE oc_product_option; TRUNCATE TABLE oc_product_option_value; TRUNCATE TABLE oc_product_related; TRUNCATE TABLE oc_product_related; TRUNCATE TABLE oc_product_reward; TRUNCATE TABLE oc_product_special; TRUNCATE TABLE oc_product_to_category; TRUNCATE TABLE oc_product_to_download; TRUNCATE TABLE oc_product_to_layout; TRUNCATE TABLE oc_product_to_store; TRUNCATE TABLE oc_review; DELETE FROM oc_url_alias WHERE query LIKE 'product_id=%'; TRUNCATE TABLE oc_attribute; TRUNCATE TABLE oc_attribute_description; TRUNCATE TABLE oc_attribute_group; TRUNCATE TABLE oc_attribute_group_description; TRUNCATE TABLE oc_product_attribute; TRUNCATE TABLE oc_option; TRUNCATE TABLE oc_option_description; TRUNCATE TABLE oc_option_value; TRUNCATE TABLE oc_option_value_description; TRUNCATE TABLE oc_product_option; DELETE FROM oc_url_alias WHERE query LIKE 'manufacturer_id=%'; TRUNCATE TABLE oc_manufacturer; TRUNCATE TABLE oc_manufacturer_description; TRUNCATE TABLE oc_manufacturer_to_store; Как очистить все категории в Opencart : TRUNCATE TABLE `oc_category`; TRUNCATE TABLE `oc_category_description`; TRUNCATE TABLE `oc_category_filter`; TRUNCATE TABLE `oc_category_path`; TRUNCATE TABLE `oc_category_to_layout`; TRUNCATE TABLE `oc_category_to_store`; DELETE FROM oc_url_alias WHERE query LIKE 'category_id=%'; Как очистить все товары в Opencart: TRUNCATE TABLE oc_product; TRUNCATE TABLE oc_product_attribute; TRUNCATE TABLE oc_product_description; TRUNCATE TABLE oc_product_discount; TRUNCATE TABLE oc_product_image; TRUNCATE TABLE oc_product_option; TRUNCATE TABLE oc_product_option_value; TRUNCATE TABLE oc_product_related; TRUNCATE TABLE oc_product_related; TRUNCATE TABLE oc_product_reward; TRUNCATE TABLE oc_product_special; TRUNCATE TABLE oc_product_to_category; TRUNCATE TABLE oc_product_to_download; TRUNCATE TABLE oc_product_to_layout; TRUNCATE TABLE oc_product_to_store; TRUNCATE TABLE oc_review; DELETE FROM oc_url_alias WHERE query LIKE 'product_id=%'; Как очистить все атрибуты в Opencart: TRUNCATE TABLE oc_attribute; TRUNCATE TABLE oc_attribute_description; TRUNCATE TABLE oc_attribute_group; TRUNCATE TABLE oc_attribute_group_description; TRUNCATE TABLE oc_product_attribute; Как очистить все опции в Opencart: TRUNCATE TABLE oc_option; TRUNCATE TABLE oc_option_description; TRUNCATE TABLE oc_option_value; TRUNCATE TABLE oc_option_value_description; TRUNCATE TABLE oc_product_option;
  8. Мы собрали полезные SQL запросы для Opencart 2 и Opencart 3 Важно!!! Перед любым изменением в базе данных, необходимо делать бэкап базы данных!!! (как сделать бэкап базы данных- на каждом хостинге по своему). 1. SQL запрос для Opencart, что бы установить количество для всех товаров 0, либо другое кол-во UPDATE `oc_product` SET `quantity` = 0 2. SQL запрос для Opencart, что бы удалить производителей не связанных с товарами DELETE m FROM oc_manufacturer m LEFT JOIN oc_product p ON m.manufacturer_id = p.manufacturer_id WHERE p.manufacturer_id IS NULL 3. Установить количество бонусных баллов для покупки товара равное цене в Opencart UPDATE `product` SET points = round(price); 4. Запрос на удаление всех акций с ценой = 0 в Opencart 3 и Opencart 2 DELETE FROM `oc_product_special` WHERE price = 0 5. Как изменить количество товара в существующих опциях в opencart: UPDATE `oc_product_option_value` set `quantity` = 100 - или с дополнительными условиями фиолетовым добавил строчки с условиями-привязкой к id конкретной категории товаров, конкретных опций или конкретных значений опций. На случай, если Вам нужно эти изменения сделать только для товаров какой-то конкретной группы. если нужно для всех товаров - можете просто убрать фиолетовые строки или проигнорировать (сейчас они закомментированы) 100 зеленым - новое количество товара этой опции 0 зеленым - старое количество товара этой опции. изменится на 100. UPDATE oc_product_option_value pov LEFT JOIN oc_product_to_category p2c ON pov.product_id = p2c.product_id LEFT JOIN oc_option o ON o.option_id = pov.product_option_id LEFT JOIN oc_option_value ov ON ov.option_value_id = pov.option_value_id SET pov.quantity = 100 WHERE pov.quantity = 0 -- AND p2c.category_id = 69 -- AND o.option_id = 14 -- AND ov.option_value_id = 51 6. Как привязать все товары в мультимагазине для магазинов в Opencart. Вместо xx - id нужного магазина. Категории, производители.. по этому же принципу INSERT IGNORE INTO `oc_product_to_store` (product_id, store_id) SELECT p.product_id, xx as store_id FROM `oc_product` p 7. Как отключить доставку для всех товаров в Opencart. Массово поменять значение параметра "Необходима доставка" на "Нет": UPDATE oc_product SET shipping=0; 8. Как заполнить поле модель (код товара) для всех товаров в Opencart. Модель будет сформирована на основе id товаров с добавлением ведущих нулей до шестизначного вида: UPDATE oc_product SET model = LPAD(product_id,6,'000000') 9. Как заполнить поле SKU (Артикул) для всех товаров в Opencart. Артикул будет сформирован на основе id товаров с добавлением ведущих нулей до шестизначного вида: UPDATE oc_product SET sku = LPAD(product_id,6,'000000'); 10. Массовое изменение цены в Opencart: - этот пример разделит все цены на 75.99, так мы можем перевести цены в рублях на евро. UPDATE `oc_product` SET `price` = `price` / 95.99; - так мы сделаем те же действий, но для тех товаров, у которых цена больше 1. Аналогично, Вы можете добавить свои условия, по другим полям. UPDATE `oc_product` SET `price` = `price` / 65.99 WHERE `oc_product`.`price` > 1; - нужно увеличить цену на все товары в opencart на 7%. Т.е в рамках запроса, мы можем производить математические действия +-*/. UPDATE `oc_product` SET `price` = `price` + (`price`/100*7) WHERE `oc_product`.`price` > 1; - вычитаем 8% от товаров определенного производителя UPDATE `oc_product` SET `price` = `price` - (`price`/100*8) WHERE `oc_product`.`manufacturer_id` = 54; 11. Отключает товары у которых цена = 0 в Opencart UPDATE oc_product SET oc_product.status = 0 WHERE price = 0 12. Мультимагазин на opencart 3, скопировать seo url (сео чпу), для всех магазинов. Где 1 - это id магазина куда копируем, а нуль - id магазина по умолчанию (отметил зеленым цветом). INSERT INTO `oc_seo_url`(`store_id`, `language_id`, `query`, `keyword`) SELECT , temp.language_id, temp.query, temp.keyword FROM oc_seo_url temp WHERE temp.store_id = 13. Массово отключить товары у которых нет изображения в opencart UPDATE `oc_product` SET `status`=0 WHERE `image`='' OR `image`='no_image.png' OR `image`='no_image.jpg' OR `image` IS NULL; Обратное действие, включаем товары, где есть изображение UPDATE oc_product SET status = 1 WHERE status = 0 AND image > '' 14. Удалить все товары с количеством равным 0... opencart 2 DELETE p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16FROM `oc_product` p1LEFT JOIN `oc_product_attribute` p2 ON (p2.product_id = p1.product_id)LEFT JOIN `oc_product_description` p3 ON (p3.product_id = p1.product_id)LEFT JOIN `oc_product_discount` p4 ON (p4.product_id = p1.product_id)LEFT JOIN `oc_product_filter` p5 ON (p5.product_id = p1.product_id)LEFT JOIN `oc_product_image` p6 ON (p6.product_id = p1.product_id)LEFT JOIN `oc_product_option` p7 ON (p7.product_id = p1.product_id)LEFT JOIN `oc_product_option_value` p8 ON (p8.product_id = p1.product_id)LEFT JOIN `oc_product_recurring` p9 ON (p9.product_id = p1.product_id)LEFT JOIN `oc_product_related` p10 ON (p10.product_id = p1.product_id)LEFT JOIN `oc_product_reward` p11 ON (p11.product_id = p1.product_id)LEFT JOIN `oc_product_special` p12 ON (p12.product_id = p1.product_id)LEFT JOIN `oc_product_to_category` p13 ON (p13.product_id = p1.product_id)LEFT JOIN `oc_product_to_download` p14 ON (p14.product_id = p1.product_id)LEFT JOIN `oc_product_to_layout` p15 ON (p15.product_id = p1.product_id)LEFT JOIN `oc_product_to_store` p16 ON (p16.product_id = p1.product_id)WHERE p1.quantity = 999 15. Сделать все опции не обязательными в опенкарт update oc_product_option set required = '0' 16. Как отключить категории без товаров в opencart 3 UPDATE oc_category c LEFT JOIN oc_product_to_category pc ON c.category_id = pc.category_id LEFT JOIN oc_product p ON pc.product_id = p.product_id SET c.status = 0 WHERE pc.product_id IS NULL OR pc.product_id=p.product_id AND p.status = 0 17. Как удалить определенный атрибут из всех товаров в opencart - в скобках указываем id атрибута, через запятую DELETE FROM oc_product_attribute WHERE attribute_id IN (1, 2, 3, 4, 5, 6) 18. Как отключить индексацию товаров у определенной категории в OcStore 3 UPDATE `oc_product` SET `noindex`= 0 WHERE product_id IN (SELECT product_id FROM `oc_product_to_category` WHERE category_id = 1) 19. Как массово включить индексацию у категорий в OcStore 3 UPDATE `oc_category` SET `noindex` = 0 20. Как в Opencart увеличить максимальное количество символов в метатеге description ALTER TABLE oc_product_description MODIFY meta_description VARCHAR(1000); ALTER TABLE oc_information_description MODIFY meta_description VARCHAR(1000); ALTER TABLE oc_category_description MODIFY meta_description VARCHAR(1000); ALTER TABLE oc_manufacturer_description MODIFY meta_description VARCHAR(1000); 21. Как в opencart через SQL запрос присвоить всем товарам НДС UPDATE `oc_product` SET `tax_class_id`=10 22. Как массово изменить цену опций в Opencart * уменьшить цену, например на 20% UPDATE oc_product p INNER JOIN oc_product_option_value pov ON p.product_id = pov.product_id SET pov.price = pov.price - (pov.price * 0.20); * увеличить цену, например на 20% UPDATE `oc_product` p INNER JOIN `oc_product_option_value` pov ON p.`product_id` = pov.`product_id` SET pov.`price` = pov.`price` + (pov.`price`/100*20) * увеличить цену у определенного производителя, например на 20% UPDATE `oc_product` p INNER JOIN `oc_product_option_value` pov ON p.`product_id` = pov.`product_id` SET pov.`price` = pov.`price` + (pov.`price`/100*20) WHERE p.`manufacturer_id` = 111 * увеличить цену у перечисленных производителей UPDATE `oc_product` p INNER JOIN `oc_product_option_value` pov ON p.`product_id` = pov.`product_id` SET pov.`price` = pov.`price` + (pov.`price`/100*10) WHERE p.`manufacturer_id` IN (111, 112, 113) 23. Как массово добавить к цене акции процент через SQL запрос в Opencart update oc_product_special set price=price*1.07 24. Как массово скопировать из значений атрибута в поле location, upc, isbn... через SQL запрос в Opencart *WHERE pa.attribute_id = 1; указываем id атрибута из которого переносим значения UPDATE oc_product p INNER JOIN oc_product_attribute pa ON p.product_id = pa.product_id SET p.location = pa.text WHERE pa.attribute_id = 26; 25. Как добавить товар во все родительские категории в OpenCart через SQL запрос Иногда бывает, что каталог товаров уже заполнен, но каждый товар привязан только к одной категории нижнего уровня. Однако, чтобы товар отображался во всех родительских категориях, достаточно выполнить один запрос к базе данных MySQL. Рассмотрим пример товара «Точечный светильник №1» и следующую иерархию категорий: Светильники-Точечные светильники-Встроенные Сейчас товар отображается только в категории «Встроенные», но мы хотим, чтобы он был доступен и в других связанных категориях. Если у нас много товаров и различных категорий с иерархиями, добавление товаров в родительские категории вручную становится трудоемким и времязатратным процессом. делаем SQL запрос: INSERT INTO oc_product_to_category (product_id, category_id) SELECT p.product_id, c2.category_id FROM oc_product p INNER JOIN oc_product_to_category ptc ON p.product_id = ptc.product_id LEFT JOIN oc_category_path cp ON ptc.category_id = cp.category_id LEFT JOIN oc_category c1 ON cp.category_id = c1.category_id LEFT JOIN oc_category c2 ON cp.path_id = c2.category_id WHERE c1.category_id <> c2.category_id; Для улучшения производительности запроса можно создать индексы на столбцах, которые используются в операторах JOIN и WHERE, например: CREATE INDEX idx_product_id ON oc_product (product_id); CREATE INDEX idx_category_id ON oc_product_to_category (category_id); CREATE INDEX idx_path_id ON oc_category_path (path_id); CREATE INDEX idx_category_id_2 ON oc_category (category_id); Применение этих индексов может существенно сократить время выполнения запроса, особенно если таблицы содержат большое количество записей. Обратите внимание, что префикс таблиц базы данных может отличаться, поэтому его следует заменить на ваш собственный. В приведенных запросах используется префикс «oc_».
  9. Часто возникает необходимость перехода на seo_pro на ранее запущенном сайте. При этом не желательно менять адресацию, во избежании просадок, как минимум на несколько месяцев, а порой сайт и вовсе не восстанавливается полностью. В стандартном контроллере используется адресация без вложенностей и лишних слешей. Канонические адреса имеют вид: site.com/product site.com/last_category После установки seo_pro же важно активировать в настройках "Товары без категории". Однако для категорий такой настройки нет - они имеют вложенность, плюс в конце добавляется слеш. Для исправления данной ситуации потребуется правка кода seo_pro Убираем слеш Находим в коде $seo_url .= '/'; и закомментируем строку //$seo_url .= '/'; почему комментируем, а не удаляем? - есть вероятность попытки привязки модов Убираем вложенность case 'path': $categories = explode('_', $value); foreach ($categories as $category) { $queries[] = 'category_id=' . $category; } unset($data[$key]); break; приводим к виду case 'path': $categories = explode('_', $value); //foreach ($categories as $category) { $queries[] = 'category_id=' . end($categories); //} unset($data[$key]); break; Сохраняем хлебные крошки } elseif (isset($this->request->get['path'])) { $this->request->get['route'] = 'product/category'; } добавляем просчет пути } elseif (isset($this->request->get['path'])) { $this->request->get['route'] = 'product/category'; $category = explode('_', $this->request->get['path']); $category_id = (int)end($category); $path = $this->getPathByCategory($category_id); if ($path) $this->request->get['path'] = $path; }
  10. Важно! Интеграция с CDN в Opencart производится не с помощью модулей или плагинов, а путем изменения трех файлов по FTP/SSH. Вначале убедитесь, что у вас есть возможность подключиться к вашему сайту через FTP или SSH (туда, где лежат файлы сайта). Вы получили адрес проекта в CDN. Подключение CDN к Opencart версии 2.x Обязательно сохраните резервную копию этих файлов вашего сайта: /config.php /catalog/model/tool/image.php /catalog/view/theme/default/template/common/header.tpl Редактируем файл /config.php, который находится в корне сайта. Здесь мы укажем адрес CDN. Добавьте в любом месте файла строку: define('CDN_HTTPS_SERVER', 'https://cdn.example-domain.ru'); Слэш в конце обязателен. Протокол https можно заменить на http в URL, если ваш сайт работает только по http. Редактируем файл /catalog/model/tool/image.php (здесь мы будем задавать путь до изображений на сайте). Найдите в коде файла следующий фрагмент: if ($this->request->server['HTTPS']) { return $this->config->get('config_ssl') . 'image/' . $new_image; } else { return $this->config->get('config_url') . 'image/' . $new_image; } Замените его на этот фрагмент кода: if (defined('CDN_HTTPS_SERVER') and ! empty(CDN_HTTPS_SERVER)) { return CDN_HTTPS_SERVER . 'image/' . $new_image; } else { if ($this->request->server['HTTPS']) { return $this->config->get('config_ssl') . 'image/' . $new_image; } else { return $this->config->get('config_url') . 'image/' . $new_image; } } Редактируем файл /catalog/view/theme/default/template/common/header.tpl. Здесь определяются пути до стилей и скриптов. По умолчанию в этом файле прописаны относительные пути до этих файлов, начинающиеся с директории catalog. Пример кода сайта до подключения CDN: Вставьте перед словом catalog код: <?php if (defined('CDN_HTTPS_SERVER') and ! empty(CDN_HTTPS_SERVER)) { echo CDN_HTTPS_SERVER; } ?> Получится строка вида (скрипт подключен через CDN): <script src="<?php if (defined('CDN_HTTPS_SERVER') and ! empty(CDN_HTTPS_SERVER)) { echo CDN_HTTPS_SERVER; } ?>catalog/view/javascript/jquery/jquery-2.1.1.min.js" type="text/javascript"></script> Также поступите с остальными скриптами js и стилями css в этом файле. Загрузите измененные файлы по FTP и обновите страницу вашего сайта. Проверьте, что сайт отображается корректно. Удостоверьтесь, что в HTML-коде сайта URL адреса до скриптов, стилей и изображений содержат адрес CDN. На этом настройка Opencart 2.x завершена и CDN готов к использованию. Подключение CDN к Opencart версии 3.x Обязательно сохраните резервную копию этих файлов вашего сайта: /config.php /catalog/model/tool/image.php /catalog/view/theme/default/template/common/header.twig Редактируем файл /config.php, который находится в корне сайта. Здесь мы укажем адрес CDN. Добавьте в любом месте файла строку: define('CDN_HTTPS_SERVER', 'https://cdn.example-domain.ru/'); Слэш в конце обязателен. Протокол https можно заменить на http, если ваш сайт работает только по http. Редактируем файл /catalog/model/tool/image.php (здесь мы будем задавать путь до изображений на сайте) Найдите в коде файла следующий фрагмент: i f ($this->request->server['HTTPS']) { return $this->config->get('config_ssl') . 'image/' . $image_new; } else { return $this->config->get('config_url') . 'image/' . $image_new; } Замените его на этот фрагмент кода: if (defined('CDN_HTTPS_SERVER') and ! empty(CDN_HTTPS_SERVER)) { return CDN_HTTPS_SERVER . 'image/' . $image_new; } else { if ($this->request->server['HTTPS']) { return $this->config->get('config_ssl') . 'image/' . $image_new; } else { return $this->config->get('config_url') . 'image/' . $image_new; } } Обратите внимание, если вы переходили с версии Opencart 2.x на 3.x, в этом файле поменялось написание переменной $image_new (в версии 2.x она называлась $new_image). Редактируем файл /catalog/view/theme/default/template/common/header.twig (здесь определяются пути до стилей и скриптов). Обратите внимание, если вы переходили с версии Opencart 2.x на 3.x: в версии 3.х Opencart перешли с шаблонов tpl на twig, поэтому синтаксис относительно второй версии CMS изменится. По умолчанию в этом файле прописаны относительные пути до js и css, начинающиеся с директории catalog. Пример кода сайта до подключения CDN: Вставьте перед словом catalog код: {{ constant('CDN_HTTPS_SERVER') }} Получится строка вида (скрипт подключен через CDN): <script src="{{ constant('CDN_HTTPS_SERVER') }}catalog/view/javascript/jquery/jquery-2.1.1.min.js" type="text/javascript"></script> Также поступите с остальными скриптами js и стилями css в этом файле. Загрузите измененные файлы по FTP и обновите страницу вашего сайта. Проверьте, что сайт отображается корректно. Удостоверьтесь, что в HTML-коде сайта URL адреса до скриптов, стилей и изображений содержат адрес CDN. На этом настройка Opencart 3.x завершена и CDN готов к использованию. Если вы хотите использовать свой домен для подключения CDN в файле /config.php: втавьте строку: define('CDN_HTTPS_SERVER', 'https://cdn.example-domain.ru/');
  11. Еще один реальный кейс по услугам на данном дополнении https://dianachernyh.ru/ редизайн существующего https://www.xn--80aakgm5acx0cq1c.xn--p1ai/ почувствуйте разницу)))) И все это на Опенкарт! стоимость как "землячке" - 30 тыс руб. срок выполнения 1,5 дня вместе с наполнением и настройкой доп модулей.
  12. Актуально для Opencart 2. Открываем файл catalog\controller\product\product.php Находим строку $results = $this->model_catalog_product->getProductRelated($this->request->get[‘product_id’]); И после нее добавляем $results = array_slice($results, 0, 7); Где 7 — и есть то самое количество выводимых рекомендуемых товаров (лимит). После добавления обязательно обновить кеш модификаторов!!! Чтобы они показывались в случайном порядке (рандомно) Помните в старом добром винампе была кнопка шаффл (shuffle), для рандомного воспроизведения музыки?)) Короче нам нужно добавить между ними одну строку — заключить резалтс в шаффл, то бишь вот так: $results = $this->model_catalog_product->getProductRelated($this->request->get['product_id']); shuffle($results); $results = array_slice($results, 0, 4); Со статусом в наличии Если нужно исключить отсутствующие товары, то делаем так: Всё тот же файл catalog\model\catalog\product.php Находим метод getProductRelated И после AND p.status = ‘1’ добавляем AND p.quantity > 0
  13. Сначала в контроллере нужно прописать (зарегистрировать) переменную. То есть открываем файл catalog/controller/product/category.php, находим строчку 'name' => $result['name'], и после нее вставляет, то что нам необходимо зарегистрировать, то есть: для модели вставляем 'model' => $result['model'], а для артикула вставляем 'sku' => $result['sku'], Сохраняем, закрываем. Теперь открываем сам файл шаблона страницы категории catalog/view/theme/ВАША_ТЕМА/template/product/category.tpl И там, где нам нужно вывести модель, пишем: для 2-ки <?php echo $product['model']; ?> для 3-ки {{ product.model }} а там, где нужен артикул, пишем: для 2-ки <?php echo $product['sku']; ?> для 3-ки {{ product.sku }} Сохраняем, закрываем. Обазятельно!!! Очистите кеш модификаторов, а-то не заработает! По сути всё. Должно работать. Вывести артикул или модель на странице производителей — аналогично.
  14. Чтобы в Opencart определить страницу категории как главную (домашнюю), надо проделать следующее. Открываем файл .htaccess и после строки RewriteBase / Вставляем следующую строку RewriteRule ^/?$ index.php?route=product/category&path=111/ [L] где, 111 — это id категории, которую нужно определить как главную страницу, то есть нужно указать свою. Если установлен SeoPro Если установлен модуль SeoPro и правило не работает, а сервер отдает код ответа 301 вместо «внутреннего» редиректа с кодом 200, необходимо сделать следующее: Открываем файл \catalog\controller\common\seo_pro.php, метод validate(). private function validate() { if (isset($this->request->get['route']) && $this->request->get['route'] == 'error/not_found') { return; } if(empty($this->request->get['route'])) { $this->request->get['route'] = 'common/home'; } if (isset($this->request->server['HTTP_X_REQUESTED_WITH']) && strtolower($this->request->server['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest') { return; } if (isset($this->request->server['HTTPS']) && (($this->request->server['HTTPS'] == 'on') || ($this->request->server['HTTPS'] == '1'))) { $url = str_replace('&amp;', '&', $this->config->get('config_ssl') . ltrim($this->request->server['REQUEST_URI'], '/')); $seo = str_replace('&amp;', '&', $this->url->link($this->request->get['route'], $this->getQueryString(array('route')), 'SSL')); } else { $url = str_replace('&amp;', '&', substr($this->config->get('config_url'), 0, strpos($this->config->get('config_url'), '/', 10)) // leave only domain . $this->request->server['REQUEST_URI']); $seo = str_replace('&amp;', '&', $this->url->link($this->request->get['route'], $this->getQueryString(array('route')), 'NONSSL')); } if (rawurldecode($url) != rawurldecode($seo)) { $this->response->redirect($seo, 301); } } И добавляем исключение: $array_exclusion = [ 'http://site.com/' ]; if (rawurldecode($url) != rawurldecode($seo) && !in_array($url, $array_exclusion)) { $this->response->redirect($seo, 301); } Где site.com — это УРЛ вашей главной страницы сайта.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.