<aside> ⚠️ При работе с большинством проектов на MODx мы используем шаблонизатор Fenom, входящий в комплект пакета pdoTools. По этой причине, при выполнении заданий рекомендуется применять его синтаксис и возможности, когда это обосновано.
</aside>
Имеется простой сайт на MODx с двумя шаблонами: Список новостей (3)
и Новость (4)
.
В дереве ресурсов есть ресурс Новости (54)
с дочерними ресурсами:
-- Новости (54)
---- Новость1 (55)
---- Новость2 (56)
---- Новость3 (57)
---- Новость4 (58)
---- .............
---- Новость99 (104)
У каждой новости есть следующие поля - заголовок pagetitle
, дата публикации publishedon
, ссылка на изображение-превью в ТВ-поле preview_image
и длинный текст в поле content
.
Нужно вывести список новостей на страницу Новости (54)
в соответствии с следующей вёрсткой:
<div class="page">
...
...
<div class="news">
<div class="news-item">
<img class="news-item-preview" src="(url изображения)">
<div class="news-item-title">(заголовок)</div>
<div class="news-item-text">(обрезанный до 200 символов текст)</div>
<div class="news-item-pubdate">(дата публикации в читаемом формате)</div>
</div>
...
...
...
<div class="news-item">
<img class="news-item-preview" src="(url изображения)">
<div class="news-item-title">(заголовок)</div>
<div class="news-item-text">(обрезанный до 200 символов текст)</div>
<div class="news-item-pubdate">(дата публикации в читаемом формате)</div>
</div>
</div>
...
...
</div>
Решение содержит как минимум один сниппет getNews.php
, но может состоять и из нескольких файлов.
Необходимо создать на сайте мобильное меню, работающее следующим образом:
На сервере существует адрес (к примеру, /api/getMenu
), при обращении на который отдаётся структура мобильного меню в формате JSON следующего вида:
[
{
"title": "Заголовок пункта меню",
"url": "<https://test.site/item1>"
},
{
"title": "Заголовок пункта меню1",
"url": "<https://test.site/item2>",
"children": [{
"title": "Заголовок пункта меню2",
"url": "<https://test.site/item3>"
},
{
"title": "Заголовок пункта меню3",
"url": "<https://test.site/item3>",
"children": [{
"title": "Заголовок пункта меню4",
"url": "<https://test.site/item4>"
},
{
"title": "Заголовок пункта меню6",
"url": "<https://test.site/item6>"
}
]
}
]
},
{
"title": "Заголовок пункта меню5",
"url": "<https://test.site/item5>"
}
]
Каждый пункт меню может содержать дочерние ресурсы, вложенность неограниченна. Наличие или отсутствие детей определяется полем children
в каждом объекте.
Необходимо сверстать меню и написать файл menu.js
, который при загрузке страницы запрашивает мобильное меню с сервера и строит его.