Jump to main content Jump to doc navigation

Доступ к значениям переменных шаблона через API

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

getTVValue

string|null getTVValue (str|integer $tv_name OR ID of TV)

Смотри core/model/modx/modresource.class.php

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

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

$page = $modx->getObject('modResource', 123);
return $page->getTVValue('bio');

getTVValue извлекает значения из кэша ресурсов, когда они доступны. Эти кэши обычно очищаются при сохранении ресурса, однако, если вы обновляете значения TV с помощью метода setTVValue, приведенного ниже, эти значения не будут отражаться напрямую из-за кэша. Если вам абсолютно необходимы последние данные, вы можете обойти кеш, перейдя прямо к данным и используя getObject, чтобы получить запись значения TV.

$tvr = $modx->getObject('modTemplateVarResource', array(
  'tmplvarid' => $tvId,
  'contentid' => $resourceId
));
if ($tvr) {
  return $tvr->get('value');
}
else {
  $tv = $modx->getObject('modTemplateVar', $tvId);
  if ($tv) return $tv->get('default_text');
}
return '';

setTVValue

Используйте setTVValue, чтобы сохранить новое значение на телевизоре. В отличие от некоторых других методов API xPDO, этот метод немедленно сохраняет значения в базе данных, поэтому вам не нужно вызывать отдельный вызов метода save(). Этот метод не очищает кэш ресурсов.

boolean setTVValue (str|integer $tv_name OR ID of TV, string $value)

Обратите внимание, что при использовании setTVValue возможно немедленное получение getTVValue для возврата кэшированного значения.

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

$page = $modx->getObject('modResource', 123);
if (!$page->setTVValue('bio', 'This is my new bio...')) {
    $modx->log(xPDO::LOG_LEVEL_ERROR, 'There was a problem saving your TV...');
}

Смотрите также