Многие знают, что в MODX уже есть набор системных плейсхолдеров — [[++site_url]], [[++assets_url]], [[+modx.user.id]] и т.д. Но очень часто возникает необходимость вывести какую-то дополнительную информацию на сайте. В этом случае нам нужно определить свои плейсходеры и для этого в MODX есть несколько методов.
Напомню, что плейсхолдеры — это один из базовых элементов MODX. Они используются, как правило, для отображения хранимой в них информации в чанках и шаблонах и имеют следующий синтаксис [[+Placeholder]].
Все плейсхолдеры находятся в массиве $modx->placeholders. Именно в него добавляются наши плейсхолдеры и из него зачитываются при парсинге страницы.

Давайте рассмотрим все методы для работы с ними.

  1. setPlaceholder(key, value)
  2. setPlaceholders(array, prefix)
  3. toPlaceholder(key, value, prefix, separator, restore)
  4. toPlaceholders(array, prefix, separator, restore)
  5. getPlaceholder(key)
  6. unsetPlaceholder(key)
  7. 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". Метод setPlaceholder() возвращает массив с плейсхолдерами в ключе '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.');

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

18 декабря 2015, 12:17   6343     0

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

    Вы должны авторизоваться, чтобы оставлять комментарии.

    Выделите опечатку и нажмите Ctrl + Enter, чтобы отправить сообщение об ошибке.