Методы работы с плейсхолдерами MODX
[[++site_url]]
, [[++assets_url]]
, [[+modx.user.id]]
и т.д. Но очень часто возникает необходимость вывести какую-то дополнительную информацию на сайте. В этом случае нам нужно определить свои плейсходеры и для этого в MODX есть несколько методов.[[+Placeholder]]
. $modx->placeholders
. Именно в него добавляются наши плейсхолдеры и из него зачитываются при парсинге страницы.Давайте рассмотрим все методы для работы с ними.
- setPlaceholder(key, value)
- setPlaceholders(array, prefix)
- toPlaceholder(key, value, prefix, separator, restore)
- toPlaceholders(array, prefix, separator, restore)
- getPlaceholder(key)
- unsetPlaceholder(key)
- unsetPlaceholders(keys)
1. setPlaceholder()
setPlaceholder(string $key, mixed $value)
Этот метод сохраняет плейсхолдер с указанным ключем и присваивает ему переданное значение. Он ничего не возвращает.
$modx->setPlaceholder('name','Barry');После этого вам становится доступным плейсхолдер
[[+name]]
. Его можно вставлять в шаблон, контент страницы или в чанк.2. setPlaceholders()
setPlaceholders (array|object $placeholders, [string $namespace = ''])
В этом методе можно определить сразу несколько плейсхолдеров, которые могут быть переданы в простом ассоциативном массиве или в объекте. Обратите внимание, у этого метода есть второй параметр $namespace
, который используется в качестве префикса. Этот метод также ничего не возвращает.
$modx->setPlaceholders(array( 'name' => 'John', 'email' => 'jdoe@gmail.com', ),'my.');Доступные плейсхолдеры —
[[+my.name]]
и [[+my.email]]
.3. toPlaceholder()
toPlaceholder(string $key, mixed $value, [string $prefix = ''], [string $separator = '.'], [boolean $restore = false])
Этот метод похож на setPlaceholder()
, но имеет дополнительные параметры для префикса и разделителя, который добавляется между префиксом и ключом. А еще у него есть пятый параметр $restore
, который, если указать ему true
, вернет в массиве старое значение плейсходера в ключе "restore"
. Метод toPlaceholder()
возвращает массив с плейсхолдерами в ключе 'keys'.
$value
можно передавать массив. Ключи этого массива будут добавлены к ключу через разделитель.//Пример 1. $res = $modx->toPlaceholder('city','Moscow','my'); // Выставит плейсхолдер [[+my.city]] со значение 'Moscow' и вернет массив array( 'keys' => array('my.city') ) // Пример 2. // Если мы попытаемся переопределить уже установленный плейсхолдер и // установим последний параметр $restore в true $res = $modx->toPlaceholder('sity','Omsk','my','.',true) // то получим такой массив array( 'keys' => array('my.sity') 'restore' => array( 'my.city' => 'Moscow' ) ) // Пример 3. // Передаем массив $res = $modx->toPlaceholder('city',array('oldName'=>'Константинополь','newName'=>'Стамбул'),'turkey') // получаем 2 плейсхолдера - [[+turkey.city.oldName]] и [[+turkey.city.newName]] со значениями 'Константинополь' // и 'Стамбул' соответственно. А в переменной $res будет массив array( 'keys' => array( 'turkey.city.oldName', 'turkey.city.newName' ) )
4. toPlaceholders()
toPlaceholders(array|object $subject, [string $prefix = ''], [string $separator = '.'], [boolean $restore = false])
Этот метод расширяет метод toPlaceholders()
. В $subject
можно передавать многоуровневый массив. Он будет рекурсивно обработан. Ключ каждого уровня массива будет добавлен к ключу плейсхолдера через разделитель
$modx->toPlaceholders( array( 'foo' => 'bar', 'document' => array( 'pagetitle' => 'My Page') ), 'my' );Получаем
[[+my.foo]]
и [[+my.document.pagetitle]]
.5. getPlaceholder()
getPlaceholder(string $key)
Этот метод позволяет получить уже установленный плейсхолдер.
$value = $modx->getPlaceholder('MyPlaceholder'); // Альтернативный способ $value = $modx->placeholders['MyPlaceholder'];
6. unsetPlaceholder()
unsetPlaceholder(string $key)
Удаляет установленный плейсхолдер.
$modx->unsetPlaceholder('MyPlaceholder');
7. unsetPlaceholders()
unsetPlaceholders(string|array $keys)
Удаление нескольких плейсхолдеров.
$modx->unsetPlaceholders(array('my.name','my.email')); // Удаление плейсхолдеров с префиксом 'my.' $modx->unsetPlaceholders('my.');
Надеюсь, теперь использование этих методов не вызовет затруднений.
Комментарии ()
Вы должны авторизоваться, чтобы оставлять комментарии.
Пытаюсь сделать плагин на событие OnWebPagePrerender
но ничего не выходит.
также пробовал:
Тоже не получается.
Думается, что дело в кэшировании свойств контекста.
вот что у меня получилось: