История заказов с постраничным выводом

1

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

6 комментариев

  • +1
    replicant replicant 16 декабря 2021 13:43 #

    Тормозит не из-за этого. Наблюдаемый эффект - следствие, но не причина. Надо искать глубже. Хотя может быть имеется ввиду действительно какое-то запредельно огромное число заказов. О каком числе заказов идет речь, когда упоминается "большое количество"?

    Постраничное решение показано тут https://support.webasyst.ru/fo... , но оно только сегментирует вывод длинного списка для удобства чтения. Проблему "торможения" оно не решит, если она лежит в другой плоскости.

    • +1
      Evgeny Fed Evgeny Fed 16 декабря 2021 14:42 #

      Больше 400 заказов

      • +2
        replicant replicant 16 декабря 2021 15:50 #

        А у вас заказы в список идут вместе с товарами или в сокращенном виде типа: "дата, номер, сумма, статус, вид доставки, вид оплаты"?

        В свое время для магазина, где у клиентов много заказов (50-100+), переписал немного my.orders.html, чтобы оставить там только первичную информацию и не тащить внутренность заказа в список.

        Попробуйте в шаблоне отсечь лишнее на этой стадии, чтобы не делать запрос в таблицу order_items, а смотреть только orders. Код содержимого там примерно такой (его можно просто закомментировать на время теста)

        {if !empty($o.items)}
            {foreach $o.items as $i}
                {$i.name|escape} <span class="gray">x {$i.quantity}</span><br />
            {/foreach}
        {/if}

        И сравните результат до и после.

        • +1
          Evgeny Fed Evgeny Fed 16 декабря 2021 18:38 #

          Теперь не тормозит, но товар искать не удобно))

          • +2
            replicant replicant 16 декабря 2021 21:33 #

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

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

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

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

            Когда-то были планы по созданию продвинутого ЛК с поиском по товарам, но ушли на второй план.

            В этом плане отличные ЛК у Ситилинка, Онлайнтрейда и т.п.

            Вот заказы сокращенным списком с пагинацией по 20 штук на страницу.




            Но рядом есть и поиск по товарам, которые заказывал.
          • +1
            Evgeny Fed Evgeny Fed 16 декабря 2021 18:59 #

            Закоментил этот код:

            {if !empty($o.items)}
            		            	<ul class="order-list">
            		                {foreach $o.items as $i}
            		                	<li>
            		                    	{$i.name|escape} <span class="bold nowrap">&nbsp;x {$i.quantity}</span>
            		                    </li>
            		                {/foreach}
            		                </ul>
            		            {/if}

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

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