Список страниц определенного сайта

Господа эксперты, подскажите пожалуйста! Можно ли как-то вывести список страниц (считай навигационное меню) но определенного сайта? Есть несколько экземпляров приложения сайт размещенных на разных урлах, нужно вывести ссылки только от одного из них. При таком запросе:

$wa->site->pages()

Возвращается список страниц первого попавшегося сайта.

2 ответа

  • 1
    Максим Креминский Webasyst 25 февраля 2019 10:32 #

    Попробуйте в скобках указать id сайта, страницы которого хотите вывести.

    • +1
      Roman Charugin Roman Charugin 25 февраля 2019 11:24 #

      Спасибо за совет! Попробовал передавать route_id в качестве параметра (т.к. другого идентификатора ресурса не нашел):

      {$pages = $wa->site->pages(6)}

      Получил пустой массив. Также заметил, что в админке при работе с несколькими сайтами webasyst оперирует роутом (pathname). Но как его передать в метод получения списка страниц, я не нашел.

      • +1
        replicant replicant 25 февраля 2019 12:37 #

        Получается у вас в пределах одного домена несколько поселений Сайт в структуре сделано, а сам сайт у вас всего один. Это так? (скриншот структуры поселений не помешал бы)

        • +1
          Roman Charugin Roman Charugin 25 февраля 2019 13:36 #

          Да, именно так. Сайт один, но приложений (или подселений) несколько.

          • +2
            replicant replicant 25 февраля 2019 14:05 #

            Можно использовать доп. параметры страниц для создания признака, по которому страницы можно разделять по принадлежности к сайту.
            Т.е. у всех страниц в пределах определенного сайта должен быть одинаковый доп.параметр.
            И таким образом можно делать выборку по этому ключу (site=1, site=2, site=n...)

            {$site_pages = $wa->site->pages()}
                {foreach $site_pages as $page}
                {if $page.site == '1' }
                    ...тут всякий html вывода для первого сайта...
                {/if}
                {/foreach}

            Соответственно для другого сайта будет другое значение ключа.

            • +1
              Roman Charugin Roman Charugin 25 февраля 2019 15:09 #

              Похоже, это единственный способ. Спасибо!

            • +1
              Roman Charugin Roman Charugin 12 апреля 2019 12:44 #

              Попробовал данный способ. К сожалению, он тоже не подходит. Т.к. при переходе в другое приложение (подселение),

              $wa->site->pages()

              возвращает пустой массив.

              • +1
                replicant replicant 12 апреля 2019 14:56 #

                Да ё моё. Ну ведь адаптировать же надо. Это просто пример того как можно этим пользоваться. А пользоваться этим можно успешно. Вы не дописали ряд условий для страниц других ваших сайтов и проверку того, на каком сайте (url) находитесь сейчас, чтобы выборка нужных страниц происходила. Всё разделение страниц делается именно доп. параметрами, но для вашего случая набор условий будет чуть сложнее, чем в примере с одним соответствием $page.site == 1, т.к. у вас не только 1, но и 2 и 3 и более значений параметра может быть.

                Готовое решение могу накидать, если совсем в тупик зайдете.

                • +1
                  Roman Charugin Roman Charugin 12 апреля 2019 15:12 #

                  Нет, вы меня не поняли. Давайте подробнее опишу ситуацию. Значит имеется 2 подселения:

                  /news
                   └ /news/item-1
                   └ /news/item-2
                  
                  /pages
                   └ /pages/item-1
                   └ /pages/item-2

                  Стоит задача, вывести в сайдбаре список новостей – страниц из /news. Для всего сайта. Когда, я допустим нахожусь в разделе каталога или на странице новости (/news/item-1), то все впорядке – следующий код

                  $wa->site->pages()

                  Возвращает список страниц, среди которых есть и новости. Я могу их отфильтровать и вывести только новости.

                  Но стоит мне перейти на одну из статичных страниц, скажем /pages/item-1, то код выше перестает работать как ожидается и вместо массива всех страниц сайта возвращает только страницы текущего подселения, т.е. /pages.

                  • +1
                    replicant replicant 12 апреля 2019 16:35 #

                    Блин, теперь ещё больше запутался. :) Новости. Страницы. Отфильтровать. Поселения... Какое приложение отвечает за новости, а какое за страницы?

                    Первоначально было два или более сайтов с одним (???) шаблоном, но с разными URL поселений и разным набором страниц, которые требовалось выводить в зависимости от сайта.

                    "Чужой сайт - потёмки". Надо вдумчиво "въехать" в вашу структуру.

                    Можно хотя бы увидеть скриншот структуры поселений и скриншот раздела страниц приложения Сайт. Приватные данные можете со скриншотов вырезать.


                    • +1
                      Roman Charugin Roman Charugin 12 апреля 2019 16:55 #

                      Так нагляднее. Проблема, что когда я перехожу на любую из страниц "О компании", "Семинары" и пр. $wa->site->pages() начинает возвращать только страницы подселения /pages

                      • +2
                        replicant replicant 12 апреля 2019 19:05 #

                        Теперь понятно и стало ещё понятнее, когда глянул ваш сайт.

                        Тут проблема не в том как вывести страницы определенного поселения, а в том, что вы пытались организовать изначально как-то всё очень странно, дважды подключив к структуре приложение Сайт. Возможно таковы были требования ТЗ, но логичным такое решение не выглядит. Я было подумал два сообщения тому назад, что новости у вас реализованы через Блог, что было бы логично, но оказалось, что и он сам по себе. Хотя категории Блога под новости лучше бы подошли на эту роль вместо Сайта. Еще ваша структура приводит к тому, что в sitemap ваши новости сейчас не попадают. Это плохо. И плохо ещё тем, что находясь визуально в пределах одного сайта по факту вы перемещаетесь между двумя разными. Также это создает прецедент такого вида http://fittonia.ru/pages/ , когда "светится" адрес бекенда. Это надо либо "глушить" перенаправлением, либо не создавать изначально.

                        Думаю вам надо избавляться от второго поселения /news/* т.к. на мой взгляд создавать его было ошибкой изначально, а сами новости организовывать системой дочерних страниц для основной страницы по адресу /news в приложении Магазин.

                        Страницы новостей и их главную организующую делать надо будет в приложении Магазин, т.к. оно сидит в корне.

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

                        Затем в сайдбаре новости вызывать уже как страницы Магазина через $wa->shop->pages(), а не как страницы Сайта.

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

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

                        • +1
                          Roman Charugin Roman Charugin 15 апреля 2019 11:18 #

                          Да, спасибо за совет!

                          Наверное проще всего вынести новости в отдельный блог. А затем уже выводить их на сайте.

                          Хотя, с моей точки зрения, новости и статичные страницы должны быть частью сайта. Блог и Магазин – это отдельные приложения. Да и вообще, очень странно, что я могу организовать какую-угодно структуру в приложении Сайт, но вот получить эту структуру я не могу.

                          • +1
                            replicant replicant 15 апреля 2019 13:05 #

                            Группа приложений Сайт, Магазин, Блог и Фото позволяет очень гибко настроить любой проект. Для каждого конкретного случая необходимо индивидуально планировать Структуру как с точки зрения удобства дальнейшего администрирования контента, так и с точки зрения удобства навигации посетителя.

                            В большинстве случаев создание контента через приложение Сайт можно не использовать т.к. основной функционал создания статики присутствует во всех остальных приложениях. Однако в каких-то проектах без контента Сайта не обойтись, но для этого должна быть 100% необходимость и это нужно четко понимать.

                            Вашу проблему создал Сайт, дважды поселенный в одном и том же домене по двум адресам /pages/ и /news/. Это породило разделение контента между двумя поселениями, как если бы это было в случае мультивитринной конфигурации с несколькими доменами, хотя визуально весь контент с точки зрения посетителя как был так и остался в пределах одного сайта сети Интернет.

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

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

                            Сохранится работа выпадающих менюшек (см. скриншот) и всё станет очень просто организовано.



                            З.Ы. Недавно пришлось исправлять сайт кафе одного моего знакомого, которому кто-то сделал сайт, завязав всё в такой клубок, что администрировать контент было больно, страшно и неудобно. В итоге всё было перенесено на WA и разложено по полочкам.
  • -2

    "из коробки" никак. решение https://www.webasyst.ru/store/plugin/menu/ensosite/

Добавить ответ

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