Modx получить значение TV по id

У меня на одном из интернет-магазинов галерея фотографий товара сделана с помощью компонента MIGx. Сделано удобно, поддерживается мультизагрузка фотографий, для каждого товара автоматически создается папочка по номеру его ID под фотки.

Выводятся фотографии с помощью сниппета getImageList. Все здорово, работает за исключением тех случаев, когда фотографии к товару не загружены. В таком случае просто ничего не выводится и с этим можно смириться, если верстка страницы при этом не ломается. Либо поправить верстку, чтобы не ломалась.

Но мне присра захотелось, чтобы при отсутствии фотографий выдавалась заглушка nofoto.jpg. И сразу скажу, привычных темплейтов для вывода при отсутствии результата выборки сниппета getImageList не предусмотрено. В русскоязычном интернете я тоже не нашел решения. Пришлось обратиться к буржунету.

Там нашлось решение, от разработчика этого компонента Bruno17, основаное на phx (который в REVO идет «из коробки», и всю логику шаблонов удобно делать с помощью него) такое:

Сайт на CMS MODX за 45 минут

Источник: xn--80ajr5b.com

Modx получить значение tv по id

  • Блог
  • 5 способов определить сайт мошенников
  • Shopkeeper3 проблема с Яндекс.Кассой
  • Проблема с наборами параметров в MODX REVO 2.4.0
  • Mozilla Firefox 51.0.1 и Firebug
  • О фильме Логан
  • Применение для Яндекс.Диска
  • Как отследить майнер на компютере
  • MODX REVO
  • Расширения MODX REVO
  • AdvSearch
  • AdvSearchForm
  • AdvSearchForm.tpl
  • AdvSearch.tpl
  • AdvSearch.extractTpl
  • AdvSearch.containerTpl
  • Advsearch.paging1Tpl
  • Advsearch.paging0Tpl
  • Archivist
  • tpl
  • tpl
  • Создание блога
  • Заполнители Articles
  • Список статей
  • addEventListener
  • checkForLocks
  • checkSession
  • getAuthenticatedUser
  • getCacheManager
  • getChildIds
  • getChunk
  • getConfig
  • getContext
  • getEventMap
  • getLoginUserID
  • getLoginUserName
  • getParser
  • getPlaceholder
  • getRegisteredClientScripts
  • getRegisteredClientStartupScripts
  • getRequest
  • getResponse
  • getService
  • getSessionState
  • getTree
  • getUser
  • getVersionData
  • handleRequest
  • hasPermission
  • initialize
  • invokeEvent
  • lexicon
  • makeUrl
  • parseChunk
  • regClientCSS
  • regClientHTMLBlock
  • regClientScript
  • regClientStartupScript
  • removeAllEventListener
  • removeEventListener
  • runProcessor
  • runSnippet
  • sendError
  • sendErrorPage
  • sendForward
  • sendRedirect
  • setDebug
  • setPlaceholder
  • setPlaceholders
  • switchContext
  • toPlaceholder
  • toPlaceholders
  • unsetPlaceholder
  • unsetPlaceholder
  • unsetPlaceholders
  • xPDO::addPackage
  • xPDO::commit
  • xPDO::connect
  • xPDO::beginTransaction
  • xPDO::fromJSON
  • xPDO::getCollection
  • xPDO::getCollectionGraph
  • xPDO::getObject
  • xPDO::newQuery
  • xPDO::getObjectGraph
  • xPDO::getOption
  • xPDO::getTableName
  • xPDO::loadClass
  • xPDO::log
  • xPDO::newObject
  • xPDO::newQuery
  • xPDO::query
  • xPDO::setDebug
  • xPDO::setLogLevel
  • xPDO::setLogTarget
  • xPDO::setOption
  • xPDO::toJSON
  • xPDOCacheManager::copyFile
  • xPDOCacheManager::copyTree
  • xPDOCacheManager::delete
  • xPDOCacheManager::deleteTree
  • xPDOCacheManager::endsWith
  • xPDOCacheManager::escapeSingleQuotes
  • xPDOCacheManager::get
  • Получаем детей в мультиселект по id родителя с учетом контекста
  • Как сгенерировать свою Schema.xml
  • Как получить колличество ресурсов
  • Редирект на https для MODX REVO
  • Достаем id instagram
  • MIGX формуляр (beta)
  • Get Users List
Еще по теме:  Что такое эпл ТВ и эпл аркад

Получаем детей в мультиселект по id родителя с учетом контекста

  • Главная
  • Документация
  • Наброски
  • Получаем детей в мультиселект по id родителя с учетом контекста

Создаем сниппет NewSnippet, сниппет использует BabelTranslation:

16 MODX Revolution Вывод новостей на сайте


resource->get(‘context_key’); $parentGall = $modx->runSnippet(‘BabelTranslation’,array( ‘showUnpublished’ => ‘1’, ‘resourceId’ => 9, ‘contextKey’ => $context_key )); $array_ids = $modx->getChildIds($parentGall,1,array(‘context’ => $context_key)); $str = ‘Empty==||’; foreach($array_ids as $val)< $doc = $modx->getObject(‘modResource’, $val); $str .= $doc->get(‘pagetitle’).’==’.$val.’||’; > $str = substr($str, 0, -2); return $str;

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

Фильтры-модификаторы PHx в Modx revo — примеры использования

Фильтры-модификаторы PHx в Modx revo - примеры использования

Фильтры PHx (Placeholders Xtended) добавляют новые возможности для отображения плейсхолдеров, тегов MODx (включая TV параметры) и теги настроек сайта. Фильтры модификаторы phx позволяют манипулировать значением тегов, непосредственно внутри шаблона.

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

[[*id:is=`1`:then=`[[$slider]]`]]

где 1 — это id главной страницы, а $slider — чанк с html кодом слайдера. и т.д. и т.п. Только чайники создают новый шаблон и копируют туда весь html-код страницы, ради пары строчек слайдера/банера. Но не печальтесь, все мы такими были, поэтому просвещайтесь и пользуйтесь в будущем фильтрами модификаторами phx.

[[*id:is=`1`:then=`[[$slider]]`]]
— выводит id текущей страницы;
:is=`1`:then= — проверяет равно ли *id == 1
и если ДА, то выводит содержимое then;
[[$slider]]
— выводит чанк в котором находится верстка и вывод слайдера.
использовано может быть любое другое поле, например
[[*template]]
— выведет текущий используемый шаблон. Или можно проверять не пусто ли TV-поле
[[*slider]]
или как там его?

Примеры использования PHx фильтра в MODx

Пример 1:

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

Еще по теме:  Что со 100 ТВ

Т.к. в MODX чаще всего вы используете шаблоны страниц, в данном случае вам бы потребовалось создать два шаблона.

Один для главной без ссылки:


Второй для внутренних страниц со ссылкой:

Это неудобно. С помощью PHx модификатора is (равенство) вы можете сделать так:

[[*id:is=`1`:then=` `:else=` `]]

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

Пример 2:

Нам требуется вывести разные названия страницы в зависимости от шаблона.

[[*template:is=`1`:or:is=`2`:then=`[[*pagetitle]]`:else=`[[*longtitle]]`]]

Если шаблон страницы равен 1 или равен 2, вернуть
[[*pagetitle]]

иначе вернуть
[[*longtitle]]

Как видите, можно использовать несколько модификаторов в одной цепочке. Хотя, правильнее было бы написать так:

[[[[*template:is=`1`:or:is=`2`:then=`*pagetitle`:else=`*longtitle`]]]]

В следующих таблицах перечислены некоторые модификаторы PHx, которые могут быть использованы для любого тега MODx Revolution.

Модификаторы условия

[[+phx:input=`/assets/img/photo.gif`]]

— добавляем в тег phx входное значение, следующим модификатором, например, можно обработать изображение.
Или

[[+phx:input=`/assets/img/photo.gif`:contains=`photo.gif`:then=`da`:else=`net`]]

проверить есть ли в пути определенная последовательность символов.

[[*id:is=`1`:and:if=`[[*id]]`:ne=`2`:then=`da`:else=`net`]]
[[*id:is=`1`:or:if=`[[*id]]`:is=`2`:then=`da`:else=`net`]]

— если id-ресурса = 1 или = 2, выводим «da», или же «net».

[[*id:is=`1`:and:if=`[[*id]]`:ne=`2`:then=`da`:else=`net`]]
[[*id:is=`1`:then=`da`:else=`net`]]
[[*id:ne=`1`:then=`da`:else=`net`]]
[[*id:ge=`1`:then=`da`:else=`net`]]
[[*id:gt=`1`:then=`da`:else=`net`]]
[[*id:el=`10`:then=`da`:else=`net`]]
[[*id:lt=`10`:then=`da`:else=`net`]]
[[+author:contains=`Сэ́мюэл Кле́менс`:then=`Марк Твен`]]
[[+author:containsnot=`Сэ́мюэл Кле́менс`:then=`Кто-нибудь еще`]]
[[*id:is=`10`:hide]]
[[*id:is=`10`:show]]
[[*id:is=`10`:then=`ept`]]
[[*id:is=`10`:then=`ept`:else=`nooo`]]
[[+controls]]
[[+controls:select=`0=ВЫКЛ2=ХЗ`:else=`Ошибка`]]
[[+controls]]
[[*template:in=`3,4`:then=`[[$myChank]]`:else=`пробел`]]
[[*template]]
(текущий шаблон) — равен «3» или «4», значит выводим
[[$myChank]]

Модификаторы строки

[[+num:cat=` раз`]]
[[*pagetitle:lcase]]
[[*pagetitle:ucase]]
[[*pagetitle:ucwords]]
[[*pagetitle:ucfirst]]
[[*pagetitle:htmlentities]]
[, ] и `
[[*content:esc]]
[[*content:strip]]
[[*pagetitle:stripString=`писька`]]
[[*pagetitle:replace=`писька==конфетка`]]
[[*longtitle:strip_tags=«]]
[[*longtitle:strlen]]
[[*longtitle:reverse]]
[[*pagetitle:wordwrap=`10`]]
[[*pagetitle:limit=`10`]]
[[*pagetitle:ellipsis=`10`]]
[[+showThis:tag]]
[[+num:incr]]
[[+num:add=`97`]]
[[+num:decr]]
[[+num:decr=`97`]]
[[+num:mpy]]
[[+num:mpy=`5`]]
[[+num:div]]
[[+num:div=`5`]]
[[+num:mod]]
[[+num:mod=`5`]]
[[*pagetitle:empty=`Пусто`]]
[[*pagetitle:!empty=`Не пусто!`]]
[[*pagetitle:nl2br]]
[[*pagetitle:nl2br]]
[[+birthyear:date=`%Y`]]
[[*createdon:strtotime]]
[[*createdon:fuzzydate]]
[[*createdon:ago]]
[[+password:md5]]
[[*pagetitle:cdata]]
[[+modx.user.id:userinfo=`username`]]
[[+modx.user.id:isloggedin]]
[[+modx.user.id:isnotloggedin]]
[[+number:toPlaceholder=`итого`]]
помещает содержимое
[[+number]]
в плейсхолдер
[[+итого]]
Можно усложнять запись добавляя в левую часть выражения любые другие модификаторы:
[[+number:is=`10`:then=`ровно 10`:else=`точно не 10!`:toPlaceholder=`итого`]]
[[+number]]
= 10, тогда выводим в плейсхолдер
[[+итого]]
[[+cssTV:cssToHead]]
[[+htmlTV:htmlToHead ]]
перед закрывающим тегом , регистрирует значение тега
[[+htmlTV]]
modX.regClientHTMLBlock
[[+htmlTV:htmlToBottom]]
перед закрывающим тегом регистрирует значение тега
[[+htmlTV]]
modX.regClientStartupScript
[[+jsTV:jsToHead]]
modX.regClientScript
[[+jsTV:jsToBottom]]
[[+stringi:urldecode]]
[[!+modx.user.id:userinfo=`internalKey`]]
[[!+modx.user.id:userinfo=`username`]]

Полное имя:
[[!+modx.user.id:userinfo=`fullname`]]
[[!+modx.user.id:userinfo=`role`]]
[[!+modx.user.id:userinfo=`email`]]
[[!+modx.user.id:userinfo=`phone`]]

Мобильный телефон:
[[!+modx.user.id:userinfo=`mobilephone`]]
[[!+modx.user.id:userinfo=`fax`]]

День рождения:
[[!+modx.user.id:userinfo=`dob`:date=`%Y-%m-%d`]]
[[!+modx.user.id:userinfo=`gender`]]
[[!+modx.user.id:userinfo=`country`]]
[[!+modx.user.id:userinfo=`state`]]
[[!+modx.user.id:userinfo=`zip`]]
[[!+modx.user.id:userinfo=`photo`]]

Комментарий:
[[!+modx.user.id:userinfo=`comment`]]

Дата последнего входа:
[[!+modx.user.id:userinfo=`lastlogin`:date=`%Y-%m-%d`]]

Количество входов:
[[!+modx.user.id:userinfo=`logincount`]]
[[!+modx.user.id]]
возвращает ID вошедшего в систему пользователя. Вы, конечно, можете заменить, его на
[[*createdby]]

Еще по теме:  Rca TV signal converter

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

Обратите внимание, что ID пользователя и его логин уже доступны по умолчанию в MODX, так что вам не нужно использовать модификатор User Info:

[[!+modx.user.id]]
— Выведет ID пользователя
[[!+modx.user.username]]
— Выведет логин пользователя

Особое внимание обращаем на восклицательный знак !

[[!+modx.user.id]]

Он позволяет НЕ кэшировать содержимое вывода. Лучше всего эти плейсхолдеры вызывать некешируемыми, чтобы избежать неожиданных результатов. Почему нужно не кешировать.

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

Добро пожаловать, [[!+modx.user.id:userinfo=`username`]]!

По задумке на этой странице, выводится приветственное сообщение пользователю. Так вот, если результат будет кешироваться, то при первом входе на эту страницу — сохранится имя пользователя который только что зашел — и всем остальным будет показываться не их имя, а имя того пользователя который вошел на эту страницу первым. Чтобы этого избежать — просто не кэшируем этот тэг, с помощью восклицательного знака перед вызовом !+modx.

Также фильтры можно использовать несколькими способами (что уменьшает время их выполнения)

Используем модификатор:

[[+title:lcase]]
[[+something:notempty=`Hello[[+name]]`]]

Используем сниппет:
[[lcase? subject=`something` subject=`title` subject=`something` meter=`Hello [[+name]]`]]

P.S: Не забываем включить кэширование тегов, где нужно. Чтобы это сделать — нужно ИЗБАВЛЯТЬСЯ от восклицательных знаков (!). Результаты большинства сниппетов вплоне себе могут работать из кэша.

Источник: seo-studio.pro

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