Как выводить через pdoResources разные блоки?

Привет! Подскажите как через pdoResources выводить блоки разного размера?

Есть на сайте проекты, они реализованы следующим образом:
Чанк проектов
<!-- main container -->
<div class="main-container portfolio-inner clearfix">
  <!-- portfolio div -->
  <div class="portfolio-div">
	<div class="portfolio">
	  <!-- portfolio_container -->
	  <div class="no-padding portfolio_container clearfix">
		[[pdoResources?
		&parents=`[[*id]]`
		&depth=`0`
		&tpl=`tpl.project`
		&includeTVs=`img`
		&processTVs=`1`
		]]		
	  </div>
	  <!-- end portfolio_container -->
	</div>
	<!-- portfolio -->
  </div>
  <!-- end portfolio div -->
</div>
<!-- end main container -->
чанк тпл проекта:
<!-- single work -->
<div class="col-md-4 col-sm-6">
  <a href="[[~[[+id]]]]" class="portfolio_item">
	<img src="[[+tv.img:phpthumbof=`w=1000&h=1000&zc=1`]]" alt="[[+pagetitle]]" class="img-responsive" />
	<div class="portfolio_item_hover">
	  <div class="portfolio-border clearfix">
		<div class="item_info">
		  <span>[[+pagetitle]]</span>
		  <em>[[+introtext]]</em>
		</div>
	  </div>
	</div>
  </a>
</div>
<!-- end single work -->
на сайте это выглядит вот так:
http://torrez.ru/project/

Но, на главной верстка немного отличается если посмотрите(либо можно глянуть здесь). Как можно через pdoResources сделать вывод на главной? Там разница лишь в классе col-md-3 col-sm-6 и col-md-6 col-sm-12

А на страничке проекты, класс тоже отличается, там у всех проектов которые добавляются, применяется класс col-md-4 col-sm-6
Борис
18 мая 2017, 09:44
modx.pro
5 105
0

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

Олег
18 мая 2017, 13:13
+1
В чанке вывода сделать проверку на id.
[[*id:is=`1`:then=`col-md-4 col-sm-6`:else`col-md-6 col-sm-12`]]
Либо можно сделать разные чанки и сделать вызов pdoResources через феном, записать параметры вызова как массив, в зависимости от страницы вызова подставлять нужный чанк.
    Борис
    19 мая 2017, 11:48
    0
    А pdoResources можно в разных чанках вызывать? Или только в одном, а для того чтобы в разных это делать нужен этот феном? Потому что через проверку по ИД не получится такое замутить!
      Олег
      19 мая 2017, 13:51
      0
      Почему не получится по id?
      Вопрос был — на главной выводится одно, на остальных страницах другое.
      Должно работать.

      Через стандартный парсер тоже можно вывести, но придется городить условия.
    Борис
    19 мая 2017, 12:25
    0
    на главной пытаюсь вывести, то что у меня находится в проектах:
    [[pdoResources?
    		&parents=`[[*id]]`
    		&depth=`0`
    		&tpl=`tpl.project`
    		&includeTVs=`img`
    		&processTVs=`1`
    		]]
    не работает, хотя в проектах все четко работает.
      Олег
      19 мая 2017, 13:52
      +1
      &parents=`[[*id]]`
      А у главной есть свои проекты?
        Борис
        19 мая 2017, 13:55
        0
        Нет, у главной нет своих проектов, я пытался вывести проекты из страницы проектов, но смог только таким образом:
        [[!pdoResources?
        		&parents=`{{*id}}`
        		&depth=`2`
        		&tpl=`tpl.content`
        		&includeTVs=`img`
        		&processTVs=`1`
        		]]
          Олег
          19 мая 2017, 14:16
          +1
          Все очень просто — параметр parents выводит дочерние страницы определенного ресурса.
          В данном вызове в параметр parents подставляется id текущей страницы, то есть если вызов на главной — идет запрос на дочерние страницы главной.
          Т.е. нужно вставить в parents id страницы с проектами.
            Борис
            19 мая 2017, 14:33
            0
            Да теперь работает как надо, спасибо Олег!
            Теперь вопрос как на главной сделать вид отображения тот что в топике выше описывал или тут?
            В чанке проверку на айди таким образом не работает:
            [[*id:is=`1`:then=`col-md-3 col-sm-6`:else`col-md-6 col-sm-12`]]
            сейчас вызов ресурса у главной вот такой:
            [[!pdoResources?
            		&parents=`8`
            		&depth=`0`
            		&tpl=`tpl.content`
            		&includeTVs=`img`
            		&processTVs=`1`
            		]]
              Олег
              19 мая 2017, 14:55
              +1
              После else не хватает =
                Борис
                19 мая 2017, 15:15
                0
                Выводит все ресурсы которые есть и не делает блоки разного размера как надо тут, что то не так делаю видимо:

                Сейчас чанк «tpl.content» оформления проекта на главной имеет вид:
                <!-- single work -->
                <div class="col-md-3 col-sm-6">
                  <a href="[[~[[+id]]]]" class="portfolio_item">
                	<img src="[[+tv.img:phpthumbof=`w=1000&h=1000&zc=1`]]" alt="[[+pagetitle]]" class="img-responsive" />
                	<div class="portfolio_item_hover">
                	  <div class="portfolio-border clearfix">
                		<div class="item_info">
                		  <span>[[+pagetitle]]</span>
                		  <em>[[+introtext]]</em>
                		</div>
                	  </div>
                	</div>
                  </a>
                </div>
                <!-- end single work -->
                А чанк «content» всех проектов на главной такой:
                <div class="portfolio-div">
                  <div class="portfolio">
                	<div class="no-padding portfolio_container">
                	        [[!pdoResources?
                		&parents=`[[*id:is=`1`:then=`col-md-3 col-sm-6`:else=`col-md-6 col-sm-12`]]`
                		&depth=`0`
                		&tpl=`tpl.content`
                		&includeTVs=`img`
                		&processTVs=`1`
                		]]
                	</div>
                	<!-- end portfolio_container -->
                  </div>
                  <!-- portfolio -->
                </div>
                Так тоже не работает
                &parents=`[[*id:is=`8`..
                  Олег
                  19 мая 2017, 15:21
                  +1
                  Уууу… Тут все запущенно.
                  Давай так, чтобы не морочиться:
                  Для главной
                  [[!pdoResources?
                  		&parents=`8`
                  		&depth=`0`
                  		&tpl=`tpl.content_main`
                  		&includeTVs=`img`
                  		&processTVs=`1`
                  		]]
                  Для остальных
                  [[!pdoResources?
                  		&parents=`[[*id]]`
                  		&depth=`0`
                  		&tpl=`tpl.content`
                  		&includeTVs=`img`
                  		&processTVs=`1`
                  		]]
                  Для главной чанк tpl.content_main
                  Для остальных чанк tpl.content
                    Борис
                    19 мая 2017, 16:00
                    0
                    Сейчас сделал все вот в таком формате:
                    Для главной

                    gyazo.com/58670ffcb5a4d66bd622432a68d1490e
                    для страницы всех проектов

                    gyazo.com/0bca822faf33f197c8ee59f50e369ba7
                    Вот теперь нужно для чанка projects_main задать проверку на id?
                    Потому что, пока на главной все блоки выстраиваются одинаково по классу col-md-3 col-sm-6 так как у меня там указан конкретный id (8)
      Владимир
      19 мая 2017, 17:19
      0
      Как можно через pdoResources сделать вывод на главной? Там разница лишь в классе col-md-3 col-sm-6 и col-md-6 col-sm-12
      — можно выставлять все в разный плейсхолдеры, а плейсхолдеры раскидывать по верстке как нужно, это уместно если количество блоков, например, заранее определено.
      docs.modx.pro/components/pdotools/snippets/pdoresources смотри &toSeparatePlaceholders
        Борис
        19 мая 2017, 17:42
        0
        Владимир спасибо за ответ, а что значит это уместно если кол-во блоков заранее определено? У меня эти блоки появляются, когда я завожу в админке новый проект и по сути их может быть сколько угодно.
        Или же ты имеешь ввиду про лимит кол-ва блоков которое располагается на странице? Лимит я хочу выставить 5 блоков(последних проектов которые были добавлены) на главной, а на странице проектов сделать пагинацию через pdoPage, и там будет 9 блоков и внизу пагинация (пока еще не сделал правда, но это вроде не сложно). =)

          Владимир
          19 мая 2017, 17:49
          +1
          Что бы точно решение найти нужно так же точно представлять задачу. Можно выводить в разные чанки см. docs.modx.pro/components/pdotools/general-settings
          &tpl_N Имя чанка для N-го ресурса, например, &tpl_4=`tpl4th` установит шаблон для 4-го ресурса.
          &tpl_nN Имя чанка для каждого N-го ресурса, например, &tpl_n4=`tplEvery4th` будет применено к каждому 4-му ресурсу.
          Ну и важно, какая пагинация, если ajax то чуть сложнее, т.к. может развалиться верстка с разноразмерными блоками (может развалиться, не значит что должна)
            Борис
            20 мая 2017, 01:28
            0
            Владимир, помогло спасибо большое!
            Но теперь ситуация следующая, которую хотелось бы решить.
            Сейчас на главной странице у меня расположены 4 проекта.
            Каждый ресурс, в данном случает проект, имеет чанк вывода tpl.project_main, у которого используется класс col-md-3 col-sm-6, кроме 3го ресурса, ему я задал другой чанк с классом col-md-6 col-sm-12. Через &tpl_N сделал это.

            Вот для наглядности сделал скрин чтобы не запутаться:

            увеличить

            Так вот, эти блоки теперь заведомо выстраиваются таким образом
            ссылка на фото

            То есть 3й блок всегда большой, так как я ему дал класс необходимый, но хочу сделать чтобы этот 3 блок превращался в такой вид только когда добавлено 5 проектов.

            Как реализовать так чтобы при добавлении нового блока менялся общий вид исходя из того какой это блок по счету и сколько блоков(то есть проектов) вообще.
            То есть если мы добавили первый проект, он у нас один на странице, пусть будет в пол экрана, далее добавили 2й проект, так же в пол экрана, далее 3й в треть экрана, 4й в четверть, а при добавлении пятого вид становился бы таким:
              Борис
              20 мая 2017, 01:47
              0
              Если резюмировать, то как бы реализовать так чтобы при добавлении 1 и 2 проекта, у нас использовался класс который растягивал 2 проекта по 50% каждый, при добавлении 3 проекта, использовался бы у всех 3х новый класс который растягивал бы на 33,3%, при добавлении 4 проекта, снова у всех использовался бы новый класс по 25% каждый блок, а при добавлении 5 проекта, вступал в силу &tpl_N, где мы бы для 3го ресурса задавали другой чанк с нужным классом.
                Владимир
                20 мая 2017, 08:04
                +1
                есть плейсхолдер тотал (&totalVar total), в него выводится общее число результатов, есть idx (номер итерации вывода результатов), в чанке можно составить условие на феном по этим параметрам и получить нужный класс для соответствующих блоков.
                  Борис
                  24 мая 2017, 12:44
                  0
                  Спасибо, Владимир) На словах кажется все просто, но как такое условие стряпать=(
      Борис
      29 мая 2017, 17:07
      1
      0
      Большое спасибо Владимиру, решили проблему с помощью фенома и плейсхолдера (&totalVar total).

      косок условия из чанка обертки проектов:
      {if $_modx->getPlaceholder('total_1') == 2}
      {set $myclass = "col-md-6 col-sm-12"}
      {elseif $_modx->getPlaceholder('total_1') == 3}
      {set $myclass = "col-md-4 col-sm-6"}
      {elseif $_modx->getPlaceholder('total_1') == 4}
      {set $myclass = "col-md-3 col-sm-6"}
      {elseif $_modx->getPlaceholder('total_1') == 6}
      {set $myclass = "col-md-4 col-sm-6"}
      {else}
      {set $myslass = "col-md-3 col-sm-6"}
      {/if}
      Так же для 3го проекта использовался отдельный чанк с таким условием:
      {if $_modx->getPlaceholder('total_1') == 4}
      {set $myclass = "col-md-3 col-sm-6"}
      {elseif $_modx->getPlaceholder('total_1') == 5}
      {set $myclass = "col-md-6 col-sm-12"}
      {elseif $_modx->getPlaceholder('total_1') == 6}
      {set $myclass = "col-md-4 col-sm-6"}
      {else}
      {set $myclass = "col-md-4 col-sm-6"}
      {/if}
      А чанк вывода всех проектов где происходит непосредственно сам подресурс:
      [[!pdoResources?
      		&parents=`[[*id]]`
      		&depth=`0`
      		&tpl=`tpl.project`
      		&tpl_3=`tpl.p3th`
      		&includeTVs=`img,plan`
      		&processTVs=`1`
      		&totalVar=`total_1`
      		]]
        Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
        21