Битые ссылки в корзине магазина с несколькими витринами Принято

2

Добрый день.

Давнишняя проблема, на которую я уже обращал внимание, но решения нет. Если в магазине несколько витрин, и каждый товар привязан к своей витрине, то в корзине для части товаров будут битые ссылки (так как все ссылки в корзине генерируются с привязкой к текущей витрине, в которой конкретного товара может и не быть). Нужно исправить генерацию ссылок на товары, сделав проверку на то, к какой витрине товар привязан. Если для пошагового оформления заказа это нетрудно поправить в шаблоне, то для оформления заказа в корзине это значительно сложнее, если вообще возможно.

22 комментария

  • +1
    Михаил Ушенин Михаил Ушенин 3 февраля 2023 11:57 #

    Это происходит в том случае, если покупатель в одном и том же браузере добавил товар в корзину сначала на одной витрине, а потом добавил товар в корзину на другой витрине и потом перешёл в корзину?

  • +1
    Алексей Алексей Разработчик 3 февраля 2023 12:11 #

    Не обязательно добавлять товары из разных витрин. Можно добавить товар в одной витрине, а в корзину зайти в другой. Эффект тот же - битая ссылка.

    • +1
      Михаил Ушенин Михаил Ушенин 3 февраля 2023 14:13 #


      добавить товар в одной витрине, а в корзину зайти в другой

      У посетителей вашего магазина такое уже было — об этом вам сообщали или вы видели это в отчётах онлайн-метрики?

    • +1
      Алексей Алексей Разработчик 3 февраля 2023 14:39 #

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

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

      • +1
        Михаил Ушенин Михаил Ушенин 3 февраля 2023 16:01 #

        большинство не заметит, потому что набирают товары на одной витрине

        А точнее, все? У вас точно есть покупатели, которые добавляют товары в корзину на нескольких ваших витринах?

      • +1
        Алексей Алексей Разработчик 3 февраля 2023 16:43 #

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

      • +1
        replicant replicant 4 февраля 2023 11:39 #

        Когда-то писал, что содержимое корзины не проверяется на типы товаров и это по сути единственное место, где мультивитринные товары разных типов могут просочиться (по-моему там ещё залогиниться для этого надо, а не под анонимом сидеть). Это похоже та же самая ситуация.

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

        И да, у меня такие покупатели тоже встречаются. Т.к. основой для идентификации покупателя является номер телефона, а товары у нас редкие, то шанс оформления покупателем заказа на одной витрине и сам факт наполнения корзины на двух сайтах сразу далеко не нулевой.

        • +1
          Алексей Алексей Разработчик 4 февраля 2023 15:29 #

          Если бы в корзине витрины собирались бы только товары данной витрины, это было бы полбеды. Сейчас же корзина едина для всех витрин, а ссылки жестко привязаны к текущей витрине. Аналогично, поправил в шаблоне (хоть и костыли, но рабочие), но с оформлением в корзине не совладал - не настолько силен в javascript, а там, похоже, нужно глобально переписывать. Гораздо проще пофиксить сам движок, надеюсь, разработчики все же возьмутся за это. 

        • +1
          Михаил Ушенин Михаил Ушенин 6 февраля 2023 09:34 #

          Ваши витрины созданы в пределах одного сайта?

          • +1
            Алексей Алексей Разработчик 6 февраля 2023 09:38 #

            Да

            • +1
              Михаил Ушенин Михаил Ушенин 6 февраля 2023 11:29 #

              Разграничение товаров по корзинам сейчас работает только для витрин, настроенных на отдельных сайтах. В пределах одного сайта корзина используется общая. Текущая рекомендация в таком случае — организовать каждую витрину на отдельном сайте.

              • +1
                Алексей Алексей Разработчик 6 февраля 2023 12:08 #

                То есть чинить никто не будет?

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

                • +1
                  Михаил Ушенин Михаил Ушенин 6 февраля 2023 13:00 #

                  Жалоб на это крайне мало, и есть рабочий способ обойти проблему, если для кого-то она действительно важна. При таких обстоятельствах шансы изменения текущей логики работы корзины в ближайшее время невелики.

                  • +1
                    Алексей Алексей Разработчик 6 февраля 2023 13:17 #

                    Я не предлагаю менять логику работы корзины. Нужно просто поправить механизм формирования ссылок, сделать так, чтобы при этом учитывалась витрина, к которой привязан товар. А эти ссылки вылезают не только в корзине, но и, например, в письмах. Это просто баг, который нужно поправить, если вы заявляете мультивитринность. А то логика у вас интересная - раз немногие этим пользуются, пусть сами и исправляют, за свои деньги... 

                    • +1
                      Михаил Ушенин Михаил Ушенин 6 февраля 2023 14:01 #

                      Я не предлагаю менять логику работы корзины. Нужно просто поправить механизм формирования ссылок, сделать так, чтобы при этом учитывалась витрина, к которой привязан товар

                      Возможно, мы говорим о разном. Давайте уточним.

                      Проблема, которую вы предлагаете устранить, заключается в том, что в корзине одной витрины видны товары, недоступные на этой витрине, но доступные на другой витрине. Так?

                      • +1
                        Алексей Алексей Разработчик 6 февраля 2023 14:36 #

                        Видимо, я свалил все в одну кучу. Нет, я не предлагаю, переделывать витрины, я предлагаю починить механизм формирования ссылок на товары (который используется не только в корзине, но и в письмах и, вероятно, в личном кабинете покупателя, и в настоящее время формирует все ссылки единообразно - по текущей или первой витрине). Соответственно, для товаров, которые на этой витрине недоступны, формируются неверные ссылки (как собственно на товары, так и на изображения к ним). Я предлагаю исправить эту ситуацию и сделать так, чтобы ссылки на товары формировались с учетом витрины, к которой эти товары привязаны. 

                        • +1
                          Михаил Ушенин Михаил Ушенин 6 февраля 2023 15:44 #

                          для товаров, которые на этой витрине недоступны, формируются неверные ссылки

                          Как вы предлагаете правильно формировать ссылки на товары, которые недоступны на данной витрине?

                          • +1
                            Алексей Алексей Разработчик 6 февраля 2023 16:03 #

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

                            {if $item.product.type_id == 1}

                            {$shopurl="shop1"}

                            {elseif $item.product.type_id == 2}

                            {$shopurl="shop2"}

                            {/if}

                            <div class="col w1 item-thumb"><a href="/{$shopurl}/{$item.product.category_url}/{$item.product.url}" title="{$item.product.name|escape}">{$wa->shop->productImgHtml($item.product, '96x96', ['default' => "`$wa_theme_url`img/dummy48.png"])}</a>&nbsp;</div> <div class="col w9 item-name"> <a href="/{$shopurl}/{$item.product.category_url}/{$item.product.url}" class="bold">{$item.product.name|escape}</a> {if $item.sku_name && $item.sku_name != $item.product.name}{$item.sku_name|escape}{/if} </div>

                            В общем виде нужно как-то определить доступность товара на конкретной витрине. Если вы готовы заняться починкой ссылок, я тоже могу поучаствовать, попробовать поправить код, чтобы после проверки его внедрили в очередное обновление. Править код при каждом обновлении движка не очень интересно. 

                          • +1
                            replicant replicant 7 февраля 2023 13:28 #

                            Добавлю ещё от себя ссылку на старую тему от 28 марта 2020 года об этом же https://support.webasyst.ru/forum/35567/rabota-korziny-v-rezhime-multivitriny-proiskhodit-bez-proverki-tipa-tovara/

                            Проверка типов может в теме дизайна может быть проведена двумя способами:

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

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

                            Но проверка типов в шаблонах - это костыль для большой недоработки в механизме корзины.

                            Проблема формирования единственного значения code в таблице shop_cart_items без привязки последнего к витрине и является тем камнем преткновения, в который мы и уперлись.

                            Моё предложение состоит в том, чтобы формировать уникальный code не только с привязкой к ID аккаунта как это делается сейчас и неизменно ещё со времен отсутствия мультивитринности, но ещё и с привязкой к ID домена и номеру ROUTE для конкретной витрины.

                            Также добавлю от себя, что это работает, но модификацию кода движка тут не буду публиковать. В лабораторных условиях с измененной структурой таблицы shop_cart_items мне удалось добиться желаемого.

                            Т.е. для ситуации, когда имеется структура даже такого вида

                            Домен А, витрина А, тип товара А
                            Домен Б, витрина Б, тип товара Б
                            Домен В, витрина В1, типа товара В1 и в том же домене витрина В2 с типом товара В2

                            можно получить 4!!! уникальных корзины для одного и того же авторизованного аккаунта, при этом в таких корзинах не будет проблемы "проникновения" лишних типов товаров т.к. укомплектовать набор items в корзину из несооствествующих типов мы просто не сможем ибо у нас эти наборы будут соотноситься с разными code.

                            Формально это ошибка на уровне работы движка, т.к. заявляя мультивитринность формировать code корзины так, как он формируется сейчас, просто нельзя. Это недостаточно для корректной работы механизма определяющего содержимое корзины и сопоставляющего корзину с ID контакта.

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

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

                            ---------------------
                            А теперь ещё немного накину на десерт сладенького. Авторизованный покупатель делает заказ на витрине А, спустя некоторое время делает заказ на витрине Б, потом что-нибудь покупает на витрине В как гость, но менеджеры есс-но склеивают это по номеру телефона и/или почте в одну персону (практика нормальная). Внимание вопрос. Что он видит в своем ЛК и какие составы заказов он получит? К какой витрине относятся заказы через бекенд?

                            Вы не переделываете ЛК пользователя и до сих пор не фильтруете заказы по витринам? Тогда мы идем к вам! :)))
                            ---------------------

                            Мультивитринность всё-таки должна быть чуть более мульти. Надеюсь это будет исправлено в будущем и новую логику работы корзины мы увидим.


                            • +1
                              Алексей Алексей Разработчик 7 февраля 2023 14:30 #

                              Это как раз второй вариант решения проблемы, когда для каждой витрины формируется своя корзина. Он имеет право на существование, но в моем конкретном случае удобнее общая корзина (чтобы покупатель мог оформить один заказ и один раз заплатить за доставку). Поэтому оптимально было бы как раз наличие настройки "Объединять корзины", чтобы можно было получить как индивидуальные корзины для разных витрин, так и общую корзину (только с правильно формируемыми ссылками на товары). И в последнем случае было бы логично иметь одну ссылку на корзину (условно, /cart), а не разные ссылки для каждой витрины. Но это уже я придираюсь...

                              Добавить комментарий

                              Чтобы добавить комментарий, зарегистрируйтесь или войдите