Дополнительные поля в MODx Revolution, MODx API

Создадим простое текстовое поле

$name = 'tvname'; // имя ТВ
$tempID = '1'; // ID шаблонов, для которых доступна,
if (!$tv = $modx->getObject('modTemplateVar', array('name' => $name))) {
    $tv = $modx->newObject('modTemplateVar');
}
$tv->fromArray(array(
    'name'         => $name,
    'type'         => 'text',
    'caption'      => 'Имя ТВ', // подпись
    'description'  => 'Описание ТВ', // описание
    'category'     => 0 // ID категории
));
$tv->save();
$tvs[] = $tv->get('id').'-'.$tempID;   

foreach ($modx->getCollection('modTemplate') as $template) 
{
    $templateId = $template->id;
    foreach ($tvs as $k => $tv) {
        $tvOpt = explode("-", $tv);
        $tvid = $tvOpt[0];
        $tvTemps = explode(",",$tvOpt[1]);
        
        foreach ($tvTemps as $tvTemp){
            if($templateId == $tvTemp){
                if (!$tvt = $modx->getObject('modTemplateVarTemplate', array('tmplvarid' => $tvid, 'templateid' => $templateId))) {
                    $record = array('tmplvarid' => $tvid, 'templateid' => $templateId);
                    $keys = array_keys($record);
                    $fields = '`' . implode('`,`', $keys) . '`';
                    $placeholders = substr(str_repeat('?,', count($keys)), 0, -1);
                    $sql = "INSERT INTO {$modx->getTableName('modTemplateVarTemplate')} ({$fields}) VALUES ({$placeholders});";
                    $modx->prepare($sql)->execute(array_values($record));
                }
            }
        }
    }

Заполним текстовое поле

// Выбираем ресурс 
$page = $modx->getObject('modResource', 1);

if (!$page->setTVValue('tvname', 'Привет Мир')) {
    $modx->log(1, 'Произошла ошибка при сохранении ТВ');
}

Получим значение tv параметра

    $page = $modx->getObject('modResource', 1);
    echo $page->getTVValue('tvname');

Удалим дополнительное поле

$tv = $modx->getObject('modTemplateVar', array('name' => 'tvname'));
$tv->remove();