Содержание

Использование условий if else в MODx

В MODx существуют встроенный синтаксис для использования конструкций if else.

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

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

Условные модификаторы вывода

Модификатор Описание Пример использования
if, input if — задает дополнительное условие input — добавляет в тег обратываемые данные

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

or Объединение нескольких модификаторов связью ИЛИ

[ [*id:is=`5`:or:is=`6`:then=`номер 5 или 6`:else=`другой номер`]]

and Объединение нескольких модификаторов связью И

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

isequalto, isequal, equalto, equals, is, eq Сравнивает передаваемое значение с установленным. Если значения совпадают, выводится значение «then», если нет — «else»

[ [*id:is=`5`:then=`номер 5`:else=`номер не 5`]]

notequalto, notequals, isnt, isnot, neq, ne Сравнивает передаваемое значение с установленным. Если значения НЕ совпадают, выводится значение «then», если нет — «else»

[ [*id:isnot=`5`:then=`номер не 5`:else=`видимо номер 5`]]

greaterthanorequalto, equalorgreaterthen, ge, eg, isgte, gte То же, только условие «Больше или равно»

[ [*id:gte=`5`:then=`номер 5 или больше`:else=`меньше пятого номера`]]

isgreaterthan, greaterthan, isgt, gt То же, только условие «Строго больше»

[ [*id:gt=`5`:then=`номер больше пяти`:else=`номер 5 или меньше`]]

equaltoorlessthan, lessthanorequalto, el, le, islte, lte То же, только условие «Меньше или равно»

[ [*id:lte=`5`:then=`номер 5 или меньше`:else=`больше, чем номер 5`]]

islowerthan, islessthan, lowerthan, lessthan, islt, lt То же, только условие «Строго меньше»

[ [*id:lte=`5`:then=`номер точно меньше 5`:else=`номер 5 или больше`]]

hide Скрывает элемент, если условие выполняется

[ [*id:lt=`1`:hide]]

show Отображает элемент, если условие выполняется

[ [*id:gt=`0`:show]]

then Используется для составления условий

[ [*id:gt=`0`:then=`Книги в наличии!`]]

else Используется для составления условий (совместно с «then»)

[ [*id:gt=`0`:then=`Книги в наличии!`:else=`Простите, но все продано. `]]

select Установить свое значение, в зависимости от модификатора и вывода тега. Так же можно использовать «else», например если значение [ [+controls]] — не подходит под шаблон select  

[ [+controls:select=`0=ВЫКЛ&1=ВКЛ&2=ХЗ`:else=`Ошибка`]]

memberof, ismember, mo Проверяет, является ли пользователь членом указанной группы пользователей

[ [+modx.user.id:memberof=`Administrator`]]

Также фильтры могут применяться для модификации вывода сниппетов. Фильтр нужно прописывать перед всеми параметрами (перед знаком вопроса):

[ [mySnippet:modifier=`value`? &mySnippetParam=`something`]]

Также для того что бы иметь возможность пользоваться вложеными конструкциями можно воспользоваться дополнительным пакетом, который имеет короткое и емкое название If. Загрузить его можно зайдя в Система-> Управление пакетами.

Так будет выглядить код условия:

[ [!If? &subject=`[ [+total]]` &operator=`GT` &operand=`3` &then=`You have more than 3 items!`]]

Параметры пакета if:

subject — Параметр, по которому выполняются условия.

operator — Оператор сравнения с subject

operand — Используеться по необходимости и являет собой значение subject (предмета сравнения) с использованием operator (оператора сравнения).

then — Код, который выводиться в том случае если условие принимает значение true

else — Код, который выводиться в том случае если условие принимает значение false

debug — Если значение true, отобразит все переданные параметры

die — Если отладка (debag) прошла успешно и соответствует значению true, то после вывода параметров применить функцию die().

Параметры

Название Описание По умолчания
subject  Параметр, по которому выполняются условия.  
operator Оператор сравнения с subject =
operand Используеться по необходимости и являет собой значение 
subject
 (предмета сравнения) с использованием operator (оператора сравнения).
 
then Код, который выводиться в том случае если условие принимает значениеtrue  
else Код, который выводиться в том случае если условие принимает значениеfalse  
debug Если значение true, отобразит все переданные параметры 0
die Если отладка (debag) прошла успешно и соответствует значению true, то после вывода параметров применить функцию 
die()
.
0

Операторы:

Название: Описание:
!=,neq,not,isnot,isnt,unequal,notequal Проверяет если subject не равен указанному значению operand
==,=,eq,is,equal,equals,equalto Проверяет если subject равен указанному значению operand
<,lt,less,lessthan Проверяте если subject меньше указанного значения operand
>,gt,greater,greaterthan Проверяет если subject больше указанного значения operand
<=,lte,lessthanequals,lessthanorequalto Проверяет если subject меньше или равно указанного значения operand
>=,gte,greaterthanequals,greaterthanequalto Проверяет если subject больше или равно указанного значения operand
isempty,empty Проверяет если subject имеет пустое значение
!empty,notempty,isnotempty Проверяет если subject имеет какое-либо значение
isnull,null Проверяет если subject равен null
inarray,in_array,ia Проверяет если subject найден в списке operand (строка разделённая запятой)

Комментарии (0)

Условия в MODx Revo сниппет IF

Что такое IF?

Условный логический сниппет, обеспечивающий выполнение условных выражений в MODx

История создания

IF написан Джейсоно Ковардом (Jason Coward), известным как opengeek, и Шоном Маккормиком, известным как splittingred и опубликован 29 октября 2009.

Загрузка

Вы можете загрузить ПО с помощью менеджера MODx Revolution, используя Package Management, или из хранилища дополнений MODx.

Использование

Сниппет If может быть вызван с использованием тегов:


	
[[If]]
	

или, в случае, если объект может быть изменен до того, как кэш ресурса будет очищен, используйте не кэшируемый синтаксис:


	
[[!If]]
	

Доступные свойства IF

Имя Описание Значение «по умолчанию»
subject Параметр, над значением которого выполняются условия.
operator Оператор сравнения с subject =
operand Используется при необходимости, значение для сравнения subject и operator.
then Выводится, если состояние принимает значение true
else Выводится, если состояние принимает значение false
debug Если значение true, отображает все проверенные свойства 0
die Если прошло обработку debug и значение true, после отображения свойств вывести die(). 0

Доступные операторы IF

Оператор Описание
!=,neq,not,isnot,isnt,unequal,notequal Принимается если subject не равен operand
==,=,eq,is,equal,equals,equalto Принимается если subject равен operand
<,lt,less,lessthan Принимается если subject меньше operand.
>,gt,greater,greaterthan Принимается если subject больше operand.
<=,lte,lessthanequals,lessthanorequalto Принимается если subject меньше или равен operand
>=,gte,greaterthanequals,greaterthanequalto Принимается если subject больше или равен operand.
isempty,empty Принимается если subject без значения.
!empty,notempty,isnotempty Принимается если subject имеет значение.
isnull,null Принимается если subject равен 0
inarray,in_array,ia Принимается если subject найден в списке операндов (строковый параметр, разделитель — запятая)

Примеры IF


	
[[
	!If? 
	&subject=`[[+total]]` 
	&operator=`GT` 
	&operand=`3` 
	&then=`You have more than 3 items!`
]] 
	

Сравнение строк:


	
[[!If?
   &subject=`[[+name]]`
   &operator=`EQ`
   &operand=`George`
   &then=`Hey George! Long time no see!`
   &else=`You're not George.  Go away.`
]]
	

Встраиваемый вызов сниппета


	
[[!If?
   &subject=`[[+modx.user.id]]`
   &operator=`EQ`
   &operand=`0`
   &then=`[[Login]]`
   &else=`[[Logout]]`
]]
	

При использовании сниппета IF для проверки поля ресурса или шаблонной переменной (или другого значения, не измененного до очистки кэша), убедитесь, что используете кэшируемый вызов сниппета для проверки состояния. Это нужно, чтобы быть уверенным, что этот процесс не нужен при каждом запросе.


	
[[If?
   &subject=`[[*hidemenu]]`
   &operator=`EQ`
   &operand=`1`
   &then=`This resource is not visible in the menu.`
   &else=`This resource shows up in the menu in spot [[*menuindex]].`
]]
	
  • 2.94
  • 1
  • 2
  • 3
  • 4
  • 5

Голосов: 758 | Просмотров: 6371

Фильтры phx и модификаторы в modx revolution

Автор Алексей На чтение 12 мин Просмотров 4. 8к. Опубликовано Обновлено

Содержание

  1. Фильтры ввода
  2. Фильтры вывода
  3. Модификаторы вывода
  4. Условные модификаторы вывода
  5. Зачем они нужны и как ими пользоваться?
  6. Нагрузки
  7. Модификаторы для работы со строками
  8. Использование модификаторов вывода совместно с параметрами
  9. Создание пользовательского модификатора
  10. Цепочки фильтров (Множественные модификаторы)
  11. Модификатор UserInfo
  12. Самые ходовые (популярные) фильтры и модификаторы MODX
  13. условия if else
  14. Проверка на пустоту (empty)
  15. Обрезка текста (ellipsis)

Сегодня полезная статья про фильтры phx и их модификаторы MODX Revo (другими словами различными условиями) при помощи которых вы сможете прямо внутри шаблонов, манипулировать значением различных тегов.

Фильтры ввода

В настоящее время фильтры ввода используются при подготовке к обработке фильтров вывода. Обычно они используются только внутри движка MODX.

Фильтры вывода

В MODX Revo фильтры вывода встроены прямо в движок  и ведут себя так же, как и PHx в Evolution. Синтаксис выглядит так:

[[element:modifier=`value`]]

Фильтры могут применяться последовательно. Для этого напишите их подряд (слева направо):

[[element:modifier:anothermodifier=`value`:andanothermodifier:yetanother=`value2`]]

Также фильтры могут применяться для модификации вывода сниппетов. Фильтр нужно прописывать перед всеми параметрами (перед знаком вопроса):

[[mySnippet:modifier=`value`? &mySnippetParam=`something`]]

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

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

Условные модификаторы вывода

Модификатор Описание Пример использования
if, input Передаёт произвольный текст на ввод, для следующего модификатора [[*id:input=`[[+placeholder]]`:is=`1`:then=`Да`:else=`Нет`]]
or Объединение нескольких модификаторов связью ИЛИ [[+numbooks:is=`7`:or:is=`8`:then=`Здесь 7 или 8 книг`:else=`Не уверен, сколько книг`]]
and Объединение нескольких модификаторов связью И [[+numbooks:gt=`7`:and:lt=`10`:then=`Здесь от 7 до 10 книг`:else=`Книг или меньше 7, или больше 10`]]
isequalto, isequal, equalto, equals, is, eq Сравнивает передаваемое значение с установленным. Если значения совпадают, выводится значение «then», если нет — «else» [[+numbooks:isequalto=`7`:then=`Здесь 7 книг`:else=`Не уверен, сколько книг`]]
notequalto, notequals, isnt, isnot, neq, ne Сравнивает передаваемое значение с установленным. Если значения НЕ совпадают, выводится значение «then», если нет — «else» [[+numbooks:notequalto=`7`:then=`Не уверен, сколько книг`:else=`Здесь 7 книг`]]
greaterthanorequalto, equalorgreaterthen, ge, eg, isgte, gte То же, только условие «Больше или равно» [[+numbooks:gte=`7`:then=`Здесь 7 книг или больше`:else=`Здесь меньше семи книг`]]
isgreaterthan, greaterthan, isgt, gt То же, только условие «Строго больше» [[+numbooks:gt=`7`:then=`Здесь больше семи книг`:else=`Здесь 7 книг или меньше`]]
equaltoorlessthan, lessthanorequalto, el, le, islte, lte То же, только условие «Меньше или равно» [[+numbooks:lte=`7`:then=`Здесь 7 книг или меньше`:else=`Здесь больше семи книг`]]
islowerthan, islessthan, lowerthan, lessthan, islt, lt То же, только условие «Строго меньше» [[+numbooks:lte=`7`:then=`Здесь меньше семи книг`:else=`Здесь 7 книг или больше`]]
hide Скрывает элемент, если условие выполняется [[+numbooks:lt=`1`:hide]]
show Отображает элемент, если условие выполняется [[+numbooks:gt=`0`:show]]
then Используется для составления условий [[+numbooks:gt=`0`:then=`Книги в наличии!`]]
else Используется для составления условий (совместно с «then») [[+numbooks:gt=`0`:then=`Книги в наличии!`:else=`Простите, но все продано. `]]
memberof, ismember, mo Проверяет, является ли пользователь членом указанной группы пользователей [[!+modx.user.id:memberof=`Administrator`]]

Зачем они нужны и как ими пользоваться?

phx модификаторы облегчают жизнь modx разработчикам. Допустим у нас есть сайт с каруселью изображений (ну или с баннером), который нужно выводить только на главной странице. Для этого достаточно поместить его в отдельный чанк и затем вывести в шаблоне при помощи такой конструкции

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

Где:

  • 1 — id главной страницы;
  • $carusel — чанк с кодом карусели (баннера).

Здесь:

  • *id — выводит id текущей страницы;
  • :is=`1`:then= — проверяет равно ли *id == 1? и если равно, то выводится содержимое then;
  • $carusel — выводит чанк carusel.

Вместо *id, можно использовать и другие поля, например *template — выведет текущий используемый шаблон. Либо можно проверять заполнено или нет TV-поле (пусть будет *keywords) и если оно заполнено, то выводить его. Разберем данный случай поподробнее. Дано стандартная разметка:

<meta name="keywords" content="ключ, ключ, ключ">

Задача: не выводить эту строку, если TV keywords не заполнено, т.е. делаем проверку tv на пустоту и если оно не пустое, то выводим его.
Решение.

[[*keywords:!empty=`<meta name="keywords" content="*keywords">`]]

Нагрузки

Нужно следить за обработкой модификаторов, бездумное их использование вызовет лишние нагрузки. Вернемся к карусели, данная запись считывается слева направо и МОДХ выполняет все вложенные условия, в независимости от того, верное условие или нет, будет ли выводится на текущей странице содержимое [[$carusel]], в любом случае его содержимое обработается. В связи с этим более целесообразно переписать запись:

[[$caru[[*id:is=`1`:then=`sel`]]]]

В этом случае, содержимое чанка $carusel, будет обработано в случае, если выполняется условие *id:is=`1` т.к. выполняется [[*id:is=`1`:then=`sel`]]

и если id текущей страницы равно 1, последнее что обрабатывается — [[$carusel]], если id не равно 1, тогда — [[$caru]]. А если чанка $caru — нет в элементах, то и нагрузки не будет.

А вообще идеальный вывод будет выглядеть так.

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

Примечание! Вы можете комбинировать сколько угодно модификаторов под логику работы компонентов сайта, но главное помните, их основная суть — облегчить разработку, а не усложнять без того сложные задачи. Обычно, самый эффективный и действенный способ — это самый простой, так как чем проще и понятней конструкция — тем легче с ней будет работать в дальнейшем. Ниже перечислены основные модификаторы, которые можете использовать для любого тега МОДХ Рево.

Модификаторы для работы со строками

Модификатор Описание Пример использования
cat Добавляет значение после тега [[+numbooks:cat=`книг`]]
lcase, lowercase, strtolower Переводит все буквы в нижний регистр [[+title:lcase]]
ucase, uppercase, strtoupper Переводит все буквы в верхний регистр [[+headline:ucase]]
ucwords Делает первую букву в словах заглавной [[+title:ucwords]]
ucfirst Делает первую букву в строке заглавной [[+name:ucfirst]]
htmlent, htmlentities Преобразует все символы в соответствющие HTML-сущности [[+email:htmlent]]
esc, escape Безопасно экранирует символы, используя регулярные выражения и `str_replace()`. Также экранирует теги MODX. [[+email:escape]]
strip Заменяет все переносы, табуляции и любое количество пробелов только одним пробелом [[+textdocument:strip]]
stripString Вырезает из строки указанную подстроку [[+name:stripString=`Mr.`]]
replace Производит замену подстрок [[+pagetitle:replace=`Mr.==Mrs.`]]
striptags, stripTags,notags,strip_tags Вырезает все теги (можно указать разрешенные теги). Не используйте для обеспечения безопасности. [[+code:strip_tags]]
len,length, strlen Выводит длину строки [[+longstring:strlen]]
reverse, strrev Переворачивает строку символ за символом [[+mirrortext:reverse]]
wordwrap Вставляет перенос строки после каждого n-ого символа (слова не разбиваются) [[+bodytext:wordwrap=`80`]]
wordwrapcut Вставляет перенос строки после каждого n-ого символа, даже если этот символ будет внутри слова [[+bodytext:wordwrapcut=`80`]]
limit Выводит определенное количество символов с начала строки (значение по умолчанию — 100) [[+description:limit=`50`]]
ellipsis Добавляет многоточие и обрезает строку, если она длиннее, чем указанное количество символов (по умолчанию — 100) [[+description:ellipsis=`50`]]
tag Экранирование. Отображает элемент так как он есть, без :tag. Для использования в документации [[+showThis:tag]]
add, increment, incr Прибавляет указанное число (значение по умолчанию +1) [[+downloads:incr]] [[+blackjack:add=`21`]]
subtract, decrement, decr Вычитает указанное число (значение по умолчанию -1) [[+countdown:decr]] [[+moneys:subtract=`100`]]
multiply, mpy Умножает на указанное число (значение по умолчанию *2) [[+trifecta:mpy=`3`]]
divide,div Делит на указанное число (значение по умолчанию /2) [[+rating:div=`4`]]
modulus,mod Возвращает модуль числа (по умолчанию: %2, возвращает 0 или 1) [[+number:mod]]
ifempty,default,empty, isempty Возращает значение модификатора, если значение тега пусто [[+name:default=`anonymous`]]
notempty, !empty, ifnotempty, isnotempty Возращает значение модификатора, если значение тега непусто [[+name:notempty=`Hello [[+name]]!`]]
nl2br Заменяет символы новой строки \n на HTML-тег br [[+textfile:nl2br]]
date Переводит таймстамп в текст, в соответствии с указанным форматом (формат даты) [[+birthyear:date=`%Y`]]
strtotime Переводит дату в виде текста в UNIX таймстамп [[+thetime:strtotime]]
fuzzydate Принимает таймстамп и возвращает дату в виде «Сегодня в 16:20 PM» [[+createdon:fuzzydate]]
ago Возвращает число секунд, минут, недель или месяцев, прошедших с даты, указанной в теге. [[+createdon:ago]]
md5 Создает MD5-хеш значения [[+password:md5]]
cdata Оборачивает вывод тегами CDATA [[+content:cdata]]
userinfo Возвращает запрашиваемое значение из профиля пользователя. Необходимо указывать ID пользователя [[!+modx.user.id:userinfo=`username`]]
isloggedin Возвращает 1, если пользователь авторизован в текущем контексте [[!+modx.user.id:isloggedin:is=`1`:then=`Yes`:else=`No`]]
isnotloggedin Возвращает 1, если пользователь неавторизован в текущем контексте [[!+modx.user.id:isnotloggedin:is=`1`:then=`No`:else=`Yes`]]
urlencode Конвертирует значение как URL, то есть применяет PHP фнукцию `urlencode()` [[+mystring:urlencode]]
urldecode Конвертирует значение как из URL, то есть применяет PHP фнукцию `urldecode()` [[+myparam:urldecode]]

Модификаторы для работы с пользователями нужно вызывать некэшированными, чтобы каждый юзер видел актуальные данные.

Использование модификаторов вывода совместно с параметрами

Если у тега есть параметры, то их необходимо прописывать сразу после модификатора:

[[!pdoResources:default=`К сожалению, ничего не найдено`?
    &tplFirst=`blogTpl`
    &parents=`2,3,4,8`
    &tvFilters=`blog_tags==%[[!tag:htmlent]]%`
    &includeTVs=`1`
]]

Создание пользовательского модификатора

Любой сниппет может использоваться как модификатор вывода. Для этого просто укажите имя сниппета вместо модификатора. К примеру, создадим сниппет [[makeExciting]], добавляющий к выводу определенное количество восклицательных знаков:

[[*pagetitle:makeExciting=`4`]]

Такой вызов тега передаст в сниппет makeExciting следующие параметры для обработки:

Параметр Значение Значение в примере Комментарий
input Значение элемента $input = `[[*pagetitle]]`; Значение элемента, к которому применяется модификатор.
options Значение модификатора $options = 4; Дополнительные параметры (после знака =)
token Тип элемента $token = *; Cимвол, определяющий тип тега.
name Имя элемента $name = `pagetitle`; Имя плейсхолдера, к которому применяется модификатор.
tag Весь тег полностью $tag = `[[*pagetitle:makeExciting=`4`]]`; Весь тег, полностью.

Приведем пример кода нашего сниппета makeExciting:

<?php
$defaultExcitementLevel = 1;
$result = $input;

if (isset($options)) {
    $numberOfExclamations = $options;
}
else {
    $numberOfExclamations = $defaultExcitementLevel;
}

for ($i = $numberOfExclamations; $i > 0; $i--) {
    $result = $result . '!';
}

return $result;

Тег выводит всё, что возвращает сниппет. В нашем случае он вернет значение тега [[*pagetitle]] с четырьмя восклицательными знаками.

Если сниппет вернет пустую строку, то на страницу будет выведено изначальное значение тега.

Цепочки фильтров (Множественные модификаторы)

Хорошим примером цепочки фильтров будет форматирование даты, например, так:

[[*publishedon:strtotime:date=`%d.%m.%Y`]]

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

Поле профиля Пример
Внутренний ключ профиля [[!+modx.user.id:userinfo=`internalKey`]]
Логин [[!+modx.user.id:userinfo=`username`]]
Полное имя [[!+modx. user.id:userinfo=`fullname`]]
Роль [[!+modx.user.id:userinfo=`role`]]
E-mail [[!+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=`password`]]
Временный пароль [[!+modx.user.id:userinfo=`cachepwd`]]
Последняя авторизация [[!+modx.user.id:userinfo=`lastlogin`:date=`%Y-%m-%d`]]
Дата текущей авторизации [[!+modx.user.id:userinfo=`thislogin`:date=`%Y-%m-%d`]]
Количество авторизаций [[!+modx.user.id:userinfo=`logincount`]]

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

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

  • [[!+modx. user.id]] — Выведет идентификатор пользователя
  • [[!+modx.user.username]] — Выведет логин пользователя
  • [[!+modx.user.fullname]] — Полное имя пользователя
  • [[!+modx.user.dob]] — Дата рождения

Особое внимание обращаем на восклицательный знак [[!+modx.user.id]]. Он позволяет НЕ кэшировать содержимое вывода. Почему нужно не кешировать? Представим это так: на сайте 5 пользователей. Первый пользователь зашел на страницу с вызовом:

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

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

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

Самые ходовые (популярные) фильтры и модификаторы MODX

условия if else

Чтобы составить условие на существование в БД параметра modx и при условие, что оно не пустое, то пишем следующий скрипт.

[[*id:gt=`0`:then=`В наличии!`:else=`Все продано.`]]

Проверка на значение: Если id равен 7, то выводим значение, иначе выполняем другое действие.

[[*id:is=`7`:then=`номер 7`:else=`не 7 номер`]]

Проверка на пустоту (empty)

К примеру у нас есть TV (дополнительное поле) «keywords» и соотвественно мета тег к нему и мы не хотим выводить его в код если поле пустое, тогда вывод будет следующим.

[[*keywords:!empty=`<meta name="keywords" content="[[*keywords]]">`]]

Обрезка текста (ellipsis)

Например, нам нужно вывести небольшой кусок текста (30 слов) пускай из поля content (содержимое — где редактор текста) и поставить в конце 3 точки.

[[*content:ellipsis=`30`]]

В следующем уроке разберем Форматирование дат и времени.

Выходные фильтры MODX — Учебное пособие по условным операторам If и PHx

Недавно в этот пост было добавлено важное обновление. Пожалуйста, смотрите внизу статьи.

Если вы начали использовать MODX в его первом воплощении, Evolution, вы, вероятно, знакомы с PHx — фрагментом, который позволил вам довольно легко работать с условными операторами в среде PHP MODX. Когда пришла революция, был выпущен фрагмент If, заменяющий функциональность PHx. Я не совсем уверен насчет временной шкалы, но, возможно, выходных фильтров MODX не было в самых ранних версиях…? Я сразу перешел к Revolution, в версии 2.0.0, но я не помню выходных фильтров до более позднего времени. И я не думаю, что я одинок, потому что фрагмент If существует, и люди его используют. Но на самом деле для многих случаев использования — вам это не нужно! Выходные фильтры MODX Revolution предоставляют вам возможности условных операторов, встроенных прямо в ядро ​​MODX. И, как и все остальное в MODX, это очень просто!

Для чего нужны условные операторы?

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

Фрагменты и выходные фильтры

Фрагмент кода If упрощает реализацию условных операторов, и, возможно, он более эффективен, чем фильтры вывода, но я редко сталкиваюсь со случаем, когда фильтры вывода не справляются со своей задачей идеально. Это избавляет вас от установки еще одного пакета и включения еще одного фрагмента, а как только вы привыкнете к синтаксису, будет быстрее и проще добавлять выходные фильтры, чем писать вызовы фрагментов. Итак, давайте погрузимся прямо в! Примечание: это руководство для начинающих по MODX…

Официальная документация

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

.

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

Пример

Допустим, у вас есть фрагмент со всеми скриптами вашей галереи [[$galleryScripts]] и еще один фрагмент с вашей разметкой [[$galleryHTML]] . В этом примере мы собираемся включить или отключить галерею (включая или не включая эти фрагменты) на основе идентификатора ресурса MODX. Скажем, например, наша страница галереи имеет идентификатор 5. Мы добавим это в наш шаблон страницы в элемент заголовка, где мы хотим, чтобы наши скрипты загружались:

 [[*id:is=`5`:then=`[[$galleryScripts]]`]]
 
Разбить его:
  • [[*id » Начнем с субъекта условного оператора. Мы хотим включить галерею на основе идентификатора, поэтому для запуска мы используем тег MODX ID.
  • :is » isequalto, isequal, equalto, equals, is, eq — все это допустимые условные модификаторы, которые сравнивают подлежащее с переданным значением. В этом случае он сравнивает идентификатор ресурса со значением «5».
  • :then=`[[$galleryScripts]]`]] » Если выполняется условие, т. е. ID равен «5», то вставляется чанк [[$galleryScripts]] . Помните, что тег фрагмента вложен внутри тега ID, поэтому вам нужно закрыть содержащий тег двойными квадратными закрывающими скобками.

Подводя итог приведенному выше коду, вы сообщаете MODX: «Если идентификатор ресурса документа равен 5, включите этот фрагмент». Вы должны сделать то же самое в теле шаблона страницы, чтобы включить фрагмент [[$galleryHTML]] . А что, если бы у вас было более одной страницы с галереей? Вы бы хотели, чтобы условный оператор охватывал оба экземпляра. Это делается с помощью модификатора «или», например:

 [[*id:is=`5`:or:is=`6`:then=`[[$galleryScripts]]`]]
 
Разбить его:
  • :or:is » Это единственный новый бит. Добавление модификатора «:or» вызывает два модификатора «:is=`5`» и «:is=`6`», так что при выполнении любого из условий выводится значение «:then=» — в этом случае фрагмент наших скриптов. Разве это не было легко?

Стоит отметить, что вы можете иметь еще один выходной фильтр внутри выводимого чанка. Или вы можете вывести фрагмент вызова. Мне не очень повезло с вложением выходных фильтров, но я думаю, что вы должны это сделать.

OH, и самое приятное то, что (вот насколько мощен и гибок MODX в целом, так что не удивляйтесь, узнав об этом), вы можете сделать почти что угодно объектом выходного фильтра. Таким образом, любая настройка системы или контекста, любой доступный тег или заполнитель, даже вывод фрагмента! Несколько простых примеров:

  • Если идентификатор конечного родителя документа (выводится через одноименный фрагмент) соответствует определенному значению, отображать это подменю. (Это может быть вызов Wayfinder или фрагмент с html-ссылками в нем.
  • Если пользовательская настройка контекста MODX [[++site_wide_value]] соответствует определенной строке, загрузите изображение логотипа, отличное от того, которое используется в контексте по умолчанию.
  • Если заполнитель, в котором сохраняется вывод фрагмента, пуст, ничего не делайте, но если он имеет значение, то визуализируйте вывод внутри содержащего HTML-элемента.

Возможности безграничны, и эта функциональность встроена прямо в ядро ​​MODX. Меня поражает мощь, которую они дали фронтенд-разработчикам. Помните, что для этого вам не нужно писать НИКАКОЙ PHP! Это абсолютная гениальность!

Подведение итогов

Я надеюсь, что это руководство было полезным для некоторых людей. Если вам нужны примеры того, как формировать выходные фильтры для любого из вышеперечисленных сценариев — или любого сценария в этом отношении — просто прокомментируйте ниже, и я постараюсь ответить примером. Если у вас есть собственные примеры использования выходного фильтра ниндзя, поделитесь ими с нами 🙂 Удачного запуска MODX!

ВАЖНОЕ ОБНОВЛЕНИЕ

Это довольно старая статья, и снижение производительности, связанное с использованием условных выражений, слишком очевидно, когда вы начинаете загружать свои сайты тоннами трафика. Таким образом, я последовательно применяю синтаксис «Mosquito Optimization» Джейсона Кауарда в течение многих лет — еще до того, как этот пост в блоге был опубликован. Извините, что так медленно обновлял этот пост. Пожалуйста, прочитайте эту статью.

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

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

— это , гораздо менее производительный , чем:

 [[[[*id:is=`1`:then=`$chunk`:else=`-`]]]]
 

Обратите внимание, что во втором примере теги не вложены таким же образом, а используется синтаксис «четверная скобка». Только после оценки внутреннего тега будет сформирован и обработан внешний тег. В первом примере чанк равен 9.0093 всегда обрабатывается независимо от того, как оценивается условие.

Прочтите этот или этот пост, чтобы узнать больше советов по оптимизации MODX.

Путеводители Боба | Фрагменты MODX

Со временем здесь будет более подробное объяснение фрагментов. А пока вот краткое объяснение сниппетов, краткое руководство по созданию собственного сниппета и несколько полезных ссылок, связанных с сниппетами.

Для чего нужны фрагменты?

Как мы уже говорили на главной странице MODX, сниппетов нужны, когда вам нужно динамического контента на странице. Код фрагмента фактически генерирует контент «на лету» и возвращает его для вставки вместо тега фрагмента .

Предположим, вам нужна веб-страница под названием «Этот день в истории», на которой будут показаны важные события, произошедшие сегодня. Вы можете написать фрагмент кода на PHP, который запрашивает базу данных о событиях, произошедших в сегодняшнюю дату, генерирует контент для вашей страницы и возвращает его для вставки вместо тега фрагмента.

Создание собственного простого фрагмента кода

Это может показаться странным, особенно если вы не являетесь опытным PHP-программистом, но лучший способ понять сниппеты — создать их. Существующие сниппеты в MODX могут делать все, что вы хотите, но вы поймете их намного лучше (и быстрее), если сначала создадите свой собственный сниппет. Это краткое руководство проведет вас через создание простого фрагмента кода, который мы немного отредактируем, чтобы вы могли увидеть, как на самом деле работают фрагменты.

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

Создайте фрагмент с именем MySnippet , выбрав (на вкладках в верхней части экрана MODX Manager ) Elements , затем Manage Elements . Выберите вкладку Snippets справа, если она еще не выбрана, и нажмите New snippet . В поле имени сниппета введите MySnippet . Вы можете заполнить описание, если хотите, но это необязательно.

Затем вставьте следующий код в окно кода на странице фрагмента:

$output = "

Это первая строка моего фрагмента.

"; $output .= "

Это вторая строка моего фрагмента.

"; $output .= "

Это третья строка моего фрагмента.

"; вернуть $ вывод;

Что происходит в этом PHP-коде? Переменные в PHP всегда начинаются со знака доллара ($), поэтому мы используем только переменную $output. В некоторых сниппетах много переменных, но это очень простой сниппет.

В первой строке нашего фрагмента мы присваиваем строку между кавычками нашей переменной. Как только процессор PHP выходит за эту строку, переменная $output равняется тому, что мы поместили между двумя кавычками в первой строке. Обратите внимание, что строка заканчивается точкой с запятой («;»). Все операторы в PHP должны заканчиваться точкой с запятой.

Во второй строке мы видим нечто новое. После переменной у нас есть «.=» вместо простого знака равенства. Это PHP конкатенация оператор. Что он делает, так это прикрепляет все, что следует за ним, к концу существующей переменной. Если бы мы использовали здесь знак равенства, вторая строка заменила бы первую, и первая строка была бы потеряна. Однако с помощью оператора «.=» наша переменная ($output) теперь устанавливается на первую строку, за которой следует вторая. В третьей строке мы добавляем третью строку в конец переменной, а в четвертой строке возвращаем эту переменную из фрагмента.

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

Создайте документ в MODX (или используйте существующий) и поместите следующий тег фрагмента куда-нибудь в поле «Содержимое» панели «Создать/Редактировать ресурс»:

[[ Мой фрагмент`]]

Помните, что имена фрагментов чувствительны к регистру, поэтому при вводе тега фрагмента обязательно вводите имя так же, как при создании фрагмента. Если вы этого не сделаете, MODX заменит тег сниппета вообще ничем.

Сохраните документ, а затем просмотрите его, щелкнув правой кнопкой мыши документ в дереве ресурсов в левой части экрана MODX Manager и выбрав Предварительный просмотр документа . Вы должны увидеть три строки, каждая в отдельном абзаце, куда вы поместили тег сниппета.

Поздравляем, вы только что создали свой первый фрагмент. Попробуйте отредактировать три строки фрагмента или добавить новые строки. Однако будьте осторожны, потому что неправильно отформатированная строка PHP-кода часто приводит к тому, что MODX создает совершенно пустую страницу, когда синтаксический анализатор PHP запутывается. Каждая строка должна иметь совпадающие кавычки и точку с запятой в самом конце.

Управление сниппетом с помощью свойств

Теперь, когда вы создали сниппет, давайте попробуем управлять его поведением, добавив свойства (ранее называемые «параметрами») в тег сниппета. Тег фрагмента с properties выглядит так:

[[MySnippet? &howMany=`2` &addText=`Добавить это`]]

Свойства — это просто фрагменты информации, которые отправляются во фрагмент. В этом случае у нас есть два свойства: , сколько , который установлен на 2 и addText , для которого задана строка «Добавить это».

Обратите внимание, что значения свойств заключены в обратные кавычки, а не в одинарные кавычки. Обратная галочка обычно находится на той же клавише, что и тильда. (~). Забыть использовать обратные тики — самая распространенная ошибка новых пользователей сниппетов.

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

Замените тег сниппета, который вы использовали выше, на новый со свойствами.

Теперь нам нужно изменить код фрагмента, чтобы он использовал свойства. Замените код сниппета в сниппете MySnippet на следующий код:

если ($сколько>= 1) {
    $output = "

Это первая строка моего фрагмента.

"; } если ($сколько>= 2) { $output .= "

Это вторая строка моего фрагмента.

"; } если ($сколько>= 3) { $output .= "

Это третья строка моего фрагмента.

"; } если ($addText != "") { $выход .= "

" . $добавитьтекст."

"; } вернуть $ вывод;

Сначала этот код может показаться сложным, но на самом деле он довольно прост. Свойства, отправленные в теге сниппета MODX, на самом деле отображаются как переменные в коде сниппета. Таким образом, &howMany упоминается во фрагменте как $howMany, а &addText отображается как $addText.

Оператор if просто говорит: если часть в скобках верна, сделайте все, что находится внутри следующих фигурных скобок, в противном случае ничего не делайте. Между фигурными скобками может быть несколько операторов PHP, которые все будут выполнены, если часть в скобках будет истинной.

Оператор «>=» просто означает «больше или равно», поэтому первый оператор «if» просто говорит: Если значение $howMany больше или равно 1, выведите эту первую строку. Следующие два оператора «если» в основном одинаковы, но они проверяют другое значение $howMany.

В четвертом операторе if мы видим оператор «!=», который объединяет оператор «не» («!») со знаком равенства. В нем говорится: если значение свойства $addText не равно «» (ничего, то есть пустая строка), выполните действия в фигурных скобках. Другими словами, если тег сниппета отправил нам что-то в свойстве $addText, сделайте следующее.

В фигурных скобках оператора if мы видим еще кое-что новое. Оператор точки — это еще один вид оператора конкатенации. Он просто говорит PHP объединить несколько строк и рассматривать их как одну строку. В данном случае мы используем их для объединения тега абзаца, значения $addText, отправленного в теге фрагмента, и тега конца абзаца в одну строку. Затем объединенная строка прикрепляется к концу переменной $output (но только если что-то было отправлено в переменной $addText).

Когда вам надоест смотреть на новый код фрагмента, сохраните фрагмент и снова просмотрите страницу. Вы должны увидеть первые две строки, но не третью, и вы должны увидеть «Добавить это» в качестве третьей строки на странице. Попробуйте изменить свойства тега фрагмента и посмотрите, что произойдет с выводом при предварительном просмотре страницы.

К настоящему моменту вы должны понимать основы тегов фрагментов и свойств фрагментов. Некоторые из популярных сниппетов MODX имеют гораздо больше properties, а некоторые свойства сниппетов MODX содержат имена чанков вместо литеральных значений, но принцип одинаков для всех сниппетов. Свойства — это просто кусочки информации, которые сообщают фрагменту, как выполнять свою работу.

Свойства по умолчанию и наборы свойств

В MODX Revolution сниппет может иметь свойства по умолчанию и наборы свойств. Они отображаются на вкладке Свойства при редактировании фрагмент. Их значения можно изменить в сетке на вкладке Свойства. Они работают точно так же, как свойства, которые мы отправили в тег сниппета выше. Свойства, установленные в наборе свойств, переопределяют любые свойства по умолчанию с тем же именем. Недвижимость отправлена ​​в тег snippet переопределяет все другие свойства с таким же именем, поэтому они имеют наивысший приоритет.

Ссылки на полезные фрагменты

Bob’s Guides Snippet FAQ

фрагмент тега Анатомия.

Фрагменты MODX Revolution.

Фрагмент страницы MODX Wiki.

Создание сниппетов (рекомендации и инструкции).

 

Моя книга, MODX: Официальное руководство — цифровое издание теперь доступно здесь. Бумажная версия книги доступна на Amazon.

Если у вас есть книга и вы хотите скачать код, вы можете найти его здесь.

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

MODX: Официальное руководство состоит из 772 страниц и выходит далеко за рамки этого веб-сайта в объяснении начальных и продвинутых методов MODX. Он включает подробную информацию о:

  • Установка MODX
  • Как работает MODX
  • Работа с ресурсами и элементами MODX
  • Использование Git с MODX
  • Использование общих дополнительных компонентов MODX, таких как SPForm, Login, getResources и FormIt
  • Разрешения безопасности MODX
  • Настройка MODX Manager
  • Использование настройки формы
  • Создание транспортных пакетов
  • Объектные методы MODX и xPDO
  • Системные события MODX
  • Использование PHP с MODX

Перейдите сюда для получения дополнительной информации о книге.

Благодарим вас за посещение BobsGuides.com

  —  Боб Рэй

Начало работы — веб-дизайн и услуги

Автор scalialawОпубликовано Рубрики CMSTags modx
  • Обзор интерфейса
  • Редактирование страниц
  • Создание новых страниц
  • Прочие характеристики

Юридический факультет Университета Джорджа Мейсона использует систему управления веб-контентом под названием MODX. MODX позволяет создавать веб-сайты на основе шаблонов с большой гибкостью и простым редактированием из любого места с помощью веб-браузера. Нет необходимости устанавливать программное обеспечение для редактирования HTML, программное обеспечение FTP или что-либо еще. Просто войдите в систему и начните редактировать веб-сайт.

Обзор интерфейса

Вкладки навигации: Вкладки навигации в верхней части интерфейса позволяют получить доступ к различным частям MODX. В зависимости от того, какой у вас уровень разрешений, вы можете видеть только одну вкладку или до 6 вкладок. Вкладка «Сайт» открывает доступ к страницам для редактирования. Вкладка «Ресурсы» позволяет получить доступ к файлам (PDF, Word и т. д.) и, в зависимости от вашего уровня разрешений, может разрешить доступ к шаблонам, коду PHP и другим функциям. Другие вкладки, если они есть, обеспечивают доступ к расширенным административным функциям.

Дерево документов: В левой колонке вы увидите список страниц, на редактирование которых у вас есть разрешение. Если есть страницы-контейнеры («папки»), вы увидите символ «плюс» рядом с названием страницы. Нажмите на плюс, чтобы развернуть список страниц в этом контейнере. MODX

Главное окно: В главном окне справа от дерева документов вы можете редактировать страницы и выполнять другие действия.

Редактирование страниц

Существует два способа начать редактирование страницы:

  1. Нажмите на страницу в дереве документов, затем нажмите «Изменить» в верхней части главного окна, ИЛИ
  2. Щелкните правой кнопкой мыши страницу в дереве документов, затем выберите «Редактировать документ» в меню

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

Заголовок: Это HTML-элемент , который будет отображаться в строке заголовка браузера.<img loading='lazy' src='' /> (над меню «Файл» и «Правка» браузера). </p> <p> <strong> Длинный заголовок: </strong> Это основной заголовок содержимого веб-страницы (с использованием HTML-элемента <h2><span class="ez-toc-section" id="i-30">). Обычно заголовок и длинный заголовок содержат один и тот же текст. </span></h2> </p> <p> <strong> Псевдоним документа: </strong> Это «имя файла» страницы, которое будет отображаться в веб-адресе этой страницы. Например, псевдоним раздела факультета веб-сайта — «факультет», а полный веб-адрес — http://www.law.gmu.edu/faculty. </p> <p> <strong> Шаблон </strong> : Шаблон, вероятно, уже выбран, и его, вероятно, не нужно менять. Для каждого раздела веб-сайта существуют определенные шаблоны. Использование неправильного шаблона может придать странице неправильный вид или иным образом нарушить ее функциональность. </p> <p> <strong> Индекс меню: </strong> Относится к порядку страниц в дереве документов в MODX. Индекс меню также может использоваться для отображения навигационных меню в общедоступной части веб-сайта. Страницы будут упорядочены в алфавитном порядке, если индекс меню одинаков (например, «0») для всех страниц в данном каталоге.<img loading='lazy' src='' /> Для основного веб-сайта юридической школы число 990 должно быть введено в качестве указателя меню по умолчанию. Другие дочерние сайты могут использовать другие номера. (Используя большое число, такое как 990 позволяет позже вводить меньшие числа для других страниц, если вы хотите, чтобы они отображались в верхней части системы меню.) </p> <p> <strong> Показать в меню: </strong> может создавать системы навигационного меню на веб-сайте. Не все папки или страницы используются этими скриптами, но при установленном флажке «показать в меню» страницы будут отображаться в меню; если он не отмечен, они не будут отображаться в меню. </p> <p> <strong> Содержание документа: </strong> Здесь вы редактируете основную часть веб-страницы. Большинство учетных записей пользователей здесь имеют интерфейс в стиле текстового процессора, поэтому вам не нужно знать код HTML-разметки. </p> <ul> <li> <strong> Ссылки: </strong> <ul> <li> <strong> Ссылки на внешние веб-сайты: </strong> Выберите слова, которые вы хотите сделать интерактивными, затем щелкните значок ссылки (который выглядит как звено цепи).<img loading='lazy' src='' /> Введите полный веб-адрес ссылки (включая «http://») </li>. <li> <strong> Ссылки на страницы в MODX: </strong> Лучше использовать MODX ID страницы, а не путь или имя файла. Щелкните значок ссылки, затем введите идентификатор MODX в следующем формате: [~1234~], где «1234» — это идентификатор документа MODX. Скобки и тильды (~) обязательны. Как найти ID MODX? Посмотрите на число в скобках после имени страницы в дереве документов. <strong> Примечание. Возможно, у вас нет разрешения на просмотр всех файлов в системе MODX. </strong> В этом случае вам нужно будет использовать путь к файлу относительно корневого каталога сайта. Ссылка на страницу факультета будет выглядеть так: «/факультет». Ссылка на более глубокую страницу в системе будет выглядеть примерно так: «/faculty/news/details». Но если идентификационный номер доступен вам, пожалуйста, используйте его! Это определенно предпочтительный метод. </li> <li> <strong> Ссылки на файлы (Word, PDF и т.д.):MODX </strong> Щелкните значок ссылки, затем щелкните красный/белый/синий значок справа от поля «URL-адрес ссылки».<img loading='lazy' src='' /> Перейдите к папке, в которой находится файл (или куда вы хотите поместить файл). Нажмите на файл, чтобы выбрать его, или используйте функции в нижней части браузера файлов, чтобы загрузить новый файл. Не забудьте сначала перейти в правильный каталог перед загрузкой! </li> </ul> </li> <li> <strong> Заголовки: </strong> Всегда используйте настоящие заголовки (например, не просто жирный текст). Выберите соответствующий заголовок из выпадающего списка «Формат». «Длинное название» — это заголовок 1, поэтому любые заголовки в вашем контенте должны начинаться с заголовка 2. </li> <li> <strong> Выравнивание текста: </strong> Используйте раскрывающееся меню «Стили» для выравнивания текста по левому краю, правому краю, по центру или по ширине. </li> <li> <strong> Изображения: </strong> Чтобы вставить изображение, поместите курсор туда, где вы хотите, чтобы изображение было, затем щелкните значок в виде дерева. Вы можете либо использовать изображение, которое уже есть на веб-сайте, либо загрузить новое изображение.<img loading='lazy' src='' /> В любом случае вам нужно будет щелкнуть красный/белый/синий значок справа от поля «URL-адрес изображения». Это вызовет файловый браузер. Либо выберите изображение из числа существующих, либо используйте функции в нижней части файлового браузера, чтобы загрузить новое изображение. Убедитесь, что вы загрузили его в правильный каталог! (Перед загрузкой файла вы должны находиться в правильном каталоге.) </li> <li> <strong> Другие параметры: </strong> На большинстве страниц другие параметры (описание, сводка, заголовок меню и т. д.) не требуются и могут быть оставлены пустыми. </li> </ul> <h3><span class="ez-toc-section" id="i-31"> Создание новых страниц </span></h3> <p> Чтобы создать новую страницу, перейдите в дерево документов, найдите папку, в которой должен находиться документ, щелкните правой кнопкой мыши эту папку и выберите «Создать документ здесь». Затем заполните информацию для этой страницы в главном окне. </p> <h3><span class="ez-toc-section" id="i-32"> Другие функции </span></h3> <p> MODX имеет множество других функций. Этот учебник будет со временем расширяться, чтобы предоставить больше информации об этих других функциях.<img loading='lazy' src='' /><div class='yarpp-related yarpp-related-none'> <p>No related posts.</p> </div> </div><!--/.entry--> </div><!--/.post-content--> <div class="post-sharrre group"> <div id="twitter" data-url="https://ylianova.ru/raznoe-2/modx-if-else-ispolzovanie-uslovij-if-else-v-modx.html" data-text="Modx if else: Использование условий if else в MODx" data-title="Tweet"></div> <div id="facebook" data-url="https://ylianova.ru/raznoe-2/modx-if-else-ispolzovanie-uslovij-if-else-v-modx.html" data-text="Modx if else: Использование условий if else в MODx" data-title="Like"></div> <div id="googleplus" data-url="https://ylianova.ru/raznoe-2/modx-if-else-ispolzovanie-uslovij-if-else-v-modx.html" data-text="Modx if else: Использование условий if else в MODx" data-title="+1"></div> <div id="pinterest" data-url="https://ylianova.ru/raznoe-2/modx-if-else-ispolzovanie-uslovij-if-else-v-modx.html" data-text="Modx if else: Использование условий if else в MODx" data-title="Pin It"></div> </div><!--/.post-sharrre--> <script type="text/javascript"> // Sharrre jQuery(document).ready(function(){ jQuery('#twitter').sharrre({ share: { twitter: true }, template: '<a class="box group" href="#"><div class="count" href="#">{total}</div><div class="share"><i class="fa fa-twitter"></i></div></a>', enableHover: false, enableTracking: true, buttons: { twitter: {via: ''}}, click: function(api, options){ api.simulateClick(); api.openPopup('twitter'); } }); jQuery('#facebook').sharrre({ share: { facebook: true }, template: '<a class="box group" href="#"><div class="count" href="#">{total}</div><div class="share"><i class="fa fa-facebook-square"></i></div></a>', enableHover: false, enableTracking: true, click: function(api, options){ api.simulateClick(); api.openPopup('facebook'); } }); jQuery('#googleplus').sharrre({ share: { googlePlus: true }, template: '<a class="box group" href="#"><div class="count" href="#">{total}</div><div class="share"><i class="fa fa-google-plus-square"></i></div></a>', enableHover: false, enableTracking: true, urlCurl: 'https://ylianova.ru/wp-content/themes/anew/js/sharrre.php', click: function(api, options){ api.simulateClick(); api.openPopup('googlePlus'); } }); jQuery('#pinterest').sharrre({ share: { pinterest: true }, template: '<a class="box group" href="#" rel="nofollow"><div class="count" href="#">{total}</div><div class="share"><i class="fa fa-pinterest"></i></div></a>', enableHover: false, enableTracking: true, buttons: { pinterest: { description: 'Modx if else: Использование условий if else в MODx' } }, click: function(api, options){ api.simulateClick(); api.openPopup('pinterest'); } }); }); </script> </div><!--/.post-inner--> </article><!--/.post--> <ul class="post-nav group"> <li class="next"><a href="https://ylianova.ru/css/razmer-shrifta-css-font-size-css-mdn.html" rel="next"><i class="fa fa-chevron-right"></i><strong>Вперед</strong> <span>Размер шрифта css: font-size — CSS | MDN</span></a></li> <li class="previous"><a href="https://ylianova.ru/raznoe-2/utechka-dannyh-facebook-v-seti-poyavilas-informacziya-o-prodazhe-dannyh-15-mlrd-polzovatelej-facebook.html" rel="prev"><i class="fa fa-chevron-left"></i><strong>Назад</strong> <span>Утечка данных facebook: В сети появилась информация о продаже данных 1,5 млрд пользователей Facebook</span></a></li> </ul> <section id="comments" class="themeform"> <!-- comments open, no comments --> <div id="respond" class="comment-respond"> <h3 id="reply-title" class="comment-reply-title">Добавить комментарий <small><a rel="nofollow" id="cancel-comment-reply-link" href="/raznoe-2/modx-if-else-ispolzovanie-uslovij-if-else-v-modx.html#respond" style="display:none;">Отменить ответ</a></small></h3><form action="https://ylianova.ru/wp-comments-post.php" method="post" id="commentform" class="comment-form"><p class="comment-notes"><span id="email-notes">Ваш адрес email не будет опубликован.</span> <span class="required-field-message">Обязательные поля помечены <span class="required">*</span></span></p><p class="comment-form-comment"><label for="comment">Комментарий <span class="required">*</span></label> <textarea id="comment" name="comment" cols="45" rows="8" maxlength="65525" required="required"></textarea></p><p class="comment-form-author"><label for="author">Имя <span class="required">*</span></label> <input id="author" name="author" type="text" value="" size="30" maxlength="245" autocomplete="name" required="required" /></p> <p class="comment-form-email"><label for="email">Email <span class="required">*</span></label> <input id="email" name="email" type="text" value="" size="30" maxlength="100" aria-describedby="email-notes" autocomplete="email" required="required" /></p> <p class="comment-form-url"><label for="url">Сайт</label> <input id="url" name="url" type="text" value="" size="30" maxlength="200" autocomplete="url" /></p> <p class="form-submit"><input name="submit" type="submit" id="submit" class="submit" value="Отправить комментарий" /> <input type='hidden' name='comment_post_ID' value='21230' id='comment_post_ID' /> <input type='hidden' name='comment_parent' id='comment_parent' value='0' /> </p></form> </div><!-- #respond --> </section><!--/#comments--> </div><!--/.pad--> </section><!--/.content--> <div class="sidebar s1"> <a class="sidebar-toggle" title="Развернуть боковую панель"><i class="fa icon-sidebar-toggle"></i></a> <div class="sidebar-content"> <div id="search-2" class="widget widget_search"><form method="get" class="searchform themeform" action="https://ylianova.ru/"> <div> <input type="text" class="search" name="s" onblur="if(this.value=='')this.value='Введите поисковую фразу';" onfocus="if(this.value=='Введите поисковую фразу')this.value='';" value="Введите поисковую фразу" /> </div> </form></div><div id="nav_menu-2" class="widget widget_nav_menu"><h3>Рубрики</h3><div class="menu-2-container"><ul id="menu-2" class="menu"><li id="menu-item-5370" class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-5370"><a href="https://ylianova.ru/category/css">Css</a></li> <li id="menu-item-5371" class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-5371"><a href="https://ylianova.ru/category/html">Html</a></li> <li id="menu-item-5372" class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-5372"><a href="https://ylianova.ru/category/http">Http</a></li> <li id="menu-item-5373" class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-5373"><a href="https://ylianova.ru/category/javascript">Javascript</a></li> <li id="menu-item-5374" class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-5374"><a href="https://ylianova.ru/category/photoshop">Photoshop</a></li> <li id="menu-item-5375" class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-5375"><a href="https://ylianova.ru/category/verstka">Верстка</a></li> <li id="menu-item-5376" class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-5376"><a href="https://ylianova.ru/category/raznoe">Вопросы и ответы</a></li> <li id="menu-item-5377" class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-5377"><a href="https://ylianova.ru/category/maket">Макет</a></li> <li id="menu-item-5378" class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-5378"><a href="https://ylianova.ru/category/sajt">Развитие сайтов</a></li> <li id="menu-item-5380" class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-5380"><a href="https://ylianova.ru/category/sajt-2">Сайт</a></li> <li id="menu-item-5381" class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-5381"><a href="https://ylianova.ru/category/shablon-2">Шаблон</a></li> <li id="menu-item-5382" class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-5382"><a href="https://ylianova.ru/category/shrift-2">Шрифт</a></li> <li id="menu-item-5379" class="menu-item menu-item-type-taxonomy menu-item-object-category current-post-ancestor current-menu-parent current-post-parent menu-item-5379"><a href="https://ylianova.ru/category/raznoe-2">Разное</a></li> </ul></div></div><div id="categories-3" class="widget widget_categories"><h3>Рубрики</h3> <ul> <li class="cat-item cat-item-5"><a href="https://ylianova.ru/category/css">Css</a> </li> <li class="cat-item cat-item-4"><a href="https://ylianova.ru/category/html">Html</a> </li> <li class="cat-item cat-item-9"><a href="https://ylianova.ru/category/http">Http</a> </li> <li class="cat-item cat-item-10"><a href="https://ylianova.ru/category/javascript">Javascript</a> </li> <li class="cat-item cat-item-11"><a href="https://ylianova.ru/category/photoshop">Photoshop</a> </li> <li class="cat-item cat-item-19"><a href="https://ylianova.ru/category/adaptiv">Адаптив</a> </li> <li class="cat-item cat-item-17"><a href="https://ylianova.ru/category/verstka">Верстка</a> </li> <li class="cat-item cat-item-3"><a href="https://ylianova.ru/category/raznoe">Вопросы и ответы</a> </li> <li class="cat-item cat-item-16"><a href="https://ylianova.ru/category/maket">Макет</a> </li> <li class="cat-item cat-item-6"><a href="https://ylianova.ru/category/sajt">Развитие сайтов</a> </li> <li class="cat-item cat-item-13"><a href="https://ylianova.ru/category/raznoe-2">Разное</a> </li> <li class="cat-item cat-item-12"><a href="https://ylianova.ru/category/sajt-2">Сайт</a> </li> <li class="cat-item cat-item-1"><a href="https://ylianova.ru/category/sovety">Советы</a> </li> <li class="cat-item cat-item-15"><a href="https://ylianova.ru/category/shablon-2">Шаблон</a> </li> <li class="cat-item cat-item-7"><a href="https://ylianova.ru/category/shablon">Шаблоны</a> </li> <li class="cat-item cat-item-14"><a href="https://ylianova.ru/category/shrift-2">Шрифт</a> </li> <li class="cat-item cat-item-8"><a href="https://ylianova.ru/category/shrift">Шрифты</a> </li> </ul> </div><div id="custom_html-21" class="widget_text widget widget_custom_html"><div class="textwidget custom-html-widget"><style>iframe,object{width:100%;height:480px}img{max-width:100%}</style><script type="text/javascript">jQuery(document).ready(function($){$('.mylink').replaceWith(function(){return'<a href="'+$(this).attr('data-url')+'" title="'+$(this).attr('title')+'">'+$(this).html()+'</a>'})});new Image().src="//counter.yadro.ru/hit?r"+escape(document.referrer)+((typeof(screen)=="undefined")?"":";s"+screen.width+"*"+screen.height+"*"+(screen.colorDepth?screen.colorDepth:screen.pixelDepth))+";u"+escape(document.URL)+";h"+escape(document.title.substring(0,150))+";"+Math.random();</script></div></div> </div><!--/.sidebar-content--> </div><!--/.sidebar--> </div><!--/.main--> </div><!--/.container-inner--> <footer id="footer"> <section id="footer-bottom"> <div class="container"> <a id="back-to-top" href="#"><i class="fa fa-angle-up"></i></a> <div class="pad group"> <div class="grid one-half"> <div id="copyright"> <p>Блог сумасшедшего сисадмина © 2022. Все права защищены.</p> </div><!--/#copyright--> <div id="credit"> <p><a href="/sitemap.xml" class="c_sitemap">Карта сайта</a> </p> </div><!--/#credit--> </div> <div class="grid one-half last"> </div> </div><!--/.pad--> </div><!--/.container--> </section><!--/#footer-bottom--> </footer><!--/#footer--> </div><!--/#wrapper--> <style type="text/css"> .archive #nav-above, .archive #nav-below, .search #nav-above, .search #nav-below, .blog #nav-below, .blog #nav-above, .navigation.paging-navigation, .navigation.pagination, .pagination.paging-pagination, .pagination.pagination, .pagination.loop-pagination, .bicubic-nav-link, #page-nav, .camp-paging, #reposter_nav-pages, .unity-post-pagination, .wordpost_content .nav_post_link,.page-link, .page-links,#comments .navigation, #comment-nav-above, #comment-nav-below, #nav-single, .navigation.comment-navigation, comment-pagination { display: none !important; } .single-gallery .pagination.gllrpr_pagination { display: block !important; } </style> <link rel='stylesheet' id='yarppRelatedCss-css' href='https://ylianova.ru/wp-content/plugins/yet-another-related-posts-plugin/style/related.css?ver=6.1.1' type='text/css' media='all' /> <link rel='stylesheet' id='pgntn_stylesheet-css' href='https://ylianova.ru/wp-content/plugins/pagination/css/nav-style.css?ver=6.1.1' type='text/css' media='all' /> <script type='text/javascript' src='https://ylianova.ru/wp-content/themes/anew/js/jquery.jplayer.min.js?ver=6.1.1' id='jplayer-js'></script> <script type='text/javascript' src='https://ylianova.ru/wp-content/themes/anew/js/scripts.js?ver=6.1.1' id='scripts-js'></script> <script type='text/javascript' src='https://ylianova.ru/wp-content/themes/anew/js/jquery.sharrre.min.js?ver=6.1.1' id='sharrre-js'></script> <script type='text/javascript' src='https://ylianova.ru/wp-includes/js/comment-reply.min.js?ver=6.1.1' id='comment-reply-js'></script> <script type='text/javascript' src='https://ylianova.ru/wp-content/plugins/easy-table-of-contents/vendor/smooth-scroll/jquery.smooth-scroll.min.js?ver=1.5.5' id='jquery-smooth-scroll-js'></script> <script type='text/javascript' src='https://ylianova.ru/wp-content/plugins/easy-table-of-contents/vendor/js-cookie/js.cookie.min.js?ver=2.0.3' id='js-cookie-js'></script> <script type='text/javascript' src='https://ylianova.ru/wp-content/plugins/easy-table-of-contents/vendor/sticky-kit/jquery.sticky-kit.min.js?ver=1.9.2' id='jquery-sticky-kit-js'></script> <script type='text/javascript' src='https://ylianova.ru/wp-content/plugins/easy-table-of-contents/vendor/waypoints/jquery.waypoints.min.js?ver=1.9.2' id='jquery-waypoints-js'></script> <script type='text/javascript' id='ez-toc-js-js-extra'> /* <![CDATA[ */ var ezTOC = {"smooth_scroll":"1","visibility_hide_by_default":"","width":"auto","scroll_offset":"30"}; /* ]]> */ </script> <script type='text/javascript' src='https://ylianova.ru/wp-content/plugins/easy-table-of-contents/assets/js/front.min.js?ver=1.7' id='ez-toc-js-js'></script> <!--[if lt IE 9]> <script src="https://ylianova.ru/wp-content/themes/anew/js/ie/respond.js"></script> <![endif]--> </body> </html>