ModX Revolution страница новостей

257
14 апреля 2017, 23:56

Добрый день. Столкнулся с проблемой в modx. Нашел много документации на Evo, а вот на Revo как-то не получилось. Либо совсем ничего не сказано, либо упомянуто вскользь и важные детали упущены. В связи с этим назрел такой вопрос:

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

В результате ссылка a[href="[[~[[*id]]]]"] ссылается на саму страницу статей, т.е. на основной ресурс "Статьи". (В принципе то и логично). Ну и соответственно [[*pagetitle]] и [[*introtext]] тоже берут контекст из основного ресурса "Статьи".

То, что должно отображаться в самих статьях - это созданные вложенные документы в ресурс статьи:

Изначально я пытался сделать ч/з сниппет articles:

Но беда в том, что modx функция getDocumentChildren() на Revo не работает, нашел аналог, как писали в интернете, getChildIds(). Но она ничего не возвращает. (Точнее я пытался вызвать результат работы ф-ии ч-з echo и цикл foreach(), но он мне вывел просто 3 числа: 14, 15, 16; вместо, как мне казалось, *id, *pagetitle, *introtext).

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

Ресурс-статьи:

<div class="container-fluid articles_page">
    <div class="container"><center>
      <h1>НОВОСТИ САЙТА</h1>
      <div class="divider"> </div>
    </center>
    <div class="news-block masonry" data-columns="">
      [[$news]]
    </div>
  </div>
</div>

Чанк:

<div>
    <a href="[[~[[*id]]]]">
    <div class="thumbnail">
        <img src="http://placehold.it/1280x720" class = "img-responsive" alt=\"\">
        <div class=\"caption\">
            <h3>[[*pagetitle]]</h3>
            <span class="date">[[*publishedon:date='%d/%b/%y']]</span>
            <p>[[*introtext]]</p>
        </div> 
    </div>
    </a>
</div>

Сниппет articles:

<?php
$results = $modx->getChildIds(
    $id = 13,
    $active = 1,
    $deleted = 0,
    'id, pagetitle, published, introtext, content, menuindex, createdby, createdon, deleted,  menutitle',
    $where = '',
    $sort='createdon',
    $dir='DESC',
    $limit = ''
);
foreach($results as $key => $value) {
    if ($value["menutitle"] != "") {
        $title = $value["menutitle"];
}
else{
    $title = $value["pagetitle"];
}
$items .= "
    <div>
        <a href=".$value["createdon"].">
        <div class=\"thumbnail\">
            <img src=\"http://placehold.it/1280x720\" class = \"img-responsive\" alt=\"\">
            <div class=\"caption\">
                <h3>".$title."</h3>
                ".$value["introtext"] ."    
            </div> 
        </div>
        </a>
    </div>
";
}
$output = "
   <div id=\"pagination\">
     <a href=\"#\">< Назад</a>
     <a href=\"#\">Вперед ></a>
   </div>
";
return $items.$output;

P.s. Как выводить картинку - миниатюру на станице статей?

Answer 1
    [[!getResources?
        &parents=`[[*id]]` 
        &tvPrefix=`` 
        &includeTVs=`1`
        &tpl=`catalogItemTpl`
        &depth=`1` 
        &showHidden=`0` 
        &sortbyTVType=`integer`
        &sortbyTV=`price-for-m2`
        &sortdirTV=`ASC`
        &limit=`16`                             
        &where=`{"isfolder:!=":1}`
]]

Это пример запроса, не конкретно в вашем случае...А вообще можете погуглить, в сети очень много примеров. Так же я вам дал документацию. И чтобы в чанке поля выводились конкретного ресурса а не родителя надо вызывать вместо [[*pagetitle]] - [[+pagetitle]] итд

Answer 2
  1. В основном ресурсе "Статьи" добавляем следующий код:

<div class="container-fluid articles_page"> 
<div class="container"><center> 
<h1>НОВОСТИ САЙТА</h1> 
<div class="divider"> </div> 
</center> 
<div class="news-block masonry" data-columns=""> 
[[!getResources? 
&showHidden=`1` 
&tpl=`news` 
&limit=`10` 
&includeContent=`1` 
&includeTVs=`1` 
&processTVs=`1`]] 
</div> 
</div> 
</div>

Выставляете нужный шаблон и т.д.

  1. Создаете TV ("Дополнительные поля" в разделе "Элементы")

Галочкой указываете шаблоны, которые смогут их применять. TV нужны (в данном случае), чтобы вставлять изображение в превью на сайте. Также в параметрах ввода выставляете тип "Изображение" 1. И в заключительном пункте создаете Чанк с образцом:

<div> 
    <a href="[[~[[+id]]]]"> 
    <div class="thumbnail"> 
        <img src="[[+tv.news_img:phpthumbof='w=300&h=350&zc=1']]" class = "img-responsive" alt=""> 
        <div class="caption"> 
            <h3>[[+pagetitle]]</h3> 
            <span class="date">[[publishedon:date='%d/%b/%y]]</span> 
            <p>[[+introtext]]</p> 
        </div>  
    </div> 
    </a> 
</div>

и в принципе, все. А не получалось это сделать, потому что везде инфа либо неполная, либо непонятно написано, либо написано, но не так(т.е. по тем образцам ничего не работало)

Спасибо за внимание.

READ ALSO
Stored XSS и fetch

Stored XSS и fetch

Есть запись из отчета по проверке кода (PT Application Inspector):

210
Open Graph разметка на сайте Битрикс

Open Graph разметка на сайте Битрикс

Подскажите пожалуйста, что я делаю нет так и почему OG разметка на сайте Битрикс не работает? Пишу разметку для компонента newsdetail

241
Вывод числительного в падеже

Вывод числительного в падеже

Перевести в строку в импадеже: Есть

187