Modx сниппет получить TV

После того как один мой знакомый спросил у меня про то, что за телевизоры используются в шаблонах, я решил отложить все дела на вечер и написать эту статью.
Речь пойдёт о том из чего состоит MODx, как его лучше «готовить», «подавать» и «употреблять».

Рассчитана она в первую очередь на новичков т.к. содержит базовый минимум того, что нужно знать любому modxоводу, ну и конечно на тех кому просто интересно.

Статья ориентирована в основном на Revolution и отражает основные отличия в синтаксисе её от предшественницы, но для обратной совместимости буду вставлять иногда аналогии с Evolution.

Ресурсы (Resources)

Зачастую ресурс представляет собой страницу сайта. Кроме того существуют другие типы ресурсов, такие как, ссылки, сами файлы, и т.д. По умолчанию тип нового ресурса — документ, точнее представление одной страницы вашего сайта.

  • Документ — самый распространённый ресурс, по сути веб-страница сайта. В основной массе состоит из заголовка, аннотации, подробного текста, различных дат, мета-тегов и дополнительных полей (TV-параметров);
  • Web-ссылка — ссылка на внешний ресурс или веб-страницу;
  • Символическая ссылка — внутренняя ссылка на другой ресурс;
  • Статический ресурс — файл.

Шаблоны (Templates)

Movie & TV Themes | Yamaha Montage MODX Synth Sound Library | Classic 80s Movie & TV Soundtracks


Шаблон — это базовая сущность определяющая отображение страницы в MODx. Шаблоны обычно содержат HTML-теги разметки, которые определяют расположение и внешний вид вашего сайта. Когда страница сайта запрошена, MODx загружает документ или ресурс и его шаблон, затем MODx находит все дополнительные поля в шаблоне и заменяет их соответствующими значениями из документа перед отправкой страницы в браузер пользователя.
Шаблон может быть назначен любому ресурсу и определяет по сути веб-страницу в которой будет выведено содержимое этого ресурса.
Шаблон не может быть включён в другой шаблон как часть.
Пример шаблона:

Параметры

Используются для вывода значений полей ресурса.
Вызов осуществляется так:

Evolution Revolution
[*field*] [[*field]]

Полный список полей можно посмотреть в документации здесь.

TV параметры


ТелевизорДополнительное поле или переменная шаблона (TV) — это настраиваемое поле, или, точнее это настраиваемое поле для ресурсов MODx. TV-параметры используются для расширения стандартных полей ресурса. Каждый ресурс в MODx имеет определенное количество полей по умолчанию см. выше в разделе про ресурсы.
Если встаёт задача добавить некоторые дополнительные поля на страницу, например, выпадающий список названий месяцев или дополнительное изображение, или любой другой тип пользовательских данных, это можно сделать добавив TV-параметр соответствующего типа. MODx позволяет иметь практически неограниченное количество TV-параметров.
TV-тег заменяется соответствующим значением заполненным пользователем при обработке ресурса. Так же каждый такой параметр привязан к какому либо шаблону и может использоваться лишь в совокупности с ним.

Еще по теме:  24 ТВ подписка отзывы

The NeverEnding Story Yamaha Montage MODX Movie & TV Themes Sound Library


Вызов осуществляется так:

Evolution Revolution
[*tv*] [[*tv]]

TV параметры можно использовать как чанки добавляя им параметры. Например если есть TV-параметр ‘intromsg’ со значением:

  1. Привет [[+name]], у тебя [[+messageCount]] непрочитанных.


Тогда можно заполнить его данными при вызове:

  1. [[*intromsg?name=`Гриша` name=`Василий` name=`[[*usersName]]` startId=`0` startId=`0` [[$chunk]] [[$header]] Сниппет (кусок php кода) [[snippet]] [[snippet]] или [[!snippet]] [[getResources]] Плейсхолдер [+placeholder+] [[+placeholder]] [[+modx.user.id]] Ссылка на ресурс [~link~] [[~link]] [[~13]] Системные настройки [(system_setting)] [[++system_setting]] [[++site_start]]

    Ресурсы

    • MODx Россия
    • Официальный сайт
    • Документация
    • Неофициальное русскоязычное сообщество MODx

    Источник: h.amazingsoftworks.com

    Используем свой сниппет в связке с getPage

    Если перед вами стоит задача написать компонент для MODX Revolution, выбирающий некие данные из БД и отображающий их, то с большой долей вероятности вам потребуется добавить постраничную навигацию.

    Для MODX Revolution существует отличное дополнение getPage с широкими возможностями, которое превосходно справляется с этой задачей. От вас потребуется совсем немного, что бы подружить ваш компонент с getPage и заставить работать их в связке.

    Немного о getPage

    getPage — это вспомогательный сниппет, который служит для реализации постраничной навигации на сайте и является своеобразной «оберткой» для других сниппетов.

    • Установочный пакет в репозитории: http://modx.com/extras/package/getPage
    • Официальная документация: http://rtfm.modx.com/display/ADDON/getPage

    Как работает getPage?

    Допустим у вас есть сниппет mySnippet, который выводит некий результат построчно. Обычно вы так вызываете этот сниппет, передавая ему какие-то параметры:

    [[mySnippet? y=`2`]]

    Но вот проблема, mySnippet раньше выводил 6 строчек с результатом, а теперь вы добавили новые материалы на сайт и он выводит несколько десятков строк на одной странице, что очень неудобно. Необходимо добавить постраничную навигацию.

    В этом случае и пригодится getPage. Вам потребуется немного модифицировать mySnippet, чтобы обеспечить корректное взаимодействие с getPage. При этом код вызова mySnippet изменится, он станет обернут в getPage, а параметры вы будете передавать в getPage, а он, в свою очередь, передаст их в mySnippet:

    [[!getPage? #вызов getPage всегда НЕКЕШИРУЕМЫЙ element=`mySnippet` #ваш сниппет mySnippet y=`2` ]] [[!+page.nav]] #getPage устанавливает этот плейсхолдер, он содержит блок ссылок с номерами страниц

    Для работоспособности этого кода требуется, чтобы ваш сниппет правильно обрабатывал несколько переменных, таких как limit, offset, total, totalVar. Через эти переменные getPage «разговаривает» с вашим сниппетом, передавая и получая информацию об общем количестве строк и текущей странице.

    Узнаем общее количество строк

    Прежде всего, ваш сниппет должен сообщить getPage общее количество строк с данными, что бы getPage смог правильно рассчитать количество страниц.

    Сразу пример кода, который необходимо добавить в mySnippet:

    $q = $modx->newQuery(«modResource»); $q->where(‘published’=>1, ‘template’=>1); $total=$modx->getCount(«modResource», $q); $totalVar=$modx->getOption(‘totalVar’, $scriptProperties, ‘total’); $modx->setPlaceholder($totalVar,$total);

    Разберем этот код построчно.

    • Строки 1-2. Создаем запрос в базу данных через xPDO, в данном примере к объекту modResource и задаем критерии выборки.
    • Строка 3. Получаем количество записей, удовлетворяющих критерию. Обратите внимание, что мы используем getCount, а не getCollection и затем count. getCount не извлекает данные из БД, а просто получает количество строк и поэтому работает максимально быстро.
    • Строка 4. Если посмотреть документацию getPage, то можно увидеть? что в totalVar хранится ключ плейсхолдера, отвечающего за общее количество строк. Здесь мы получаем этот ключ. По умолчанию это «total».
    • Строка 5. А теперь мы устанавливаем значение плейсхолдера с ключем totalVar в $total. Именно это значение и будет использовать getPage.

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

    Выбираем данные

    Отлично, getPage знает, сколько всего страниц будет. А как узнать в нашем сниппете о том, какая сейчас страница, и соответственно, какие данные отобразить? Для этой цели служат параметры limit и offset, их уже передает getPage нашему сниппету. Все, что остается, это их получить и использовать. Расширим предыдущий пример кода:

    $q = $modx->newQuery(«modResource»); $q->where(‘published’=>1, ‘template’=>1); $total=$modx->getCount(«modResource», $q); $totalVar=$modx->getOption(‘totalVar’, $scriptProperties, ‘total’); $modx->setPlaceholder($totalVar,$total); $limit=$modx->getOption(‘limit’, $scriptProperties, 10); $offset=$modx->getOption(‘offset’, $scriptProperties, 0); $q->limit($limit, $offset); $data=$modx->getCollection(‘modResource’,$q)

    Рассмотрим новый код построчно:

    • Строки 6 и 7. Получаем значения переменных limit и offset. Первая определяет количество элементов на странице, а вторая — смещение выбираемых данных от начала.
    • Строка 8. Задаем предел выборки в нашем запросе к БД.
    • Строка 9. Запрашиваем нужные данные. Теперь можем их вывести.

    Все просто

    Таким образом для того, чтобы добавить возможность постраничной навигации в вашем сниппете, требуется добавить совсем немного кода, в данном примере хватило 9 строк.

    Использовать getPage для постраничной навигации — это верное решение, которое позволяет вести быструю разработку и в дальнейшем без проблем осуществлять поддержку и развитие сайта.

    Если вам необходима более подробная информация по getPage, например перечень принимаемых параметров, вы можете посмотреть официальную документацию, ссылка на нее приведена в начале статьи.

    Теги

    • MODx (23)
    • Gallery (2)
    • Mapex (1)
    • ReturnLink (1)
    • SEO (2)
    • TinyMCE (1)
    • getPage (1)
    • getRelated (1)
    • modUser (1)
    • modUserProfile (1)
    • nginx (1)
    • phpthumb (1)
    • TagLister (1)
    • Видео (1)
    • Дополнение (6)
    • Инструкции (11)
    • Плагины (2)
    • Работа с изображениями (4)
    • Трюки (9)
    • Социальная сеть (4)
    • Сниппеты (3)
    • SSH (1)

    RSS

    Источник: www.createit.ru

    Сниппет получения размера изображения

    При разработке сайта на modx я часто использую TV параметры. В частности добавления изображений на страницу (тип images). По спецификации html каждая картинка должна иметь свои размеры (width, height), стандартных средств для этих нужд я не нашел. Набросал совсем небольшой сниппет:

    Обращение к данному сниппету на конкретном примере, допустим в шаблоне (чанке) у нас такой код:

    Который отобразится так:

    Нам надо добавить ширину и высоту (при условии что назвать сниппет ‘img_size’):

    В итоге на странице отобразится следующий html:

    width=’263′ height=’350′

    и есть результат который вернет сниппет. Сниппет возвращает высоту и длину изображения. Выкладываю его для тех кто в php совсем не разбирается, те же кто разбираются наверное уже сами что то придумали))). Если ширина картинки больше 320 пикселей, то устанавливает ширину 320px. Данное условие находится в комментариях, т.к. применялось для конкретного случая. Теги: #snippet #Modx #размер изображения #сниппет

    /.input-group —>

    Категории

    • Мои конспекты
    • Мои мысли и наблюдения
    • Вне категорий

    Источник: serov52.ru

Оцените статью
Добавить комментарий