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

Scyth

Новачок
  
  • Публікації

    11
  • З нами

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

Інформація

  • Стать
    Мужчина

Відвідувачі профілю

Блок відвідувачів профілю відключений і не буде доступний широкому іншим користувачам

Scyth's Achievements

Rookie

Rookie (2/14)

  • First Post
  • Collaborator
  • Week One Done
  • One Month Later
  • One Year In

Recent Badges

1

Репутація

  1. А модуль этот что использует? Некий UID в куках + БД? Вообще странное у опенкарт решение по хранению корзины ровно час. Притом лимит жёстко прописан в коде, когда по хорошему его надо выносить как минимум в конфигурацию. И второе, он никак не коррелирует с ограничением gc_maxlifetime, что тоже в минус разработчикам. Если уж они связывают корзину с сессией, то пусть тогда и лимиты привяжут друг к другу, чтобы не править в двух местах. Хотя требовать от бесплатного движка лучшего качества, наверное, не очень этично
  2. Это вы не понимаете. И не поймёте, пока специального образования не получите, видимо. Разница есть. Гуглите как работает интерпретатор PHP.
  3. В продакш версии (и даже в более поздней rc-версии) это всё ещё есть: https://github.com/opencart/opencart/blob/3.0.2.1_rc/upload/catalog/controller/startup/seo_url.php А так молодцы, поправили. Не всё так плохо у текущих контрибьюторов. В отличие от местных комментаторов, которые не понимают разницы между *if* и *else if*. Жаль только, что стабильные релизы медленно выпускаются. Версии 3.0.2.0 уже 1,5 года как, судя по оф. сайту.
  4. Для тех кто плохо знаком с базовыми алгоритмами и основами ЯП: одна и та же переменная проверяется на соответствие либо через switch ... case, либо на крайний случай, через if ... else. То что выше - бессмыслица, порождённая незнанием как что работает. Когда первое же условие = true, нет смысла проверять ту же самую переменную на соответствие другим значениям. Ибо они все будут false. Называть такое "простотой кода" язык не поворачивается, т.к. это усложнение кода для обработчика. Да и чтение кода замедляет. Потому что надо каждый блок глазами пробежать, что автор имел ввиду. Точно ли там простое сравнение той же самой переменной или есть доп. условия? В случае со switch ... case код понятнее и читается быстрее. Так что это называется "грязный код", но никак не простой. И если вы не понимаете таких примитивных вещей, то не вижу смысла вообще дальше с вами вести дискуссию.
  5. Да, в курсе. У SeoPro одна операция с кэшем (вытянуть) на каждый запрос, у меня две (вытянуть и в конце сохранить). Я же предлагал выше заглянуть в класс ControllerStartupSeoUrl. Или вы хотите чтобы я цитатами кода тут топик заспамил? ОК. Как вам такой пример творения индийского школьника? Всё из того же класса, далеко ходить не надо. if ($url[0] == 'product_id') { $this->request->get['product_id'] = $url[1]; } if ($url[0] == 'category_id') { if (!isset($this->request->get['path'])) { $this->request->get['path'] = $url[1]; } else { $this->request->get['path'] .= '_' . $url[1]; } } if ($url[0] == 'manufacturer_id') { $this->request->get['manufacturer_id'] = $url[1]; } if ($url[0] == 'information_id') { $this->request->get['information_id'] = $url[1]; }
  6. Я писал выше, что можно было бы сделать кэширование поумнее и с многоуровневой вложенностью (чтобы не тянуть полный кэш, а только необходимые данные из него и вообще обойтись без JSON-кодирования), но опенкартовская реализация кэша ограничивает входящие данные строковым типом. Для интереса, глянул seoPro, который тут выше Чукча расхваливал, так вот он использует подобный же принцип кеширования. Вытягивает ВСЕ записи ЧПУ и помещает их в кэш. И уже с кэшем работает. Так что можете проверить производительность метода на своих 70 тысяч товаров с включенным seoPro и без него. Но навскидку могу сказать, что кэш из 2 мегабайт (если предположить что ключ и значение каждой ссылки занимает в среднем 32 байта) отработает быстрее, чем 30 запросов к БД. Для справки, БД тоже тянет данные и свой кэш с ФС. Но в первом случае идёт одно обращение к ФС, во втором - 30. Если же подключен memcache, то СУБД вообще сосёт палец в сторонке, т.к. обращения к ФС вообще не произойдёт в первом случае. Блин, зачем я всё это рассказываю. Люди, погуглите про кэширование, что это, как оно применяется и зачем оно нужно. Такие примитивные вопросы задаёте, ей богу.
  7. Минимум 200-кратное увеличение производительности данного метода ни о чём, конечно не говорит, да? И в сравнении "очень много не нужных сущностей" против "очень много ненужных запросов", я выбираю первое. Хотя можно и поумнее сделать кэширование, согласен. Но смысла не вижу тратить на это время, если все всё равно "хавают" этот корявое коробочное решение, то для них 200-кратное увеличение производительности против 1000-кратного роли никакой не сыграет. Кроме того, кэш ограничен хранением строк (даже если подключить какой-нибудь memcache или APC, ограничения OpenCart не позволят использовать его в полную силу). Это ещё одна причина не тратить своё время на экстра-оптимизацию.
  8. В общем доработал коробочное решение. Базируется полностью на стандартной функциональности SEO URL. Что добавлено: Кэширование ссылок ЧПУ. Теперь каждый раз при отрисовке новой ссылки с ЧПУ, система не делает запрос в базу (иногда она делала и по несколько запросов на одну ссылку). Сто ссылок на страницу могло обернутся более сотней запросов в БД. Кому оно надо? Кэш ЧПУ очищается при добавлении/редактировании/удалении ссылки через стандартный интерфейс в админке. По тестам на реальных данных кэширование ускоряет отдачу ссылок на 2-3 порядка (минимум в 200 раз быстрее) . Гибкость в создании ЧПУ. Отныне любой маршрут без дополнительных параметров можно преобразовать в ЧПУ. А не только закостыленные раньше 4 варианта. Старый алгоритм, кстати, также работает, патч расширяет его, а не заменяет. ЧПУ для домашней страницы также работает! Достаточно добавить запись следующего вида: Патч прикрепляю (применять через git apply): SEO_URL+.patch SEO URL+ работает для Opencart 3.0.2.0. Для других версий не тестировалось.
  9. UPD: Действительно, нашёл где используется _route_. В методе ControllerStartupSeoUrl->index() обрабатываются адреса с этим параметром. И если в SEO URL создать запись, как показал lexxkrt, то страница site.local/contact действительно откроет контакты. НО! Это не работает для генерации ссылок! Т.е. ссылка ЧПУ как бы есть, но она нигде не выводится (если только вы не вобьёте её вручную). В методе ControllerStartupSeoUrl->rewrite() закостылен ограниченный набор маршрутов, которые я описал в предыдущем сообщении. И ссылки по ключам, указанным в админке, в разделе SEO URL вы нигде не увидите. Хотя они и будут работать, но не будут генерироваться в коде. Кто же всё ещё сомневается в "говнокодости" системы opencart, добро пожаловать в этот самый класс ControllerStartupSeoUrl. Там полный набор bad practice, начиная от индусского перебора одной и той же переменной через if()... if()... if()... if()... и заканчивая ограничительными костылями or ... or ... or ... для конкретных маршрутов.
  10. Буду рад если просветите. Пожалуйста, с сылками на код оригинальной коробочной сборки. P.S. Но идеи говнокода это не отменяет. Худшей и более затратной по ресурсам реализации ЧПУ я ещё ни в одном фреймворке не видел.
  11. Третий день копаюсь в Opencart 3.0.2.0. Случай свёл меня с ним как с "наиболее популярным интернет-магазином". Уж лучше бы выбрал платный, ей богу. Такого говнокода под капотом я не видел со времён чтения "творений" индусских разработчиков. lexxkrt, не обманывайте пользователей. Из коробки это не работает. По крайней мере без каких-то дополнительных правок/модулей. Могу привести вам кусок кода, где обрабатываются ЧПУ перед выводом. И там закостылена обработка ссылок только на: 1. продукты, 2. производителей, 3. категории и страницы с информацией (только information/information!). Остальное игнорится и выводится без ЧПУ. Так что каких-то красивых и правильных решений здесь предлагать не буду. Ударим костылями по говнокоду. Вам поможет следующее: web\catalog\controller\startup\seo_url.php, строку 124 return $link; заменяете на return str_replace(['index.php?route=','common/home'], [], $link); Также удостоверьтесь что в файле .htaccess у вас есть строчка RewriteRule ^([^?]*) index.php?route=$1 [L,QSA] Именно "route=", а не "_route_=", как в оригинальном коробочном .htaccess!

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

Important Information

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