Backpage Phx

Backpage Phx



🛑 👉🏻👉🏻👉🏻 INFORMATION AVAILABLE CLICK HERE👈🏻👈🏻👈🏻

































На сайте присутствует апокалиптичная тарабарщина
и нецензурная брань.
Хмм... и мне-то вообще-то насрать...
Фильтры phx, позволяют манипулировать значением тега, прямо внутри шаблона. Оригинальная документация.
Все довольно просто, модификаторы phx значительно облегчают жизнь разработчику сайта, например есть сайт и необходимо только на главной странице показывать слайдер, ну или любой зыбучий крутилко-банер. В шаблоне сайта достаточно прописать [[*id:is=`1`:then=`[[$slider]]`]], где 1 - это id главной страницы, а $slider - чанк с html кодом слайдера... и т.д. и т.п. только глупцы, создают новый шаблон и копируют туда весь html-код страницы, ради пары строчек слайдера/банера. Но все такими не были, поэтому не отчаивайся и внедряй phx в разработку.
Дано:
*id - выводит id текущей страницы;
:is=`1`:then= - проверяет равно ли *id == 1? и если да выводит содержимое then;
$slider - выводит чанк в котором находится верстка и вывод слайдера.
Вместо *id, использовано может быть любое другое поле, например *template - выведет текущий используемый шаблон. Или можно проверять не пусто ли TV-поле *slider или как там его?
Одно НО, нужно тщательно следить за обработкой модификаторов. Выше приведенную запись при выводе на сайт, modx считывает слева направо и выполняет все вложенные условия, не зависимо от того, верное условие или нет; будет ли выводиться на экран текущей страницы содержимое [[$slider]] — в любом случае содержимое этого чанка обработается, и даже гугл не поймет как. Поэтому, поменяем запись так:
В этом случае, содержимое чанка $slider, будет обработано только когда выполняется условие *id:is=`1`. Т.к. выполняется [[*id:is=`1`:then=`der`]] и если id текущей страницы равно 1, последнее что обрабатывается - [[$slider]], если id не равно 1, тогда - [[$sli]]. А если чанка $sli - нет в элементах, то и нагрузки не будет.
Подробнее о том, как правильно установить верстку на modx revo в этой статье. Азы, рекомендую ознакомиться.
Вариантов масса, здесь пример обработки условно-нафантазированнного слайдера. Просто комбинируй разные модификаторы под логику своей программы, и главное помни, юный падаван, их суть только в том чтобы сделать разработку проще, а не усложнять без того сложные сложности. Как правило, самый эффективный способ - самый простой, чем проще и понятней конструкция - тем легче с ней будет работать в дальнейшем. А что зерги ожидают от phx?
Эта запись лучше, если в чанке $слайдер - идет дополнительная обработка сниппетом, например обрезается изображение, или генерируется какой-то контент.
Если содержимое $slider - например обычный html-код, без использования сниппетов, то вполне подойдет:
В следующих таблицах перечислены некоторые модификаторы, которые могут быть использованы для любого тега MODx Revolution.
if - задает дополнительное условие
input - добавляет в тег обратываемые данные
[[+phx:input=`/assets/img/wow.gif`]] - добавляем в тег phx входное значение, следующим модификатором, например, можно обработать изображение.
Или [[+phx:input=`/assets/img/wow.gif`:contains=`wow.gif`:then=`da`:else=`net`]] проверить есть ли в пути определенная последовательность символов.

[[*id:is=`1`:and:if=`[[*id]]`:ne=`2`:then=`da`:else=`net`]] - если id-ресурса = 1 и не равно 2, выводим "da", или же "net"
or - условие "ИЛИ"
and - условие "И"
[[*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-ресурса = 1 и не равно 2, выводим "da", или же "net"
isequalto, isequal, equalto, equals, is, eq
Если тег равен модификатору, используется с "then" и "else."
[[*id:is=`1`:then=`da`:else=`net`]] - если id-ресурса = 1, выводим "da", или же "net"
notequalto, notequals, isnt, isnot, neq, ne
Если тег не равен модификатору, используется с "then" и "else".
[[*id:ne=`1`:then=`da`:else=`net`]] - если id-ресурса не равно 1, выводим "da", или же "net"
greaterthanorequalto, equalorgreaterthen, ge, eg, isgte, gte
Если тег больше или равен модификатору, используется с "then" и "else".
[[*id:ge=`1`:then=`da`:else=`net`]] - если id-ресурса больше или равен 1, выводим "da", или же "net"
isgreaterthan, greaterthan, isgt, gt
Если тег больше модификатора, используется с "then" и "else".
[[*id:gt=`1`:then=`da`:else=`net`]] - если id-ресурса больше 1, выводим "da", или же "net"
equaltoorlessthan, lessthanorequalto, el, le, islte, lte
Если тег меньше или равен модификатору, используется с "then" и "else".
[[*id:el=`10`:then=`da`:else=`net`]] - если id-ресурса меньше или равно 10, выводим "da", или же "net"
islowerthan, islessthan, lowerthan, lessthan, islt, lt
Если тег меньше модификатора, используется с "then" и "else".
[[*id:lt=`10`:then=`da`:else=`net`]] - если id-ресурса меньше 10, выводим "da", или же "net"
Если тег содержит модификатор, используется с "then" и "else".
[[+author:contains=`Сэ́мюэл Кле́менс`:then=`Марк Твен`]] - если в теге содержится фраза "Сэ́мюэл Кле́менс" выводим "Марк Твен"
Если тег не содержит модификатор, используется с "then" и "else".
[[+author:containsnot=`Сэ́мюэл Кле́менс`:then=`Кто-нибудь еще`]] - если в теге не содержится фраза "Сэ́мюэл Кле́менс" выводим "Кто-нибудь еще"
Если предыдущий модификатор возвращает положительное значение ("then"), то не выводим обработанный тег.
[[*id:is=`10`:hide]] - если id-ресурса = 10, ничего не выводим
Если предыдущий модификатор возвращает положительное значение ("then"), то выводим обработанный тег.
[[*id:is=`10`:show]] - если id-ресурса = 10, выводим.
Условие, если тег соответствует модификатору, выводим сообщение, иначе ничего не выводим
[[*id:is=`10`:then=`Yes!`]] - если id-ресурса = 10, выводим "Yes!".
Условие, если тег не соответствует модификатору, выводим сообщение. Используется только в связке с "then"
[[*id:is=`10`:then=`Yes!`:else=`nooo`]] - если id-ресурса = 10, выводим "Yes!" иначе "nooo".
Установить свое значение, в зависимости от модификатора и вывода тега. Так же можно использовать "else", например если значение [[+controls]] - не подходит под шаблон select
[[+controls:select=`0=ВЫКЛ&1=ВКЛ&2=ХЗ`:else=`Ошибка`]] - если тег [[+controls]] - выводит "0", значит выводим "ВЫКЛ", если тот же тег равен "1" выводим "ВКЛ", если "2" выводим "ХЗ", если тег не подходит нашей выборке, то выводим "Ошибка".
Работает аналогично php in_array, если тег совпадет с одним из элементов модификатора (разделяются они запятыми), то выводим then, если не совпало else
[[*template:in=`3,4`:then=`[[$myChank]]`:else=`пробел`]] - если тег [[*template]] (текущий шаблон) - равен "3" или "4", значит выводим [[$myChank]], если не равен, выводим else.
Чекает состоит ли юзер, в конкретной группе пользователей.
[[+modx.user.id:mo=`Administrator`:then=`yes`:else=`no`]] - если пользователь принадлежит к указанной группе, отработает условие then, напротив - else.
[[+num:cat=` раз`]], выведет к примеру "10 раз".
Переведет значение тега в нижний регистр, аналогично функции php strtolower.
Переведет текст в верхний регистр, аналогично функции php strtoupper.
Переведет каждую первую букву, каждого слова в верхний регистр, аналогично функции php ucwords.
Переведет только первую букву строки в верхний регистр, аналогично функции php ucfirst.
Преобразует все символы в соответствющие HTML сущности (для тех символов, для которых HTML сущности существуют), аналогично функции php htmlentities. Использует текущие настройки системы "modx_charset" с флагом "ENT_QUOTES".
Экранирует разные "плохие символы", так же экранирует [, ] и `.
Заменяет все переносы строк, табуляции и множественные пробелы с на один пробел.
Вырезает из строки заданную строку.
[[*pagetitle:replace=`вц==конфетка`]]
striptags, stripTags,notags,strip_tags
Вырезает все теги, кроме разрешенных, аналогично функции php strip_tags
Возвращает длину строки, аналогично функции php strlen
Переворачивает строку, аналогично функции php strrev
Устанавливает переносы в зависимости от кол-ва символов слова, аналогично функции php wordwrap
Устанавливает лимит на длинну строки и обрезает ее.
Устанавливает лимит на длинну строки и обрезает ее, добавляя три точки в конце
[[*pagetitle:ellipsis=`10`:tag]]вернет: [[*pagetitle:ellipsis=`10`:tag]]
Вернет, значение + модификатор ( по умолчанию +1 ).
[[+num:incr]] или [[+num:add=`97`]]
Вернет, значение - модификатор ( по умолчанию -1 ).
[[+num:decr]] или [[+num:decr=`97`]]
Вернет, значение * модификатор ( по умолчанию *2 ).
Вернет, значение / модификатор ( по умолчанию /2 ).
Вернет, целочисленный остаток от деления значения на модификатор ( по умолчанию % 2. Вернет 1 или 0. )
Вернет, указанный модификатор, если значение пусто.
notempty, !empty, ifnotempty, isnotempty
Вернет, указанный модификатор, если значение не пусто.
Вернет строку с "" или "" вставленные перед всеми (\r\n, \n\r, \n и \r)..., аналогично функции php nl2br
[[*pagetitle:nl2br]][[*pagetitle:nl2br]]
Аналогично функции PHP strftime. Значение - отформатировано. См. форматы дат.
Аналогично функции PHP strtotime. Вернет дату. См. форматы дат.
[[*createdon:strtotime]], - вернет типа "[[*createdon:strtotime]]"
Вернет дату. Типа вчера, сегодня....
[[*createdon:fuzzydate]], - вернет типа "[[*createdon:fuzzydate]]"
Вернет дату в прошедших секундах, минутах, неделях или месяцах.
[[*createdon:ago]], - вернет типа "[[*createdon:ago]]"
Вставляет строку в оболочку "CDATA" тегов.
Возвращает запрошенные модификаторов данные о пользователе. Значение должно быть id-пользователя ( modUser ).
[[+modx.user.id:userinfo=`username`]].
Возвращает true, если пользователь авторизирован в этом контексте.
Возвращает true, если пользователь не авторизирован в этом контексте.
Помещает результат вывода тега в плейсхолдер, причем там где был помещен - ничего не выводится, а телепортируется в указанный плейсхолдер. До этого модификатора можно использовать любые другие модификаторы.
[[+number:toPlaceholder=`итого`]], помещает содержимое [[+number]] в плейсхолдер [[+итого]]. Можно усложнять запись добавляя в левую часть выражения любые другие модификаторы: [[+number:is=`10`:then=`ровно 10`:else=`точно не 10!`:toPlaceholder=`итого`]], если [[+number]] = 10, тогда выводим в плейсхолдер [[+итого]]: "ровно 10", если же нет "точно не 10!".
Прописывает файл CSS в элемент перед закрывающим тегом , где значение тега модификатора вписывается в аттрибут "href". Используется modX.regClientCSS.
[[+cssTV:cssToHead]] перед закрывающим тегом , регистрирует CSS, например:
Вписывает значение тега перед закрывающим тегом . Используется modX.regClientStartupHTMLBlock.
[[+htmlTV:htmlToHead ]] перед закрывающим тегом , регистрирует значение тега [[+htmlTV]] в HTML код.
Вписывает значение тега перед закрывающим тегом . Используется modX.regClientHTMLBlock.
[[+htmlTV:htmlToBottom]] перед закрывающим тегом , регистрирует значение тега [[+htmlTV]] в HTML код.
Прописывает файл JS в элемент перед закрывающим тегом . Используется modX.regClientStartupScript.
[[+jsTV:jsToHead]] перед закрывающим тегом , регистрирует JS, например:
Прописывает файл JS в элемент перед закрывающим тегом . Используется modX.regClientScript.
[[+jsTV:jsToBottom]] перед закрывающим тегом , регистрирует JS, например:
Аналогично механизму транслитезации заголовка (pagetitle) в урл (alias), конвертирует строку в формат ЧПУ.
Возвращает подпись к полю из возможных значений TV.
[[+myTv:tvLabel]].
Например есть TV настроенное селектом с параметрами ввода: Черный==0||Белый==1||Красный==3. Если значение myTv = 3, модификатор вернет слово Красный
Модификаторы создаются, в точности как сниппеты. Тоесть по сути любой сниппет можно использовать в качестве модификатора, другой вопрос, вернет ли он то что нужно?)) например: [[*id:мой модификатор=`тест`]]
К примеру, создадим тестовый сниппет "мой модификатор", и почекаем что вылезает:
';
$test .= $options.'
';
$test .= $token.'
';
$test .= $name.'
';
$modx->log(1,'$tag: '. $tag); # это будет выводится в журнал ошибок
# напрямую в шаблон выводить не советую иначе подвиснет сайт
return $test;
Хорошим примером построения цепочки будет отформатировать строку даты в другой формат, например, так:
Прямой доступ к таблице "modx_user_attributes" в базе данных с использованием выходных модификаторов вместо сниппета можно осуществить просто путем использования модификатора userinfo. Выбрать соответствующий столбец из таблицы и указать его в качестве свойства выходного модификатора, например, так:
Особое внимание обращаем на восклицательный знак [[!+modx.user.id]]. Он позволяет НЕ кэшировать содержимое вывода. Почему нужно не кешировать? Представим это так: на сайте 5 пользователей. Первый пользователь зашел на страницу с вызовом:
По задумке на этой странице, выводится приветственное сообщение пользователю. Так вот, если результат будет кешироваться, то при первом входе на эту страницу - сохранится имя пользователя который только что зашел - и всем остальным будет показываться не их имя, а имя того пользователя который вошел на эту страницу первым. Чтобы этого избежать - просто не кэшируем этот тэг, с помощью восклицательного знака перед вызовом [[!+modx...
P.s.: Не забываем отключать кэширование тегов, повсеместно! Чтобы это сделать - нужно ОСВОБОЖДАТЬСЯ от восклицательных знаков ( ! ). Результаты большинства сниппетов вплоне себе могут отрабатывать из кэша.
Для истинных ценителей шаблонизаторов с элементами php кода, в modx revo с помощью набора пакета PdoTools, интегрируется шаблонизатор Fenom. Содержимое документации.
# Уважаемые бойцы с кодом!
# Лень отвечать на комментарии.
Здравствуйте увж автор!
Мучаю голову 2ой день.
Сайт на рево + шопкипер + куча всего, допилок и подпилок.
Задача стоит такая, типов товара много, в корзине к каждому нужно выводить только те tv к которым он относится, и те которые заполнены, для этого сделал такую конструкцию, к примеру:

[[+fason:!empty:then=`Силуэт:[[+fason]];`:else=` `]]
Т.е. если tv fason не пусто ты вывести силуэт и значение, а если пусто но ниче не надо.
Вот что я делаю не так?
у notempty, нет параметров then и else, сразу вывод:
[[+fason:!empty=`Силуэт:[[+fason]];`]]

ну и если страницы кешируются, то отключать кеш у плейсхолдера
[[!+fason:!empty=`Силуэт:[[!+fason]];`]]
Отличное имя картинки в примере про if, input.

ЗЫ Поздно заметил, что и в остальных тоже норм имена
Башка не работает помогите выводом тв

Есть 2 tv: Home, Away Тип список.

Если в Away указан value-1 то надо показать Home если в away не value-1 то надо показать away


[[*Away:is=`value-1`:then=`[[*Home]]`:else=`[[*Away]]`]]
Подскажите пожалуйста, задача следующая:
Если в tv пусто то ни чего не выводим, если в tv что то есть то выводим чанк old_price, у меня почему то выводится значение tv, но не чанк целиком

[[*old_price:!empty = `Старая цена:[[$oldprice]];`]]

чанк

Старая цена: [[*old_price]] Руб.
Добрый день!
Подскажите, пожалуйста, как можно реализовать следующее. Каталог с фильтрацией tagManager2.

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

Проблема в следующем. Как убрать изначальный вывод всех-всех-всех товаров? А они бы начинали выводиться уже по установке фильтров. Это необходимо для того, чтобы изначально при переходе на страницу «каталог» там отображалась другая информация (слайдеры с хитами продаж и распродажей), а когда пользователь устанавливает нужные флажки, эти слайдеры меняются на отсортированные товары.

Пробовала с помощью модификаторов задать такое условие: [[~[[*id]]:is=`catalog/`:then=`[[$banner_cat]][[$carusel_tovara]]`:else=`[[$vyvod_tovarov]]`]]
Не срабатывает.

Подскажите, пожалуйста, как быть.
Привет, Наталья!

Дело в том, что конструкция [[~[[*id]]]] — всегда будет возвращать только ссылку на текущую страницу, типа как «catalog/», вне зависимости от того какие параметры в адресной строке еще есть.

Ознакомился со компонентом tagManager2,
и заметил что при фильтрации он похоже всегда добавляет переменную $_GET['page']
думаю отсюда нужно и плясать.

Попробуйте сделать следующим образом: создать сниппет type, с кодом:

if( isset( $_GET['page'] ) ) { return 'tovar'; }
else { return 'banner'; }
и вывести в шаблоне его, вот так:

[[$vyvod_[[!type]]]]
соответственно в чанках:
vyvod_tovar — выводим товары
vyvod_banner — выводим банеры
Спасибо большое за совет! Вы навели меня на хорошую идею, как это сделать. Я именно искала такую «вещь», которая меняется при применении фильтрации и, к которой можно было бы привязать проверку. Таким образом можно решить проблему, но выход, к сожалению, не идеален.

Предложенный Вами вариант (немного модифицированный, так как $_GET['page'] не всегда появляется все же, но вместо нее можно использовать другую переменную или задать специально свою) работает только в простом виде фильтрации. Если же использовать Ajax-фильтрацию, то страница не обновляется и наша проверка, соответственно, не производится. Как в этом случае можно поступить? В Аяксе я не разбираюсь ничуть, даже мыслей нет, где это можно прописать.
я не знаком лично с компонентом tagManager2,
но как второй вариант, залезть в сам код компонента и там где идет фильтрация добавить плейсхолдер аналогичным способом как с $_GET['page'],
напиши мне в скайп serge.galich или на gaserge@mail.ru
если не справишься самостоятельно
Приветь!

Как использовать несколько модификаторов надо сделать разные title для новостей по категориям

Пример:


[[*id:is=`[[++site_start]]`:then=`[[++site_name:htmlent]]`:else=`[[*pagetitle]] / [[++site_name]]`]]
Надо добавит если категория 2 то другой title таких категорий несколко
Всем привет!
Блин, опять у меня руки — жопятся(
Что не так делаю:

[[+tv.tags:is=`лидер продаж`:and:if=`[[+tv.tags]]`:ne=`новинка`:then=`da`:else=`net`]]
Привет!
на самом деле не понятно, зачем идет конструкция
:and:if=`[[+tv.tags]]`:ne=`новинка`
в первой части уже есть вопрос — если tv.tags = лидер продаж,
а дальше не логично получается с новинкой, чего нужно то?)
Ага, есть TV тип чекбокс, 3 значения: новинка, лидер продаж, хит.
Так вот весь этот замысел для того чтобы вывести иконки на товаре)
Т.е. если стоит новинка — то значек новинка, если лидер продаж — то значок лидера продаж.
Есть идея конечно в разные TV забить просто и проверку на пустое или нет сделать)

Да, вот такой вот я извращуга)
Я так понимаю что в значении tv может быть сразу несколько параметров, т.е. и новинка и хит например. Дело в том что в phx нет стандартной функции которая проверяла бы наличие в строке определенных слов. Есть только проверка на точное соответствие.
Я рекомендую написать снипет и использовать его в phx вот так:

[[+tv.tags:productIcons]]
а уже в снипете productIcons, запустить проверку:

'новинка',
'lider.png' => 'лидер продаж',
'hit.png' => 'хит'
);

$result = '';
foreach( $variants as $key => $val ) {
if ( strstr( $input, $val ) ) {
$result .= '';
}
}
return $result;
Вау)))
Огромное Вам спасибо))))))))))
Сейчас попробую)
Хм, пока просто пусто,
Как понимаю сюда нужно вставить свою конструкцию?
//$input; // — тв поле со значениями например оно будет = 'новинка; хит'

посмотрите вообще что выдает, просто если вписывать [[+tv.tags]]
Сергей, блин огромное спасибо)
Я дундук)
В вызове,
phx .backpage .com - Backpage Seizure - Phx Backpage
Фильтры phx ( модификаторы ) в modx revo
Криптотрейдер назвал 7 взрывных альткойнов, которые могут вырасти в 20...
PhoenixMiner -straps: Тайминги памяти для AMD/NVIDIA [2021]
Free Classified sites | New Backpage Alternative | Backpage Replacement
Chicas Sexoservidoras Numeros Detroit
Escort Pretoria
Backpageoc
Backpage Phx
q_auto" width="550" alt="Backpage Phx" title="Backpage Phx">f_auto" width="550" alt="Backpage Phx" title="Backpage Phx">q_auto" width="550" alt="Backpage Phx" title="Backpage Phx">f_auto/gigs/80150496/original/4b200045e8ed827e64013bf2b5c1a9958380958d/post-your-backpage-ads-in-24-hours.jpg" width="550" alt="Backpage Phx" title="Backpage Phx">