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

reDream

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

    692
  • З нами

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

Усі публікації користувача reDream

  1. А что, собственно, плохого в том, что кто-то "фильтро писатель"? И да, я бы с удовольствием "не лез в системный", если бы при формировании обычной ссылки (пусть и с многомерным массивом) мне не прилетал warning.
  2. При чём тут CodeStyle? Я к тому, что многомерный массив в get - это нормально. И, как оказалось, для фильтра это очень удобно. Про post и говорить нечего, практически любой модуль, например, под OpenCart 1.5 используем многомерные массивы в post. С таким уровнем негатива на комментарий об ошибке - вы же первый закидаете какашками помидорами любой коммит, разве нет? Замечал и много где. Где мог - писал авторам. Где это было бесполезно - молча исправлял. Вряд ли сейчас кто-то кинется выкатывать очередную версию 2.3 и, тем более, 1.5. Конкретно с 3.0 - пока до стабильного релиза не добрались, есть время исправить.
  3. До Даниэля я вряд ли достучусь, а тут стоило попробовать. Похоже, я при вставке кода перепутал и ветку и метод, извиняюсь. Не "getQueryByKeyword", а "getKeywordByQuery". Смотрим сюда: https://github.com/ocStore/ocStore/blob/ocstore-3-1-0-0/upload/catalog/controller/startup/seo_url.php public function rewrite($link) { $url_info = parse_url(str_replace('&', '&', $link)); if($this->config->get('config_seo_pro')){ $url = null; } else { $url = ''; } $url_info = parse_url(str_replace('&', '&', $link)); parse_str($url_info['query'], $data); //seo_pro baseRewrite if($this->config->get('config_seo_pro')){ list($url, $data, $postfix) = $this->seo_pro->baseRewrite($data, (int)$this->config->get('config_language_id')); } ... ... И следуем по пути в https://github.com/ocStore/ocStore/blob/ocstore-3-1-0-0/upload/system/library/seopro.php public function baseRewrite($data, $language_id) { $url = null; $postfix = null; $language_id = (int)$this->config->get('config_language_id'); switch ($data['route']) { case 'product/product': $postfix = true; if (isset($data['product_id'])) { $route = 'product/product'; $path = ''; $product_id = $data['product_id']; if (isset($data['path'])) { $path = $this->getPathByProduct($product_id); } unset($data); $data['route'] = $route; if ($path && $this->config->get('config_seo_url_include_path')) { $data['path'] = $path; } $data['product_id'] = $product_id; } break; case 'product/category': if (isset($data['path'])) { $category = explode('_', $data['path']); $category = end($category); $data['path'] = $this->getPathByCategory($category); //if (!$data['path']) return $url; } break; case 'product/product/review': case 'information/information/info': case 'product/manufacturer/info': break; default: break; } $queries = array(); foreach ($data as $key => $value) { $query_ = $this->getKeywordByQuery($value); //single_url if($query_ !== null) { unset($data[$key]); //common/home if($query_ == '') return [$query_, $data , $postfix]; //common/home return ['/' . $query_, $data , $postfix]; } //single_url ... ... Обращаем внимание на это место: foreach ($data as $key => $value) { $query_ = $this->getKeywordByQuery($value); Ну и сам метод "getKeywordByQuery": public function getKeywordByQuery($query, $language_id = '') { $store_id = (int)$this->config->get('config_store_id'); if(!$language_id) { $language_id = $this->config->get('config_language_id'); } if($this->config->get('config_seo_url_cache')){ if(isset($this->keywords[$query][$store_id][$language_id])) return($this->keywords[$query][$store_id][$language_id]); } $sql = "SELECT keyword FROM " . DB_PREFIX . "seo_url WHERE query = '" . $this->db->escape($query) . "' AND store_id = '" . $store_id . "' AND language_id = '" . (int)$language_id . "' LIMIT 1"; $query = $this->db->query($sql); if ($query->num_rows) { return $query->row['keyword']; } return; } Ну и как же туда может попасть массив? Да очень просто, в каком-нибудь контроллере пишем: $this->url->link('product/category', 'language=' . $this->config->get('config_language') . '&path=' . $this->request->get['path'] . '&' . http_build_query(array('array' => ['foo' => 'bar']))); И натыкаемся на тот самый warning
  4. Вот именно что. Метод ожидает строку и, если приходит массив, никак это не проверяет и шлёт запрос в базу
  5. http://oc.redream.ru/phones/?rdrf[man][0]=8&rdrf[man][1]=11 Я в основном работаю с фреймворком yii, там это очень распространённая практика и встречается настолько часто, что привыкаешь на раз
  6. А на кой чёрт она ожидает строку? В этот метод попадают все get-параметры..
  7. Я не знаю, кто писал seo pro для этой версии, но у меня для него новость. private function getQueryByKeyword($keyword, $language_id = null) { $query = null; $store_id = (int)$this->config->get('config_store_id'); if (!$language_id) $language_id = (int)$this->config->get('config_language_id'); if ($this->config->get('config_seo_url_cache')){ if (isset($this->queries[$keyword][$store_id][$language_id])) $query = $this->queries[$keyword][$store_id][$language_id]; } else { $_query = $this->db->query("SELECT query FROM " . DB_PREFIX . "seo_url WHERE keyword = '" . $this->db->escape($keyword) . "' AND store_id = '" . $store_id . "' AND language_id = '" . $language_id . "' LIMIT 1"); $query = !empty($_query->row) ? (string)$_query->row['query'] : null; } return $query; } В этом методе парсятся $_GET - параметры. Так вот, новость: в $_GET, как и в $_POST могут быть не только строки, а ещё и МАССИВЫ!!! И вот на этом моменте: $_query = $this->db->query("SELECT query FROM " . DB_PREFIX . "seo_url WHERE keyword = '" . $this->db->escape($keyword) . "' AND store_id = '" . $store_id . "' AND language_id = '" . $language_id . "' LIMIT 1"); при попытке escape'нуть массив мы получаем: Warning: mysqli::real_escape_string() expects parameter 1 to be string, array given in .../system/library/db/mysqli.php on line 45
  8. Здравствуйте. Первым делом проверьте, обновили ли вы модификаторы - чаще всего, дело в этом. Ну и пришлите хотя бы ссылку, чтоб посмотреть.
  9. Похоже на конфликт модификаторов. Пришлите, пожалуйста, доступы в личку - поправим.
  10. Мы как-то забыли его проплатить.. Можете тестить сейчас. Превью горизонтального шаблона фильтра немного не умещается в доступное пространство. Поэтому там и нет картинки Пример горизонтальной версии можете посмотреть, например, тут - http://oc.redream.ru/apple
  11. Название можно изменить в языковых файлах фильтра, например: catalog/language/ru-ru/extension/module/dream_filter.php Параметр "value_special" (Путь может отличаться в зависимости от версии OpenCart и языка)
  12. Спасибо за покупку и оставленный отзыв. По поводу Lazy load тоже возникал вопрос. Но сделать универсальный вариант, подходящий всем, вряд ли получится - как минимум потому, что библиотек для такого функционала несколько и каждая из них вызывается со своими параметрами. В одном шаблоне может быть одна библиотека, во втором - другая, а в третьем - вообще слайдер из нескольких изображений на каждый товар сетки. Поэтому оптимальный вариант на данный момент - возможность прописать callback-функции. Когда к нам обращаются с подобными проблемами, дело 5-ти минут - определить, какую функцию запускать и отправить этот код покупателю. Но, разумеется, мы думаем в этом направлении.
  13. Добрый день. 1. Да, умеет. За это как раз отвечает параметр "учитывать количество товаров в опциях". Будут выведены только те опции, у которых количество больше нуля. Соответственно, при фильтрации по опции так же будут отображены только те товары, у которых выбранная опция в количестве больше нуля. В настройках параметр "нулевые значения" отвечает за поведение фильтра после загрузки результатов. На примере телефонов: после того, как мы выбрали в фильтре производителя "Apple", в атрибуте "Версия ОС" у таких вариантов, как "Android 5.0", "Android 6.0" и тд кол-во товаров будет 0. С помощью этого параметра можно выбрать - оставить такие варианты в фильтре, отключить(сделать неактивными), или скрыть. 2. Конечно можно 3. В большинстве случаев адаптация не требуется. При возникновении ошибок совместимости с другими модулями исправляем бесплатно в рамках техподдержки.
  14. Добрый день. Нашёл эту версию, протестировал - после некоторых "танцев с бубном" удалось запустить. Правда, фильтр по тегам работать с этой версией не будет. Разумеется, это не отменяет базовых системных требований - php не ниже 5.4 и наличие ionCube Loader не ниже 5-й версии.
  15. К сожалению, нет Админку можете посмотреть тут: http://oc.redream.ru/admin/ Логин/Пароль: demo/demo
  16. Можно было почитать описание, там есть ссылка.. А вот тут подробнее:
  17. С большим количеством товаров справляется на отлично Немного не актуально Адаптация не нужна, работает "из коробки", на шаблоне Revolution проверен неоднократно
  18. Это помним. Но неужели и вправду нужен такой длинный текст, да ещё и с разметкой?
  19. Будет исправлено в ближайшей версии фильтра. Даты выхода пока нет. Это немного другой функционал, к фильтру он относится только косвенно. Например, Dream Filter инициируется только на тех страницах, на которых он назначен и есть, что фильтровать. Но администраторы магазинов, наверняка, хотели бы видеть бесконечный скролл даже на тех страницах, где нет фильтра. Поэтому для бесконечного скролла лучше использовать сторонние решения. Имеет смысл, возьмём на заметку. Вы случайно не про то, что на скрине?
  20. Отдельной версии нет, но она и не нужна - в BS4 используются те же самые классы для panel, label и других элементов, присутствующих в фильтре
  21. Всё туда же, в личку или на [email protected] Это при условии, если на сервере установлен последний лоадер, а многие хостеры не спешат обновляться..
  22. А он и так закубирован по-человечески, просто под php 7 нужны специально закодированные файлы, которые мы отправляем по запросу.
×
×
  • Створити...

Important Information

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