Skip to content

Instantly share code, notes, and snippets.

@kuzminT
Last active June 8, 2018 06:49
Show Gist options
  • Save kuzminT/94045c803ea681384c51be8c50238e94 to your computer and use it in GitHub Desktop.
Save kuzminT/94045c803ea681384c51be8c50238e94 to your computer and use it in GitHub Desktop.
Function for create document programmatically in MODX REVO CMS

Функция для быстрого программного создания документов в CMS MODX REVO.

  • Принимает в качестве аргументов два ассоциативных массива - со значениями стандартных полей документа и с tv-полями. Документы остаются неопубликованными (можно изменить принцип). В интротексте убираются все теги. Алиас создаётся из pagetitle.
  • В файле, в котором вызывается функция, должен быть определён глобально $modx и MODX_API_MODE. Заголовок документа должен присутствовать среди полей обязательно.

Функция будет в дальнейшем дорабатываться.

<?php
function addDoc( array $arr_values, array $tvs = [] ) {
global $modx;
if ( ! isset( $modx ) || ! defined( 'MODX_API_MODE' ) ) {
return false;
}
if (!isset($arr_values['pagetitle'])) {
print "\nРесурс не создан! Не задан заголовок документа.\n";
return false;
}
$res = $modx->newObject( 'modResource' );
/* Устанавливаем значения стандартных полей документа */
foreach ( $arr_values as $k => $v ) {
if ( $k == 'description' ) {
$description = strip_tags( mb_substr( $v, 0, 255 ) );
$res->set( 'description', $description );
} else if ( $k == 'introtext' ) {
$res->set( 'introtext', strip_tags( $v ) );
} else {
$res->set( $k, $v );
}
}
if ( ! $res->alias ) {
$res->set( 'alias', $res->cleanAlias( $res->get( 'pagetitle' ) ) );
}
$res->set( 'published', 0 );
$res->save();
if ( count( $tvs ) ) {
foreach ( $tvs as $key => $value ) {
$res->setTVValue( $key, $value );
}
}
if ( $res->id ) {
printf( "\nСоздан документ '%s' с id %d\n", $res->pagetitle, $res->id );
}
return true;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment