Перейти к содержанию
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. Данное дополнение - пилотное. Делалось под определенную задачу: Визуализация и описание основных узлов и деталей продаваемого устройства . Предполагаю что может использоваться по типу "аля- лукбук" (для ИМ одежды), изображений сертификатов и лицензий конкретного товара (к примеру мед. оборудования) и пр. При интересе и предложениях будет дорабатываться. После приобретения дополнения все обновления будут доступны к скачиванию без ограничений по стоимости и времени.
  2. Просмотр файла Дополнительная информация о товаре/ AddiinfoProduct Дополнение выполняет задачу вывода дополнительной информации + изображение в карточке товара. Неограниченное количество строк. Неограниченное количество знаков текста. В версии 1.0 выводится в карточке товара над "табами". Язык- русский. Установка - менеджер дополнений- ocmod Версия Опенкарт - 2.3 Демо фронт Админка- demo/demo Делалось под определенную задачу: Визуализация и описание основных узлов и деталей продаваемого устройства . Предполагаю что может использоваться по типу "аля- лукбук" (для ИМ одежды), изображений сертификатов и лицензий конкретного товара (к примеру мед. оборудования) и пр. Добавил Pascha Добавлено 21.07.2022 Категория Меню, дизайн, внешний вид  
    Дополнение выполняет задачу вывода дополнительной информации + изображение в карточке товара. Неограниченное количество строк. Неограниченное количество знаков текста. В версии 1.0 выводится в карточке товара над "табами". Язык- русский. Установка - менеджер дополнений- ocmod Версия Опенкарт - 2.3 Демо фронт Админка- demo/demo Делалось под определенную задачу: Визуализация и описание основных узлов и деталей продаваемого устройства . Предполагаю что может использоваться по типу "аля- лукбук" (для ИМ одежды), изображений сертификатов и лицензий конкретного товара (к примеру мед. оборудования) и пр.
    1,300.00 RUB
  3. При установке модулей из маркетплейса прямо с веб-сайта вы можете столкнуться с сообщением об ошибке типа «Signature hash does not match!», решение этой проблемы для OpenCart версии 3.0.2.0 следующее: Войдите в свою учетную запись OpenCart https://www.opencart.com/index.php?route=account/login На панели инструментов вы увидите «Ваши магазины», щелкните по нему, затем нажмите кнопку «Добавить магазин». затем добавьте информацию о своем магазине, которая является доменным именем. Затем нажмите «Отправить», вы получите подробную информацию о вашем имени пользователя и секретном ключе. зайдите на свой сайт и войдите в админку. Перейдите в Расширения >> Торговая площадка и нажмите кнопку настройки. Появится всплывающее окно, в котором вы вводите имя пользователя и секретный ключ, введите их, которые вы получили выше, на панели управления учетной записью opencart.com. Или просто устанавливайте модули стандартным способом (через установку ocmod или по FTP) ))))
  4. как по мне, так немного костыль и плюсом не совсем понятно какую цель преследует данное решение, но вывод в product.tpl (раскидываем по блокам в зависимости от ID опции) 2 блока <div id="block1"></div> и <div id="block2"></div> <?php if ($option['type'] == 'checkbox') { ?> <?php if ($option['option_id'] == '13' || $option['option_id'] == '15') { ?> <div id="block1"> <div class="form-group<?php echo ($option['required'] ? ' required' : ''); ?>"> <label class="control-label"><?php echo $option['name']; ?></label> <div id="input-option<?php echo $option['product_option_id']; ?>"> <?php foreach ($option['product_option_value'] as $option_value) { ?> <div class="checkbox"> <label> <input type="checkbox" name="option[<?php echo $option['product_option_id']; ?>][]" value="<?php echo $option_value['product_option_value_id']; ?>" /> <?php if ($option_value['image']) { ?> <img src="<?php echo $option_value['image']; ?>" alt="<?php echo $option_value['name'] . ($option_value['price'] ? ' ' . $option_value['price_prefix'] . $option_value['price'] : ''); ?>" class="img-thumbnail" /> <?php } ?> <?php echo $option_value['name']; ?> <?php if ($option_value['price']) { ?> (<?php echo $option_value['price_prefix']; ?><?php echo $option_value['price']; ?>) <?php } ?> </label> </div> <?php } ?> </div> </div> </div> <?php } ?> <?php } ?> <?php if ($option['type'] == 'checkbox') { ?> <?php if ($option['option_id'] == '14') { ?> <div id="block2"> <div class="form-group<?php echo ($option['required'] ? ' required' : ''); ?>"> <label class="control-label"><?php echo $option['name']; ?></label> <div id="input-option<?php echo $option['product_option_id']; ?>"> <?php foreach ($option['product_option_value'] as $option_value) { ?> <div class="checkbox"> <label> <input type="checkbox" name="option[<?php echo $option['product_option_id']; ?>][]" value="<?php echo $option_value['product_option_value_id']; ?>" /> <?php if ($option_value['image']) { ?> <img src="<?php echo $option_value['image']; ?>" alt="<?php echo $option_value['name'] . ($option_value['price'] ? ' ' . $option_value['price_prefix'] . $option_value['price'] : ''); ?>" class="img-thumbnail" /> <?php } ?> <?php echo $option_value['name']; ?> <?php if ($option_value['price']) { ?> (<?php echo $option_value['price_prefix']; ?><?php echo $option_value['price']; ?>) <?php } ?> </label> </div> <?php } ?> </div> </div> </div> <?php } ?> <?php } ?> опции с указанным ID разделены и отображаются в разных блоках теперь переместим куда хотим к примеру опции в <div id="block2">....</div> где требуется вставим блок с уникальным классом...примерно так <div id="product"> <div id="block2_clone"></div> </div> </div> использую и <div id="product">, так как только в таком случае опции будут работать и учитываться при покупке ну и собственно скрипт для перемещения ( пишем над <?php echo $footer; ?> ) <script> $('#block2').appendTo( $('#block2_clone') ); </script> Результат достигнут.
  5. Ну и для тех, кому в принципе нужно разбиение какого то длинного текста на колонки, можете применить column-count почитать можно тут
  6. Недавно, согласно предоставленному макету нужно было разбить статьи в 2 разные колонки. ( предварительно убрав то что не нужно) Сайт был для предоставления услуг, то есть пункты подобные "Возврат товара" и прочие были упразднены и потому футер предполагалось переверстать и пересортировать пункты. Итак, не став сильно заморачиваться и принял решение использовать для этих целей сортировку статей. Для этого в catalog/view/theme/default/template/information/information.tpl Формируем первую колонку <?php if ($informations ) { ?> <div class="col-sm-4"> <h5>Название первой колонки с статьями</h5> <ul class="list-unstyled"> <?php foreach ($informations as $information) { ?> <?php if ($information['sort_order'] < 100 ) { ?> <li><a href="<?php echo $information['href']; ?>"><?php echo $information['title']; ?></a></li> <?php } ?> <?php } ?> </ul> </div> <?php } ?> Пояснение: В данную колонку будут помещаться все статьи которым определено "отображать в футере" и номером сортировки менее 100 Формируем вторую колонку <?php if ($informations) { ?> <div class="col-sm-4"> <h5>Название второй колонки с статьями</h5> <ul class="list-unstyled"> <li><a href="/">Главная</a></li> <?php foreach ($informations as $information) { ?> <?php if ($information['sort_order'] > 100 ) { ?> <li><a href="<?php echo $information['href']; ?>"><?php echo $information['title']; ?></a></li> <?php } ?> <?php } ?> <li><a href="<?php echo $sitemap; ?>"><?php echo $text_sitemap; ?></a></li> </ul> </div> <?php } ?> Пояснение: В данную колонку будут помещаться все статьи которым определено "отображать в футере" и номером сортировки более 100 Вот такое простенькое и возможно слегка костыльное решение для сайтов, где предполагается много статей, которые необходимо разместить в подвале сайта.
  7. Иногда "слетают" стили на собственно сайте или затруднен вход в админку сайта (при отсутствии корректного отображения страницы входа) Костыль- но работает Прежде всего убедитесь, что вы подключили SSL сертификат на вашем серерве\хостинге, более подробно об этом вы можете узнать у своего хостинг-провайдера в службе поддержки. 1. Для начала, откройте панель управления вашим магазином и перейдите в раздел Система > Настройки > Редактировать Затем откройте вкладку "Сервер" и выберите Использовать SSL: (да) 2. Откройте файл config.php (который расположен в корневой директории вашего сайта) с помощью текстового редактора. Найдите строку: // HTTP define('HTTP_SERVER', 'http://site.ru/'); // HTTPS define('HTTPS_SERVER', 'http://site.ru/'); Замените эти строки как указано ниже: // HTTP define('HTTP_SERVER', 'https://site.ru/'); // HTTPS define('HTTPS_SERVER', 'https://site.ru/'); 3. Откройте файл admin/config.php и найдите строки: // HTTP define('HTTP_SERVER', 'http://site.ru/admin/'); define('HTTP_CATALOG', 'http://site.ru/'); // HTTPS define('HTTPS_SERVER', 'http://site.ru/admin/'); define('HTTPS_CATALOG', 'http://site.ru/'); Замените как указано ниже: // HTTP define('HTTP_SERVER', 'https://site.ru/admin/'); define('HTTP_CATALOG', 'https://site.ru/'); // HTTPS define('HTTPS_SERVER', 'https://site.ru/admin/'); define('HTTPS_CATALOG', 'https://site.ru/'); Сохраните файлы, этим самым мы обозначим доступность сайта по защищенному протоколу. p.s. 1. При данной правке учитывайте, что по окончанию действия сертификата Ваш сайт будет "криво" отображаться и нужно будет сделать "обратные" правки 2. Как правило после любых действий стоит очистить кеш изображений 3. Случается что картинки вставленные через текстовой редактор (описания, статьи и пр.) не отображаются - потребуется заново отредактировать вновь указав путь до картинки в менеджере изображений (или в режиме кода исправить путь до картинки с http на https)
  8. Если вы подключили SSL сертификат, для того чтобы ваш магазин открывался по безопасному протоколу HTTPS рекомендуется настроить редирект с http:// на https:// Даже если пользователь наберет http://, его перенаправит на безопасный протокол https:// Изменения необходимо вносить в файл .htaccess Откройте для редактирования на вашем сервере через фтп-клиент или файл-менджер файл .htaccess, обычно он находится в корневой директории вашего сайта. После строки: RewriteEngine On Добавьте следующую запись: RewriteCond %{SERVER_PORT} !^443$ RewriteRule .* https://%{SERVER_NAME}%{REQUEST_URI} [R=301,L] Данное правило должно работать практически на любом хостинге, однако если у вас редирект не сработал, добавьте такую запись: RewriteCond %{HTTPS} =off RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [QSA,L] Сохраните файл, теперь редирект с протокола http на https готов.
  9. 1. это пример (заготовка) скрипта который мною применялся в случае когда парсились товары с описанием в котором были изображения ( то есть они не вставлялись в ручную и потому им не задавались размеры в процентах, тем самым в мобильной версии появлялся горизонтальный скролл 2. предположим что Вы решили прикрутить к некоторым изображениям увеличение по клику не используя какие бы то ни было дополнения... само собой Вам нужно каждому изображению помимо подключения скрипта присвоить к примеру класс minimized этот скрит может стать основой и еще куча вариантов когда этот скрипт будет полезен в разработке... поверьте мне в своей работе я этот скрипт использую до сих пор регулярно а с теми картинками у которых есть уже такой класс...ни чего не случится страшного))) проверьте... ну и для перфекционистов не сложно понять, что можно указать точное вхождение указав родительский блок картинки, к примеру <script> $('#tab-description img').each(function() { /<- ТУТ указываем родительский блок изображения / $(this).addClass('img-responsive'); }); </script>
  10. Начну с того, что в сети очень много решений по выводу атрибутов в категории и по аналогии в модулях. Как правило общепринято делать так Шаг первый В контроллерах : (category.php, compare.php, manufacturer.php, search.php, special.php) в массив после 'description' => utf8_substr(strip_tags(html_entity_decode($result['description'], ENT_QUOTES, 'UTF-8')), 0, $this->config->get('config_product_description_length')) . '..', вставляем 'attribute_groups' => $this->model_catalog_product->getProductAttributes($result['product_id']), Шаг второй В файлах представления (tpl) там где необходимо <?php if($product['attribute_groups']) { ?> <?php foreach($product['attribute_groups'] as $attribute_group) { ?> <?php if(!strpos($attribute_group['name'], "—")) {?> <?php foreach($attribute_group['attribute'] as $attribute) { ?> <b><?php echo $attribute['name']; ?></b> <?php echo $attribute['text']; ?><br> <?php } ?> <?php } ?> <?php } ?> <?php } ?> Казалось бы все прекрасно и работоспособно... но когда оказывается что в разных товарах разное количество атрибутов и товары в списке категорий начинают "плясать" , уж не говорю, когда этих самых атрибутов у товара штук 20 ))) И вот начинают сыпаться вопросы: А как вывести определенные атрибуты или атрибуты из определенной группы атрибутов и пр.... и пр.... Естественно, мудрые люди начинают давать советы и инструкции по вытаскиванию групп атрибутов или самих атрибутов по ID (писать их не стану, найти в сети их не сложно). Сегодня я Вам поведаю dfv как просто и эфективно вывести определенное количество атрибутов (будь их хоть 100 у товара) Сразу предупреждаю, что никаких сортировок, выборок и прочего, тупо вывод определенного количества атрибутов. Итак, первый шаг мы делаем аналогично выше написанному А вот вместо кода во втором шаге - пишем вот такой код с счетчиком <ul class="atr"> <?php if($product['attribute_groups']) { ?> <?php $i = 0; ?> <?php foreach($product['attribute_groups'] as $attribute_group) { ?> <?php if(!strpos($attribute_group['name'], "—")) {?> <?php foreach($attribute_group['attribute'] as $attribute) { ?> <li><span class="text"><?php echo $attribute['name']; ?></span><span class="page"><?php echo $attribute['text']; ?></span></li> <?php $i++;?> <?php if($i > 3) { ?> <?php break 2; ?> <?php } ?> <?php } ?> <?php } ?> <?php } ?> <?php } ?> </ul> Обращаю внимание на эту строчку кода <?php if($i > 3) { ?> Вот тут как раз мы и задаем сколько мы будем отображать атрибутов... практика показала, что при указании <?php if($i > 3) { ?> Выведется 4 строчки атрибутов при <?php if($i > 2) { ?> Выведется 3 строчки атрибутов. Надеюсь, что логика ясна . Ну а остальное - только ваша фантазия и умелая рука верстальщика, для придания всему этому красивого и гармонирующего с вашим шаблоном сайта вида.
  11. По дефолту в Опенкарте, как правило, при вводе данных в поле пароля, видны только точки. Вjзьму для примера форму регистрации на сайте: не очень удобно для Ваших пользователей сайта не правда ли? Этой задачей и озадачились мои заказчики и попросили сделать отображение/скрытие значения в поле пароля, ну что же... воспользуемся "жабаскриптом". *Покажу сразу готовую конструкцию: <input type="password" name="password" id="password-show" class="modal-input" value="" placeholder="<?php echo $popup_logreg_login_password_placeholder; ?>" /> <img class="show-password" src="catalog/view/theme/default/image/eyesi.png" alt="" title="Показать/скрыть пароль" /> тут для нас значимы и необходимы id="password-show" и class="show-password" (вы можете вставлять свои, но и по аналогии поменять то же самое в скрипте, который размещаете где нибудь в конце страницы: <script> var pass = $('#password-show'); $('.show-password').click(function() { pass.attr('type', pass.attr('type') === 'password' ? 'text' : 'password'); }); </script> ну и пропишем стили (само собой они у Вас будут свои, но даю для примера) .show-password { position: absolute; right: 25px; margin-top: -18px; cursor: pointer; } получаем поле + "глазик" жамкаем на "глазик и получаем отображение пароля жамкаем повторно и снова получаем точки вместо пароля...
  12. Можно конечно каждой картинке в текстовом редакторе в режиме "источник" прописывать class="img-responsive" конечно, можно, но зачем если эта "небольшая проблемка" решается несколькими строчками "жабаскрипта": <script> $('img').each(function() { $(this).addClass('img-responsive'); }); </script> *само собой вставляем его в конец кода подвала footer перед </body></html>
  13. из новинок: приблуда фиксации блока при скролле средствами css position: sticky; (дочерний блок фиксируется в пределах родительского блока ) пример 1 прикрепить элемент к верхнему краю ./КЛАСС ФИКСИРУЕМОГО БЛОКА/) { position: sticky; position: -webkit-sticky;/* Safari */ top: 0; } пример 2 прикрепить элемент к нижнему краю ./КЛАСС ФИКСИРУЕМОГО БЛОКА/) { position: sticky; position: -webkit-sticky;/* Safari */ bottom: 0; }
  14. На самом деле не так страшен черт как его малюют. Приступим: Для начала обернем блок ( я от балды просто обернул код вывода меню навигации) , который надо зафиксировать при прокрутке в <div id="scroll-menu" class="default"> ... </div> Далее пишем простой ""жабаскрипт" смены класса данного блока при определенном расстоянии <script> $(document).ready(function(){ var $menu = $("#scroll-menu"); $(window).scroll(function(){ if ( $(this).scrollTop() > 100 && $menu.hasClass("default") ){ $menu.removeClass("default").addClass("fixed"); } else if($(this).scrollTop() <= 100 && $menu.hasClass("fixed")) { $menu.removeClass("fixed").addClass("default"); } });//scroll }); </script> *тут 100 - это расстояние прокрутки вверх или вниз на 100px (шапки бывают разной высоты, поэтому полной универсальности не ждите... пропишите сколько нужно) вставляем этот скрипт в шапку перед </head> Ну и стиль для фиксированного блока: #scroll-menu.fixed{ position: fixed; top: 0; z-index:99; margin:auto; width: 100% } все, господа.... просто?
  15. og_url – url адрес текущей страницы $home – переменная содержащая ссылку на главную страницу то бишь условие <?php if ($home == $og_url) { ?> условно переведем как, "если ссылка на страницу равна ссылке на главную страницу" при таком же условии, в дистрибутиве OcStore из коробки убирается ссылка на лого на главной странице ( ссылка на странице на саму себя). Но если Вам не нравится, "курите" так: <?php if (!isset($this->request->get['route']) || (isset($this->request->get['route']) && $this->request->get['route'] == 'common/home')) { ?> <!-- здесь вставить что-то только для главной страницы --> <?php } else {?> <!-- здесь вставить что-то для всех остальных страниц, кроме главной --> <?php } ?>
  16. Вариант 2 (полная замена шапки на главной) 1. Копируете в полном объеме header.tpl и обзываете его, к примеру header_home.tpl (естественно, в этом файле правим код под требуемый) грузим этот файлик туда же, где и первый в папку common 2.открываем файл контроллера header.php и там меняем это if (file_exists(DIR_TEMPLATE . $this->config->get('config_template') . '/template/common/header.tpl')) { $this->template = $this->config->get('config_template') . '/template/common/header.tpl'; } else { $this->template = 'default/template/common/header.tpl'; } на это if (!isset($this->request->get['route']) || (isset($this->request->get['route']) && ($this->request->get['route'] == 'common/home'))) { if (file_exists(DIR_TEMPLATE . $this->config->get('config_template') . '/template/common/header_home.tpl')) { $this->template = $this->config->get('config_template') . '/template/common/header_home.tpl'; } else { $this->template = 'default/template/common/header_home.tpl'; } } else { if (file_exists(DIR_TEMPLATE . $this->config->get('config_template') . '/template/common/header.tpl')) { $this->template = $this->config->get('config_template') . '/template/common/header.tpl'; } else { $this->template = 'default/template/common/header.tpl'; } } 3. идем далее в home.tpl там меняем <?php echo $header; ?> на это <?php echo $header_home; ?> Теперь у нас на главной своя шапка, отличная от шапки всех остальных страниц
  17. Вариант1 (стандартный) Приступим к несложным махинациям и переоденем шапочку сайта других страниц кроме главной. К примеру нам нужно изменить контент в пределах <header>....</header> Идем по пути catalog/view/theme/default/template/common/header.tpl ищем <header> и перед ним вставляем <?php if ($home == $og_url) { ?> далее ищем </header> и после него вставляем <?php } else { ?> <header> Тут какой то новый контент </header> <?php } ?> *SeoPro в настройках должно быть включено обязательно! После проделанных манипуляций кэш естественно обновляем
  18. Решение простое как три рубля ( три строчки кода) итак приступим, разместим, к примеру в шапке сайта в catalog/controller/common/header.php $result = $this->db->query("SELECT COUNT(*) AS `count` FROM `" . DB_PREFIX . "product` WHERE `status` = 1"); $data['products_total_count'] = $result->row['count']; в catalog/view/theme/default/template/common/header.tpl там где хотим: <div class="statistikblock"> В настоящий момент в магазине: <span class="statistik"><?php echo $products_total_count; ?></span> товаров </div> p.s. Естественно что это упрощенный вариант для понимания и при мультиязычности сайта все тексты должны выводится языковыми переменными
  19. Иногда дизайнеры "хохмят" и требуется выделить цену, оставив собственно валюту обычным шрифтом. На просторах форума и инета предлагают лезть в БД и вставлять в таблицу теги.... я б не стал ))) Вставим простой скриптик в footer.tpl <script> (function($) { $.fn.paintFirstWord= function(font) { var str = this.text(); var splited = str.split(' '); var replaced = str.split(splited[0]).join('<span style = "font-weight:'+font +';">'+splited[0]+'</span>'); this.html(replaced); }; $('.price').each( function() { $(this).paintFirstWord('700'); }); }); </script> Немного разжую чего к чему: font - это наша переменная которой мы что то там зададим в $(this).paintFirstWord(' что то тут свое '); p.s. В моем случае это - 700 $('.price').each( function() { - тут прописали класс в котором к первому элементу применится наш интегрируемый стиль p.s. В моем случае это - .price <span style = "font-weight:'+font +';">'+splited[0]+'</span> - тут пропишем интегрируемый стиль p.s. В моем случае это - font-weight: Теперь, когда Вы разобрались со скриптом, можно дерзать)))
  20. Все будет работать так же... не переживайте Если код счетчика Вы размещали не модулем, а напрямую кодом в файл footer, то просто перенесите его в код подвала нового шаблона
  21. не думаю что чем то повредит смена шаблона, база данных, в том числе все данные останутся неизменными, а значит в полной работоспособности. Вы не меняете сайт, Вы меняете лишь "оболочку" (по простому - одеваете на нее другую одежку) Примерные действия: 1. Отключаем все ocmod относящиеся к шаблону ( проверям на их наличие папку system (используйте FTP) - комментируем (к примеру переименовываем файл и ставим в конце плюсик) 2. Отключаем шаблон в настройках магазина 2. Устанавливаем новый шаблон.... заходим в шаблоны и устанавливаем его по умолчанию 3. Обновляем кеш модификаторов и проверяем работоспособность Примечание: Только когда Вы убедитесь что все установилось и работает как часики... можете удалять предыдущий шаблон по FTP ( или оставить отключенным) Возможные баги или последствия Какие то модули шаблона, жестко привязанные в настройках самого шаблона могут перестать работать... потому придется восстанавливать этот функционал путем реализации их же средствами нового шаблона ( но в теме Rapid такого точно нет (кроме кнопок соцсетей в подвале сайта)...потому тут беспокоится не стоит) Небольшая хитрость))) Если с предыдущим шаблоном были установлены какие то "свободные" (не привязанные) к шаблону дополнения и модули, то скорее всего они будут работоспособными...максимум - могут слететь стили, если они прописаны в одном файое стилей с стилями шаблона.... Ну и при использовании каких либо скриптов они так же могут размещаться в папке с шаблоном... потому некоторые правки для сохранения таких модулей возможно потребуются ( перенос папки с скиптами в папку с шаблоном или в дефолт + правка путей к ним в контроллерах или непосредственно в вьюхах ( зависит от того куда их сунул разраб старого шаблона) p.s. Все что описал относится к любой замене любого шаблона...с конкретно взятым "устаревшим" и "уставшим" шаблоном, такого не случится... он практически перекрашенный и чуть доработанный дефолт - потому и бесплатный изначально.
  22. Просмотр файла Боковое меню для мобильной версии сайта Адаптивное многоуровневое меню для любого сайта. Вы сможете создать на своем сайте не только удобное, но и понятное меню, рассчитанное для всех устройств Вы сможете создать на своем сайте не только удобное, но и понятное меню, рассчитанное для всех устройств Реализовано на основе jquery и адаптировано для ОС На данный момент реализован вывод категорий/подкатегорий до 4-х уровней вложенности, при необходимости можно добавить и другие пункты. Может применяться не только для мобильной версии, но и для "супердлинных" списков категорий Используется ocmod. Установка через менеджер дополнений - стандартно. *тестировалось на дефолте, для шаблонов возможны мелкие правки и адаптация Добавил admin Добавлено 24.03.2022 Категория Меню, дизайн, внешний вид  

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.