Приведите пример для аджакса в хелпере, дальше сам дожую Есть решение

Придумал фишку - клиент жмет кнопку на главной и в ответ получает список товаров, например, новинки.

Как это сделать аджаксом, если эти новинки получаю как список (в админке Товары -> Список типа фильтр) ? Как обратиться к хелперу?

Сразу выводить на странице не хотелось бы, а только после клика по кнопке, так список в итоге будет длинный, 100-200 товаров

17 ответов

  • 1
    Syrnik.com 17 августа 2016 11:38 #

    В хелпере не выйдет. Нужен полноценный плагин. Ибо роутинг.

  • 2
    Rat 17 августа 2016 13:08 # Решение

    Если попытаться получить содержимое страницы "Сайта" через AJAX, то вернётся только её основное содержимое, без остальной обвязки.

    Поэтому можно в код шаблона темы дизайна "Сайта" page.html добавить условие вида

    {if $wa->get('ajax') == 'product_list'}
        {* тут код вставки списка товаров *}
    {else}
        {* тут текущее стандартное содержимое шаблона page.html *}
    {/if}

    Если затем к любой опубликованной странице "Сайта" обратиться через AJAX с GET-параметром ?ajax=product_list, то должно вернуться HTML-содержимое списка товаров.

    Но, конечно, это из разряда хаков, когда неохота или нет возможности писать целый плагин из-за такой "мелочи".

    * Описанное не проверял, но вроде должно работать.

    • +1
      Сыроежкин Сергей Сыроежкин Сергей 17 августа 2016 14:24 #

      спасибо. думал, может есть какие-то хелперы штатные, к которым можно было бы обратиться через урл

      • +2
        Rat Rat 17 августа 2016 14:26 #

        Хелперы — они только для отображения данных на странице, но не для обработки запросов к сайту. Для обработки запросов нужен контроллер.

        • +1
          Сыроежкин Сергей Сыроежкин Сергей 17 августа 2016 15:08 #

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

          как теперь лучше поступить с этой тест-страничкой?

          оставить - будет видна поисковикам,

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

          какой вариант предпочтительнее?

          • +2
            Rat Rat 17 августа 2016 15:14 #

            Измените условие

            {if $wa->get('ajax') == 'product_list'}

            так:

            {if $wa->get('ajax') == 'product_list' && $page.url == 'mypageurl/'}

            Тогда эта ветка кода будет работать для единственной страницы с адресом mypageurl/ (выберите одну из существующих нормальных страниц для этих целей в качестве "жертвы" и укажите её URL вместо mypageurl/ в условии).

            Я понимаю, как некрасиво всё это выглядит, то надо же придумать для вас какое-то простое решение :)

            • +1
              Сыроежкин Сергей Сыроежкин Сергей 17 августа 2016 15:24 #

              разве так? я же вставляю условие на этой же странице, зачем ей узнавать свой собственный урл?

              • +1
                Rat Rat 17 августа 2016 15:27 #

                Я вам выше предлагал добавить условие в шаблоне page.html, а не в страницу. Подумал, что вы так и сделали.

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

                • +1
                  Nichikov Eugen Nichikov Eugen 17 августа 2016 15:31 #

                  Ну или использовать страницу-черновик вместе с параметром preview_url, раз уж речь о костылях.

                  • +1
                    Rat Rat 17 августа 2016 15:32 #

                    А без авторизации в бекенде разве будет работать?

                    • +1
                      Nichikov Eugen Nichikov Eugen 17 августа 2016 15:47 #

                      Да, вполне.

                      Скрытое поселение "Сайта". Обрезанная тема с {$content} в index.html и {$page.content} в page.html

                      И страницами-черновиками вообще можем генерировать любой контент :) CSV, к примеру.

                  • +1
                    Сыроежкин Сергей Сыроежкин Сергей 17 августа 2016 15:45 #

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

                    • +1
                      Rat Rat 17 августа 2016 15:50 #

                      Потому что вам пришлось для отдачи списка товаров использовать страницу, которая изначально для этого не предназначалась (ведь так?). Притом даже страницу другого приложения (Сайт), а не Shop-Script. По моим ощущениям это не выглядит как архитектурно стройное решение.

                      А если вы когда-нибудь решите удалить эту страницу, изменить её URL или убрать её в черновики, то можете забыть о её дополнительной роли в работе магазина, и подгрузка списков товаров через AJAX неожиданно сломается.

                      • +1
                        Сыроежкин Сергей Сыроежкин Сергей 17 августа 2016 15:52 #

                        я планирую это все на главной, главная - это магазин

                        • +1
                          Сыроежкин Сергей Сыроежкин Сергей 17 августа 2016 15:59 #

                          щас подумал - а если на саму себя через POST? тут же все и получу...

  • 1
    Сыроежкин Сергей 17 августа 2016 16:05 #

    неплохое обсуждении получилось, да еще и в гугле если набрать "дальше сам дожую" - эта страница первая))))

    • +3
      Nichikov Eugen Nichikov Eugen 17 августа 2016 16:22 #

      дальше сам дожую скачать онлайн на высокой скорости без СМС и регистрации

Эта тема в архиве. Добавление комментариев к ней отключено.