К содержанию

Скрыть чанк, если ресурс не опубликован

Добрый день!
Не как не могу найти, возможно так и не получиться сделать, по средствам модефикаторов скрыть чанк, если ресурс с определенный id не опубликован.
Например на главной вывожу новости, но нет не одной опубликованной, можно как то скрыть чанк, если сниму с публикации id 2?
Сергей
Сергей
04 января 2019, 11:52
modx.pro
2 317
Реклама

Комментарии: 29

Vlad Brise
Vlad Brise Проверенный
04 января 2019, 13:11
Лучше всего это делать на Fenom. Если я правильно понял ваш вопрос
{set $news = '!pdoResources'|snippet:[
    'parents' => 'айди ресурса с новостями'
  ]}
  {if $news}
    {$news} {*Здесь вызываем сниппет*}
  {/if}
    Сергей
    Сергей Проверенный
    04 января 2019, 13:14
    Это я так полагаю что скрывается если нет дочерних ресурсов? А я хотел сделать условие на публикацию. Но спасибо за решение.
      Vlad Brise
      Vlad Brise Проверенный
      04 января 2019, 13:17
      В таком случае
      {if $_modx->resource.publishedon == 1}Содержимое{/if}
      Но лучше первый вариант, если нет ресурсов, то ничего не выведет.
        Сергей
        Сергей Проверенный
        04 января 2019, 13:33
        В данной примере 1 — это id ресурса? или 1 — опубликован? Как сделать без Fenom? Еще раз спасибо за помощь!
          Vlad Brise
          Vlad Brise Проверенный
          04 января 2019, 13:47
          1 — означает опубликован. Я не пользовался стандартным синтаксисом уже сто лет, так что понятия не имею, просто включите феном и попробуйте, вы можете использовать два шаблонизатора
            Баха Волков
            Баха Волков Администратор
            04 января 2019, 14:32
            Если не хотите использовать fenom, то смотрите в сторону fastfield и pxh фильтры, ваша задача решается просто
          Александр Мельник
          Александр Мельник Проверенный
          04 января 2019, 15:03
          Это я так полагаю что скрывается если нет дочерних ресурсов?
          Нет, вы ошибаетесь.
          В переменную news попадут результаты работы сниппета pdoResources. Поскольку по умолчанию он отбирает только опубликованные ресурсы, то это именно то что вам нужно.
          Далее проверяем, есть ли что то в этой переменной и если есть, сразу выводим результат, ведь он уже лежит в переменной news. Никакой сниппет внутри условия уже вызывать не нужно, это будет бесполезно.
          Ни и плюс, проверку пустоты перменной лучше делать корректно, со знаком вопроса в конце.
          {if $news?}
          Баха Волков
          Баха Волков Администратор
          04 января 2019, 14:30
          Зачем вызывать некэшированный сниппет?

          {*Здесь вызываем сниппет*}
          Тут уже вызван сниппет и выводится его результат

          {if $news}
              {$news} {*Здесь вызываем сниппет*}
            {/if}
          В данной записи нет смысла
            Vlad Brise
            Vlad Brise Проверенный
            04 января 2019, 14:34
            Он не вызывается, а помещается в переменную, потом его можно вызывать. Мой способ уже не актуален, так как ему нужно по публикации выводить.
              Баха Волков
              Баха Волков Администратор
              04 января 2019, 14:38
              Убежден, что вы ошибаетесь
              Баха Волков
              Баха Волков Администратор
              04 января 2019, 22:33
              Он не вызывается, а помещается в переменную, потом его можно вызывать.
              Кстати, по вашей логике:

              {set $news = '!pdoResources'|snippet:[
                  'parents' => 'айди ресурса с новостями'
              ]}
              {if $news} {* <-- По вашей логике сниппет якобы должен вызываться здесь *}
                  {$news}
              {/if}
              Вопрос, откуда условию известен результат?

              {if $news} {* Откуда здесь условию известен результат? *}
                  {$news} {*Если сниппет вызывается тут, то (см. выше)*}
              {/if}
              Сергей
              Сергей Проверенный
              04 января 2019, 14:36
              Можно как то осуществить проверку на публикацию ресурса по id и скрыть чанк если ресурс не опубликован?
                Баха Волков
                Баха Волков Администратор
                04 января 2019, 14:38
                Можно, я вам направление дал
            Павел Романов
            Павел Романов Проверенный
            04 января 2019, 18:07
            [[$[[#2.publishedon:is=`1`:then=`chunk_name`]]]]
              Сергей
              Сергей Проверенный
              04 января 2019, 18:22
              Что бы я без вас делал, спасибо добрый человек!
                Сергей
                Сергей Проверенный
                04 января 2019, 18:39
                Хотя что то не работает, но смысл такой
                  snyadanak
                  snyadanak Старожил
                  04 января 2019, 22:13
                  Может такое?
                  {if '!pdoField' | snippet : [ 'id' => 2, 'field' => 'published' ] == 1}
                      {include 'chunk'}
                  {/if}
                    Баха Волков
                    Баха Волков Администратор
                    04 января 2019, 22:23
                    Зачем pdoField, тем более некэшированный, когда есть модификатор resource?
                      snyadanak
                      snyadanak Старожил
                      04 января 2019, 22:29
                      Ой да пожалуйста

                      {if 2 | resource : 'publish' == 1}
                          {include 'chunk'}
                      {/if}
                        Баха Волков
                        Баха Волков Администратор
                        05 января 2019, 00:20
                        Поле если не ошибаюсь называется published ?

                        Вы только не обижайтесь, а то уже слышал, что могу кого-то задеть)
                          snyadanak
                          snyadanak Старожил
                          05 января 2019, 00:23
                          Да-да, у меня Новый год еще не закончился. А код исправить уже не могу =/
              Алексей Федоров
              04 января 2019, 22:34
              Непонятен вопрос. Этот чанк в принципе один или вызывается в составе сниппета? Условие касается только документа с id=2 или всех неопубликованных? Я так понял, что есть раздел «Новости» с id=2 и есть блок вывода всех новостей на главной. Если так, то это решается параметром pdoResources:
              &wrapIfEmpty=`0`
              Если что-то более замороченное, на этот случай тоже есть отличная штука в том же сниппете:
              &conditionalTpls
                Сергей
                Сергей Проверенный
                05 января 2019, 02:40
                Спасибо за помощь, но то что вы говорите это не верно.
                1. Есть главная страница на ней выводятся новости. Этот блог имеет свое оформление и имеет несколько сниппетов и все это в оном чанке
                2. Есть родитесь с новостями, если новостей нет, я скрываю этот раздел и все
                Но возникает одно НО на главной странице оформление не куда не делось.

                &conditionalTpls — это для выборки
                &tplWrapper — это интересно, но боюсь не смогу внедрить так как там несколько сниппетов выводится
                Поэтому надо условия исключительно на опубликованный ресурс.
                  Алексей Федоров
                  05 января 2019, 08:48
                  Код чанка можно? С указанием, что мешает))
                    Сергей
                    Сергей Проверенный
                    05 января 2019, 12:17
                    Да, пожалуйста)

                    <div class="container-8" style="margin-top: 40px; margin-bottom: 50px;">
                              <div class="intec-content widget-services">
                                <div class="intec-content-wrapper">
                                  <div class="widget-services-title ">
                                    [[!pdoField?id=`2`&field=`pagetitle`]]</div>
                                  <div class="widget-services-description ">
                    			  </div>
                                  <div class="widget-services-desktop">
                                    <div class="intec-content">
                                      <div class="intec-content-wrapper">
                                        <div class="widget-services-view widget-services-view-tile clearfix">
                                          <div class="widget-services-view-wrapper">
                                            [[pdoResources? &tpl=`_uslugi` &parents=`2` &processTVs=`1` &includeTVs=`price,ot,unit,home` &sortby=`menuindex` &sortdir=`ASC` &where=`["(home LIKE 'Да')"]` ]]
                                          </div>
                                        </div>
                                      </div>
                                    </div>
                                  </div>
                                  <div class="widget-services-mobile">
                                    <div class="intec-content">
                                      <div class="intec-content-wrapper">
                                        <div class="widget-services-view widget-services-view-tile clearfix">
                                          <div class="widget-services-view-wrapper">
                                            [[pdoResources? &tpl=`_uslugi` &parents=`2` &processTVs=`1` &includeTVs=`price,ot,unit,home` &sortby=`menuindex` &sortdir=`ASC` &where=`["(home LIKE 'Да')"]` ]]
                                          </div>
                                        </div>
                                      </div>
                                    </div>
                                  </div>
                                  <div class="intec-content">
                                    <div class="intec-content-wrapper">
                                      <div class="widget-services-buttons">
                                        <a href="[[~2]]" class="intec-button intec-button-md intec-button-cl-common intec-button-transparent">
                                                Все услуги                        </a>
                                      </div>
                                    </div>
                                  </div>
                                </div>
                              </div>
                            </div>
                Сергей
                Сергей Проверенный
                05 января 2019, 12:26
                Вообщем может кому-то пригодится:

                {if 2 | resource : 'published' == 1}
                    {include 'Название чанка'}
                {/if}
                ИЛИ
                [[$[[#2.published:is=`1`:then=`Название чанка`]]]]
                  Баха Волков
                  Баха Волков Администратор
                  05 января 2019, 13:11
                  Ну вот, сказал же поковырряйтесь и найдёте решение. Кстати, равно 1 можно не ставить, всё равно придёт значение Boolean 1/0
                    Алексей Федоров
                    06 января 2019, 16:20
                    Ну вот)) Получилось и ладно, только Павел же этот пример и приводил выше. Когда не подошло, подумал было, что совсем уникальный случай, а оно всё же просто решается).
                    Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
                    29