Перейти до вмісту
Пошук в
  • Детальніше...
Шукати результати, які ...
Шукати результати в ...

SooR

Користувачі
  • Публікації

    1 508
  • З нами

  • Відвідування

Повідомлення, опубліковані користувачем SooR

  1. Заменяем все внешние ссылки в тексте на свои с возможностью переброса на страницу редиректа

    Допустим, наш домен myshop.com

    $description = html_entity_decode($information_info['description'], ENT_QUOTES, 'UTF-8');
    
    $description = preg_replace_callback('/((http|https):\/\/(?!myshop\.com)[\w\.\/\-=?&#]+)/', function($matches) {
      return $this->url->link('common/redirect', 'url=' . base64_encode($matches[0]));
    }, str_replace('&', '&', $description));

    а common/redirect.php примерно такой:

    <?php
    
    class ControllerCommonRedirect extends Controller {
      public function index() {
        if (!empty($this->request->get['url'])) {
          $this->response->redirect(base64_decode(rawurldecode($this->request->get['url'])), '302');
        }
      }
    }

     

  2. Указать [alt] для тега <img .. /> в каком-то html.

    При желании, можно расширить способности этой функции до указания конкретному изображению свой alt.

    public function setImgAlt($html, $alt) {
      $doc = new DOMDocument();
    
      $doc->loadHTML(mb_convert_encoding($html, 'HTML-ENTITIES', 'UTF-8'), LIBXML_HTML_NOIMPLIED | LIBXML_HTML_NODEFDTD);
    
      $tags = $doc->getElementsByTagName('img');
    
      foreach ($tags as $key => $tag) {
        if (!$tag->hasAttribute('alt') || empty($tag->getAttribute('alt'))) {
          if ($key > 0) {
            $alt .= '-' . $key;
          }
    
          $tag->setAttribute('alt', $alt);
        }
      }
    
      return $doc->saveHTML($doc->documentElement) . PHP_EOL . PHP_EOL;
    }
    
    $description = setImgAlt($description, 'Картинка не загрузилась, но у нас есть Alt!');

     

  3. Helper для определения активности окна (вкладки) браузера

    var isWinFocus = true;
    
    $(window).on('blur focus', e => isWinFocus = (e.type == 'focus'));

    Предотвращаем закрытие BS Dropdown на элементах с соотв. классом

    $(document).on('click', '.dropdown .dropdown-prevent', e => e.preventDefault());

    Второй вариант

    $(document).on('click', '.dropdown-menu .dropdown-prevent', function(e) {
      $(this).closest('.dropdown').one('hide.bs.dropdown', e => false);
    });

    Когда нужно открыть модальное окно из уже открытого окна и при закрытии второго окна открыть первое. Такое требуется, например, когда во всплывающей форме регистрации нам нужно открыть окно с текстом соглашения, а после закрытия восстановить окно с формой

    $('.modal [data-toggle="modal"]').on('click', function(e) {
      e.preventDefault();
    
      var $target = $(this), $oldModal = $target.closest('.modal'), $newModal = $($target.data().target || $target.attr('href'));
    
      if ($newModal.length > 0) {
        $oldModal.modal('hide').one('hidden.bs.modal', function() {
          $newModal.data('old-modal', $oldModal.attr('id')).modal('show').one('hidden.bs.modal', function(e) {
            $('#' + $(this).data('old-modal')).modal('show');
          });
        });
      }
    });

    Простейший загрузчик css/js. Полезен в случаях использования ресурсов по требованию.

     

    function loadResource(files, callback) {
      if (!$.isArray(files)) {
        files = [files];
      }
    
      var file = files.shift();
    
      if ('.css' == file.slice(-4)) {
        $('head').append('<link rel="stylesheet" type="text/css" href="catalog/view/' + file + '" />');
    
        if (files.length > 0) {
          loadResource(files, callback);
        } else {
          callback && callback();
        }
      } else {
        $.ajax({
          url: 'catalog/view/' + file,
          type: 'GET',
          dataType: 'script',
          cache: true,
          success: function(script) {
            if (files.length > 0) {
              loadResource(files, callback);
            } else {
              callback && callback();
            }
          }
        });
      }
    }
    
    loadResource([
      'javascript/summernote/summernote.css',
      'javascript/summernote/summernote.min.js',
      'javascript/summernote/lang/summernote-ru-RU.js'
    ], function() {
      console.info('Summernote is ready to use');
    });

     

  4. 1 минуту назад, dimanov911 сказал:

    Еще есть проблема: Так как фильтры на лету не подхватываются, то, после обновления каталога товаров, необходимо копирование фильтров запускать вручную. Это не страшно. Но вот что заметил, что после нескольких таких копирований размер таблицы oc_ocfilter_option_value_to_product возрастает в несколько раз, у меня он уже 200 МБ

     

    Думаю это не очень хорошо сказывается на быстродействии сайта.

    Вы не загрузили обновление из папки UPDATE.

    1. Удалите модификатор модуля в модификаторах.
    2. Очистите и обновите модификаторы
    3. Загрузите обновление из UPDATE
    4. Очистите и обновите модификаторы
  5. Только что, dimanov911 сказал:

    А как об этом должен догадаться посетитель сайта интересно ?:)

    Интуитивно)

     

    Я подумаю, что можно сделать в будущих версиях.

    Как вариант - не убирать кнопку, пока курсор находится в области всего блока фильтров.

    • +1 1
  6. @Nikky Добрый.

    Посадочные страницы нужны для продвижения низкочастотных запросов на выбранную группу товаров.

    Например, вы можете создать страницу для списка товаров с заголовком "Кроссовки Nike с белыми шнурками на большую ногу", при этом указав странице параметры фильтра:

    nike/shnurki/belye/razmer/46

    Также можно указать SEO текст и заголовок страницы (H1).

  7. 5 часов назад, dimanov911 сказал:

    Добрый день!

    Новая версия фильтра 4.7.4 небо и земля по сравнению с 4.19, НО

    Вот скажите у всех так? При фильтровании по кнопке, выбираем необходимые параметры, соответственно всплывает кнопка "Показать N товаров", и если ее не нажать, то через некоторое время она исчезает и применить выбранные условия для фильтрации уже невозможно.

    Мне кажется нужна еще кнопка "Показать" или "Применить фильтры" в самом низу блока фильтров....

    Здравствуйте. 

    Кнопка появляется снова, если навести на значение, которое было выбрано.

  8. @lerand@svi00

     

    Здравствуйте. Хороший вопрос.

    Открываем 

     

    catalog/controller/product/category.php

     

    для OpenCart 2 перед

    $data['continue'] = $this->url->link('common/home');

    добавляем

    if (!trim(strip_tags($data['description']))) {
      $data['thumb'] = '';
    }

    Очищаем и обновляем модификаторы.

     

    для OpenCart 1.5.* перед

    $this->data['continue'] = $this->url->link('common/home');

    добавляем

    if (!trim(strip_tags($this->data['description']))) {
      $this->data['thumb'] = '';
    }

     

  9. В 27.11.2017 в 13:25, den727 сказал:

    Доброго дня! Вопрос следующий:

     

    "Укажите лимит количества значений, которые будут выводиться в модуле фильтра товаров для каждой опции. Чтобы выводить все значения, укажите 0."

     

    Минимальное - 0, при этом он раскрывает все значения закреплённые за атрибутом. При значении 1 - он отображает одно значение, при 2-  два значения и тд. Мне нужно, что бы он вообще их не отображал, что бы была только кнопка, кликнув на которую раскрываются все. Подскажите пожалуйста, какую часть кода необходимо исправить?

    Может проще вам использовать выпадающие списки?

    "Поместить в выпадающий список" есть такая настройка.

  10. Спойлер
    
    SELECT
      p.sku,
      p.model,
      pd.name,
      GROUP_CONCAT(cd.name ORDER BY cd.category_id SEPARATOR ', ') AS category,
      p.price,
      p.quantity
      
    FROM product  p
    LEFT JOIN product_description pd ON (p.product_id = pd.product_id)
    LEFT JOIN product_to_category p2c ON (p.product_id = p2c.product_id)
    LEFT JOIN category_description cd ON (p2c.category_id = cd.category_id)
    
    GROUP BY p.product_id

     

     

  11. 19 часов назад, svi00 сказал:

    Всем добрый вечер.

    Всё никак не научусь пользоваться данным модулем или в целом Опенкарт магазином.

    Опытные пользователи!!! Подскажите пжл:

    1. Как правильно заполнять атрибуты в товаре, чтобы OCFilter правильно копировал значения для своего фильтра?

    В моём магазине есть атрибуты, которые имеют несколько значений. Пример: Материнка -  поддерживает разные процессоры.

    При заполнении атрибутов вручную - в фильтре ошибочно часто добавляются несколько одинаковых значений по смыслу (всякие ошибки в орфографии, пробелы и т.д.).

    2. Возможно есть доп модуль, который поможет решить первый вопрос? Чтобы при оформлении видно было значения от данного атрибута и легче-проще было их добавлять, несколько значений подряд через разделительный знак - как требует этого OCFilter.

    Заранее благодарен за поддержку.

    Здравствуйте. Вы используете мультиатрибуты? Модуль это поддерживает.

    По поводу форматирования текста атрибута от лишних пробелов и т.д., в последней версии модуля на 2.х это тоже реализовано.

  12. 12 часов назад, slydeev сказал:

    Доброго всем! В новой версии у seo страниц если делаю параметры например material-/poliuretan, то в других категориях не фильтрует а страница 404 и адрес как у посадочной страницы.

    Исправлено в обновлении.

    • +1 1
  13. 3 часа назад, 20strannik08 сказал:

    Здравствуйте! Вопрос, а где в каких файлах можно поправить стили у вашего модуля фильтра? что то рылся в css так и не нашел где поменять белый фон, а так же убрать разметку модуля и т.д.

     

    Здравствуйте. Стили модуля находятся в 

     

    catalog/view/theme/default/stylesheet/ocfilter/ocfilter.css

    если ваш шаблон не использует свои стили для фильтра.

×
×
  • Створити...

Important Information

На нашому сайті використовуються файли cookie і відбувається обробка деяких персональних даних користувачів, щоб поліпшити користувальницький інтерфейс. Щоб дізнатися для чого і які персональні дані ми обробляємо перейдіть за посиланням . Якщо Ви натиснете «Я даю згоду», це означає, що Ви розумієте і приймаєте всі умови, зазначені в цьому Повідомленні про конфіденційність.