Modx revolution уроки створення призначеного для користувача сниппета

Однією з найкращих практик. це коли ви ніколи прямо не пишете HTML код в сніпеті, але вставляєте HTML код для шаблонізаціі сниппета в чанкі. Цей урок покаже вам як зробити це в сніпеті.

Наш початковий сниппет

Давайте продовжимо і створимо сниппет з ім'ям 'ResourceLister' і вставимо наступний код:

Це робить те, що нам потрібно, але містить усередині HTML код. Нас таке не влаштовує. Це не дає користувачеві можливість контролювати розмітку або змінювати її, якщо він це захоче зробити. Нам потрібно більше гнучкості.

шаблонізаціі сниппета

По-перше, давайте створимо чанк, який ми будемо використовувати для кожного елемента в результуючому виведення. Назвемо його "ResourceItem" і код вмісту призначимо як:

В основному, ми користуємося тегами LI і поміщаємо кілька наповнювачів туди, де знаходився наш контент. Ми має доступ до кожного полю в ресурсі і тепер ми просто використовуємо ID і поле ресурсу pagetitle. вираз # 91 # 91

каже MODx, щоб послався від ID переданого через # 91 # 91 + id # 93 # 93 параметр. Давайте додамо параметр за замовчуванням до сніпетів, званий 'tpl' до верху нашого сниппет коду:

Цим ми отримаємо в розпорядження параметр tpl = від виклику сніпетів оскільки $ scriptProperties просто містить всі параметри у виклику сніпетів. Якщо 'tpl' не існує, то за замовчуванням getOption є значенням ResourceItem (чанк, який ми створили недавно).

Після цього ми міняємо цикл по кожному елементу в сніпетів на такий:

Код спочатку повертає об'єкт modResource в масив пар field = name (наприклад, $ resourceArray # 91'pagetitle '# 93 - це pagetitle) використовуючи метод toArray (). Далі ми використовуємо $ modx-> getChunk () для передачі нашого tpl чанка і масиву ресурсів в нього як параметри. MODx парсит чанк, замінює параметри і повертає нам деякий контент.

Тепер користувач може викликати сниппет цим способом для перезапису чанка для кожного ресурсу за допомогою такого виклику:

Це означає, що користувачі можуть шаблонизировать їх результати виклику як їм завгодно - використовуючи теги Lis або поля таблиць, в загальному що завгодно! Ви створили гнучкий і потужний сниппет!

Додавання класу для Ряду

Якщо ми хочемо, щоб користувачі могли визначати CSS клас для кожного LI ряду, але не могли робити свої власні чанкі. Тоді ми просто додаємо параметр за замовчуванням 'rowCls' для коду нашого сниппета вгорі прямо під нашим першим викликом getOption:

Це говорить MODx, що за замовчуванням rowCls клас ряду для сниппета - це 'resource-item'. Давайте відредагуємо наш чанк ResourceItem:

І далі змінимо наш цикл для кожного елемента:

Зверніть увагу як ми в прямій формі визначили змінну 'rowCls' в наш масив параметрів $ resourceArray. Ми так зробили, бо у нас вже є значення rowCls раніше в цьому сніпеті (з викликом getOption) і тепер ми знаємо, що він не буде відрізнятися для кожного ряду.

Передача призначеного для користувача ID

Якщо ми хочемо, щоб користувач мав можливість передавати від якого предка брати ресурси. Тоді ми просто додаємо параметр 'id' до коду нашого сниппета вгорі під викликом getOption:

В основному дозволяти користувачам переписувати (призначати) батьківський ID для сніпетів - для прикладу скажемо Ресурс 123 з параметром id = `123` - в їх виклик сниппета. Ми хочемо, щоб за замовчуванням він дорівнював 390. І далі ми поміняємо рядок getChildIds для цього:

Очевидно, що ви могли б додати більше функцій до цього сніпетів, таким як firstRowCls (для першого ряду результату виклику), lastRowCls, firstRowTpl, sortBy, sortDir, limit і все завгодно, що ви змогли б придумати. Ми могли б навіть зробити фільтр 'published' як параметр або приховувати ресурси, які є папками для інших ресурсів і ін. Тепер важливо, що ви маєте загальне уявлення про створення призначеного для користувача сниппета.

Для довідки, наш кінцевий код виглядає ось так:

здрастуйте, чи не відповісте мені на таке питання, на скільки добре потрібно знати php щоб робити на modx все що душа забажає.

Viktorminator

Html і Css знаю непогано, щоб робити гарні сайти досить знати відсотків 10 з усіх html і css тегів, Дрімвіавер в верстці непогано допомагає.

OhMyGodMan

Нда, "щоб робити гарні сайти досить знати відсотків 10 з усіх html і css тегів" і "Дрімвіавер в верстці непогано допомагає."

Справжній web-master! Може відразу на Юкоз? )

почасти він має рацію. щоб зробити сайт, далеко не обов'язково використовувати 100% тегів html і css правил. перш за все важливий результат і кроссбраузерность. а то, як це зроблено користувачам сайту буде абсолютно по барабану.

10% немає - хлопців цього взагалі недостатньо!

Rasul Abu Muhammad Amin

Дякую за статтю. Чи не могли б ви підказати один момент.
Як по-простіше можна зробити вкладений чанк і виклик в сніпеті. Наприклад, обернути ResourceItem в який-небудь чанк ResourceWrapper з