Запитували Відповідаємо - Школа MODX
Сніпети можна викликати двома способами:
Якщо виклик основного СНІПЕТ не кешується, то в шаблоні СНІП обов'язково повинен бути кешується. Більше того, щоб уникнути проблем з виведенням сніпетів (наприклад із посторінковим розбиттям), основний сніпет бажано завжди робити некешованим.
Наприклад, маємо некешований виклик Ditto:
у якого в шаблоніditto_tpl треба викликати сніппет Wayfinder:
Розширимо завдання, сформулювавши так: Як взагалі виводити дати? Тобто. це може бути будь-яка дата, як у шаблоні для Ditto, так і на сторінці самого документа.
а) Завдання: вивести дату створення документа у стрічці новин
Створюємо чанкnews_tpl :
Для того, щоб задати параметр, з якого Ditto буде брати значення дати використовуємо&dateSource=`editedon`. Для того, щоб задати формат дати, використовуємо&dateFormat=`%d.%m.%Y`, де значенням виступає будь-який валідний формат часу, який відповідає правилам функції PHP - strftime:
Приклади виклику Ditto з різними значеннями дати:
б) Завдання: вивести дату на сторінці самої новини
Здавалося б, що простіше? Змінюємо в чанціnews_tpl все + на * і потрібний чанк готовий. Але в MODx немає спеціального тега [*date*], тому замість нього доведеться використовувати[ *createdon*],[ *editedon*] або[ *pub_date*].
Для початку пробуємо[ *createdon*] або[ *editedon*] і отримуємо замість дати щось типу цього:
Беремо наступний параметр[ *pub_date*] і отримуємо:
Ну а тут те, що не так, запитаєте ви? Виявляється, за умовчанням параметрpub_date не встановлюється, тому його значення дорівнює0 та спроба його вивести видасть 0 або 01.01.1970. Щоб уникнути цього, доведетьсяpub_date робити обов'язковим до заповнення або встановити значення за промовчанням. У цьому нам допоможе ManagerManager. Але навіть якщо параметр буде заповнено, на виході ми знову побачимо кількість секунд, що пройшли з 01.01.1970.
Рішення 1. На допомогу прийде PHx, перш ніж його встановлювати, ознайомтеся з можливими проблемами. При встановленому PHx висновок дати можна зробити таким чином:
До речі, PHx можна використовувати і в шаблоні Ditto, вставивши замість плейсхолдера [+date+] один із цих плейсхолдерів:
У цьому випадку, під час виклику Ditto параметри&dateSource і&dateFormat не потрібні.
Рішення 2. Для виведення дати в потрібному форматі можна скористатися сніпетом. Створюємо новий сніпет, назвемо його, наприклад,DateFormat, і поміщаємо в нього наступний код:
У тому місці, де нам необхідно вивести дату, розміщуємо такий виклик цього сніпета:
У параметрі&val ми задаємо значення для дати, а в параметрі&format потрібний формат. Сніппет може застосовуватися як на сторінці новини, так і в шаблоні для Dito, не забудьте, якщо Ditto викликається не кешується, то в його шаблоні Сніппет має викликатися як кешується.
Якщо викликати сніпет взагалі без параметрів:
він виведе поточну дату у форматі заданому за замовчуванням: "%d.%m.%Y", цей формат можна поміняти в коді сніпета.