Перейти к содержанию
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

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

  • Посещение

Весь контент 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 — это УРЛ вашей главной страницы сайта.
  15. Вариант использования данного дополнения для "боевого" сайта (макет) http://banket.paschaopencart.ru/home - главная страница http://banket.paschaopencart.ru/vasilyevskiy_ostrov -страница 1 зала http://banket.paschaopencart.ru/rileeva - страница 2 зала все дополнительные модули и дополнения интегрированы исключительно Шорткодами.
  16. 1. Обновление от 03.03.24 а) добавлена возможность загрузки видео и настройка фонового видео оффера 1-го экрана б) самостоятельный модуль "витрина лендингов" ( для установки через схемы) в) добавлены два дополнительных поля для кастомных css и js для каждо отдельно взятой страницы лендинга г) несущественные правки по верстке
  17. Просмотр файла Система лендингов Опенкарт 3 / Landing page system Opencart 3 Система лендингов для Опенкарт 3 позволяет создавать неограниченное количество страниц типа "лендинг" Подробнее в видео Демо Демо2 Добавил Pascha Добавлено 21.01.2024 Категория Меню, дизайн, внешний вид  
    Система лендингов для Опенкарт 3 позволяет создавать неограниченное количество страниц типа "лендинг" Подробнее в видео Демо Демо2 Видео на яндекс диск
    3,700.00 RUB
  18. обратите внимание на "обертку" if (document.getElementById('politics').checked) то есть блок к примеру в <input type="checkbox" id="politics" onclick="check();" value="" autocomplete="off"/> а второй блок к примеру в <input type="checkbox" id="politicform" onclick="check();" value="" autocomplete="off"/> и вот Вам новая идея прописать скрипт для politicform <script> function check() { var submit = document.getElementsByName('submit')[0]; if (document.getElementById('politicform').checked) submit.disabled = ''; else submit.disabled = 'disabled'; } </script> либо еще проще <script> function check() { var submit = document.getElementsByName('submit')[0]; var notChecked = false; if (!document.getElementById('politics').checked) notChecked = true; if (!document.getElementById('politicform').checked) notChecked = true; if(!notChecked) submit.disabled = ''; else submit.disabled = 'disabled'; } </script>
  19. Дополнительные фото в категории как в товаре. Делаем галерею на странице категории Сегодня речь пойдет о небольшой доработке — вывод дополнительных фотографий категории. Зачем это нужно? Если у вас в магазине продается плитка или же ламинат, покупателю будет интересно посмотреть в самой категории фото интерьеров или коллекции, если категория идет как "коллекция". Для этого возьмем уже готовый функционал с товара. В форме редактирования товара есть вкладка Изображения в которой можно добавить дополнительные фото и они будут отображены в карточке товара. Для добавления такого же функционала в категорию для начала нам надо добавить дополнительную таблицу в базу данных product_image. Делаем запрос в базу через phpmyadmin: CREATE TABLE IF NOT EXISTS `oc_category_image` ( `category_image_id` int(11) NOT NULL AUTO_INCREMENT, `category_id` int(11) NOT NULL, `image` varchar(255) DEFAULT NULL, `sort_order` int(3) NOT NULL DEFAULT '0', PRIMARY KEY (`category_image_id`), KEY `category_id` (`category_id`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ; В данном примере создается таблица с префиксом oc_ посмотрите, у вас может быть другой! После этого открываем файл модели admin/model/catalog/category.php и добавляем возможность сохранения фотографий в базу данных. Для этого ищем в функции addCategory и editCategory строку: if (isset($data['image'])) { перед ней вставляем: if (isset($data['category_image'])) { foreach ($data['category_image'] as $category_image) { $this->db->query("INSERT INTO " . DB_PREFIX . "category_image SET category_id = '" . (int)$category_id . "', image = '" . $this->db->escape($category_image['image']) . "', sort_order = '" . (int)$category_image['sort_order'] . "'"); } } Далее добавляем функцию выборки картинок категории, например перед строкой: public function getCategory($category_id) { Вставляем: public function getCategoryImages($category_id) { $query = $this->db->query("SELECT * FROM " . DB_PREFIX . "category_image WHERE category_id = '" . (int)$category_id . "' ORDER BY sort_order ASC"); return $query->rows; } После этого у нас изображения уже записываются в базу с формы редактирования товара. Далее открываем контроллер admin/controller/catalog/category.php находим строку: $data['placeholder'] = $this->model_tool_image->resize('no_image.png', 100, 100); и после нее вставляем код обработки фото: // Images if (isset($this->request->post['category_image'])) { $category_images = $this->request->post['category_image']; } elseif (isset($this->request->get['category_id'])) { $category_images = $this->model_catalog_category->getCategoryImages($this->request->get['category_id']); } else { $category_images = array(); } $data['category_images'] = array(); foreach ($category_images as $category_image) { if (is_file(DIR_IMAGE . $category_image['image'])) { $image = $category_image['image']; $thumb = $category_image['image']; } else { $image = ''; $thumb = 'no_image.png'; } $data['category_images'][] = array( 'image' => $image, 'thumb' => $this->model_tool_image->resize($thumb, 100, 100), 'sort_order' => $category_image['sort_order'] ); } После этого открываем форму редактирования категории admin/view/template/catalog/category_form.tpl и ищем строку: <li><a href="#tab-data" data-toggle="tab"><?php echo $tab_data; ?></a></li> после нее добавляем код вкладки: <li><a href="#tab-image" data-toggle="tab">Изображения</a></li> Далее ищем строку: <p class="tab-pane" id="tab-design"> И перед ней вставляем блок вкладки с формой добавления изображений: <div class="tab-pane" id="tab-image"> <?php $button_remove = 'Удалить'; $button_image_add = 'Добавить'; ?> <div class="table-responsive"> <table id="images" class="table table-striped table-bordered table-hover"> <thead> <tr> <td class="text-left">Изображение</td> <td class="text-right"><?php echo $entry_sort_order; ?></td> <td></td> </tr> </thead> <tbody> <?php $image_row = 0; ?> <?php foreach ($category_images as $category_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 echo $category_image['thumb']; ?>" alt="" title="" data-placeholder="<?php echo $placeholder; ?>" /></a><input type="hidden" name="category_image[<?php echo $image_row; ?>][image]" value="<?php echo $category_image['image']; ?>" id="input-image<?php echo $image_row; ?>" /></td> <td class="text-right"><input type="text" name="category_image[<?php echo $image_row; ?>][sort_order]" value="<?php echo $category_image['sort_order']; ?>" placeholder="<?php echo $entry_sort_order; ?>" class="form-control" /></td> <td class="text-left"><button type="button" onclick="$('#image-row<?php echo $image_row; ?>').remove();" data-toggle="tooltip" title="<?php echo $button_remove; ?>" class="btn btn-danger"><i class="fa fa-minus-circle"></i></button></td> </tr> <?php $image_row++; ?> <?php } ?> </tbody> <tfoot> <tr> <td colspan="2"></td> <td class="text-left"><button type="button" onclick="addImage();" data-toggle="tooltip" title="<?php echo $button_image_add; ?>" class="btn btn-primary"><i class="fa fa-plus-circle"></i></button></td> </tr> </tfoot> </table> </div> </div> И после этого конечно оживляем все кнопки скриптом. Внизу файла перед строкой <script type="text/javascript"><!-- Вставляем этот код: <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 $placeholder; ?>" /></a><input type="hidden" name="category_image[' + image_row + '][image]" value="" id="input-image' + image_row + '" /></td>'; html += ' <td class="text-right"><input type="text" name="category_image[' + image_row + '][sort_order]" value="" placeholder="<?php echo $entry_sort_order; ?>" class="form-control" /></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> После таких правок у нас уже есть возможность в админке добавлять, редактировать и сохранять изображения в категории. После любых изменений в коде не забывайте обновлять кеш модификаторов (Дополнения — Менеджер дополнений — кнопка Обновить) Вывод фото на странице категории. Для вывода фото на странице категорий нам необходимо добавить функцию выборки изображений из базы данных в модель. Для этого открываем файл catalog/model/catalog/category.php и, например перед строкой: public function getCategories($parent_id = 0) { вставляем нашу функцию public function getCategoryImages($category_id) { $query = $this->db->query("SELECT * FROM " . DB_PREFIX . "category_image WHERE category_id = '" . (int)$category_id . "' ORDER BY sort_order ASC"); return $query->rows; } После этого полученные данные надо обработать в контроллере, для этого идем в файл catalog/controller/product/category.php и перед строкой: $data['description'] = html_entity_decode($category_info['description'], ENT_QUOTES, 'UTF-8'); вставляем код обработки: $data['images'] = array(); $results = $this->model_catalog_category->getCategoryImages($category_id); if($results){ $this->document->addScript('catalog/view/javascript/jquery/magnific/jquery.magnific-popup.min.js'); $this->document->addStyle('catalog/view/javascript/jquery/magnific/magnific-popup.css'); foreach ($results as $result) { $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')) ); } } После этого у нас в шаблон идет массив $images в котором находятся фотографии категории. Для отображения их на сайте надо сделать вывод в шаблоне. Для этого открываем файл catalog/view/theme/default/template/product/category.tpl и в нужном месте вставляем код: <?php if ($images) { ?> <p class="row images"> <?php foreach ($images as $image) { ?> <p class="col-xs-6 col-sm-6 col-md-3"><a class="thumbnail" href="<?php echo $image['popup']; ?>" title="<?php echo $heading_title; ?>"> <img src="<?php echo $image['thumb']; ?>" title="<?php echo $heading_title; ?>" alt="<?php echo $heading_title; ?>" /></a></p> <?php } ?> </p> <hr> <script> $(document).ready(function() { $('.images').magnificPopup({ type:'image', delegate: 'a', gallery: { enabled:true } }); }); </script> <?php } ?> Учтите, что у вас может быть другой шаблон. В примере указан шаблон default (выделен выше). После всех правок можете чистить кеш модификаторов, кеш модуля кеширования (если он есть) и радоваться результатам.
  20. Теперь всегда нужно чтоб на вашем сайте в любой форме обратной связи присутствовал чекбокс согласия на обработку персональных данных. Зачастую разработчики уже предусматривают данную приблуду в своих дополнениях... но что если нет? Что если для Вас проблематично поменять код самого модуля по каким то причинам? Самое простое- вставить несложный скрипт и сделать пару правок. Вот этим мы и займемся. Итак... мы открыли код вывода формы обратной связи и ориентируясь на кнопку кода отправки сообщения: как правило это кнопка (ссылка или button ) type="submit" *можно использовать для поиска по документу. Где то чуть выше вставляем <div class="form-chek"> <input type="checkbox" id="politics" onclick="check();" value="" autocomplete="off"/> Я согласен (-на) на обработку персональных данных </div> тем самым мы сделали то что требуется.... но... отправка сообщения возможна что при активном чекбоксе, что при неактивном.... "факир был пьян- и фокус не удался" )))) Потому мы еще не закончили и поработаем с самой кнопкой отправки сообщения из формы к примеру мы имеем <button type="submit" class="btn btn-lg btn-primary">Оставить заявку</button> чуть видоизменим ее на <button type="submit" name="submit" class="submit btn btn-lg btn-primary" disabled="">Оставить заявку</button> и вставим скрипт <script> function check() { var submit = document.getElementsByName('submit')[0]; if (document.getElementById('politics').checked) submit.disabled = ''; else submit.disabled = 'disabled'; } </script> тем самым... пока чекбокс не активен - кнопка отправки сообщений так же не кликабельна... и при активном/отмеченном чекбоксе кнопка отправки становится работоспособной... казалось бы мы уже можем остановиться на этом))) но.... есть и другие задачи: к примеру такие, как стилизовать собственно чекбокс под дизайн сайта ( по умолчанию активный чекбокс - синего цвета ( так его определяют браузеры и подтягивают стандартные стили) исправим это недоразумение одной строчкой #politics { accent-color: #FFCB4A; } и вот она уже стала того цвета что нам требовалось.
  21. Когда у тебя на хосте 3-4 сайта в разработке с последующим переносом на хостинг заказчика лишние папки (да еще и одноименные) вне пределах собственно разрабатываемого сайта вообще ни к месту. При чем переносить или оставить - ни каким образом не сказывается на работоспособности сайта и установленных ocmod...
  22. При входе в админ-панель сайта может всплывать окно безопасности: Как убрать это предупреждение: в файле admin\controller\common\dashboard.php заменить строку $data['security'] = $this->load->controller('common/security'); на $data['security'] = '';
  23. Настройка регионов в Opencart позволит локализовать интернет-магазин и задать для него нужные налоги, доставку и другие настройки. Создание стран и регионов в Opencart Чтобы создать страну потребуется перейти в нужный пункт в «Система»-«Локализация» после чего кликаем на «Добавить». Вводим: Название страны; Код ISO (2); Код ISO (3); Формат адреса; Индекс обязателен; Статус. В случае с регионами потребуется перейти в соответствующий пункт в том же разделе и также добавляем его. Регионы== Ваш населенный пункт привязанный к стране. В таком случае все что будет внесено будет отображаться в корзине и пр.

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.