Создать ресурс средствами Modx API

май 4 , 2015
Метки:

Мы уже рассматривали, как получать доступ к ресурсам Modx, редактировать их поля и дополнительные параметры. В этой статье мы будем создавать новые ресурсы через Modx API.

Рассмотрим, как создать новый документ Modx Revo средствами API. Создавать будем страницу отзыва, передавая в функцию 2 параметра: имя и сам отзыв.

    // Получаем переменные из POST-параметров
    $name = addslashes($_POST['name']);
    $message = addslashes($_POST['message']);    
    
    // Создаем новый ресурс
    $resource = $modx->newObject('modResource');                        
    $resource->set('template', 5);             // Назначаем ему нужный шаблон
    $resource->set('isfolder', 0);             // Указываем, что это не контейнер   
    $resource->set('published', 0);            // Неопубликован
    $resource->set('createdon', time());       // Время создания
    $resource->set('pagetitle', $name);        // Заголовок
    $resource->set('alias', 'new-feedback');   // Псевдоним
    $resource->setContent($message);           // Содержимое
    $resource->set('parent', 30);              // Родительский ресурс
    $resource->save();                         // Сохраняем

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

При создании ресурса динамически есть одна проблема. Параметр alias - это обязательное поле при создании документа, причем буквы должны быть только латинские. Но при создании ресурса динамически мы вряд ли сможем заранее создать псевдоним для нашего ресурса. Мы хотим, чтобы он создавался на основе заголовка pagetitle. При работе в админке Modx нас выручают плагины вроде translit, которые выполняют перевод русских символов в латинские. Давайте напишем небольшую простую функцию на php, которая делает то же самое и позволит нам генерировать alias на ходу.

    function transliterate($st) {
        $st=strtr($st, 
            "абвгдежзийклмнопрстуфыэАБВГДЕЖЗИЙКЛМНОПРСТУФЫЭ",
            "abvgdegziyklmnoprstufieABVGDEGZIYKLMNOPRSTUFIE"
        );
        $st=strtr($st, array(
            'ё'=>"yo",    'х'=>"h",  'ц'=>"ts",  'ч'=>"ch", 'ш'=>"sh",  
            'щ'=>"shch",  'ъ'=>'',   'ь'=>'',    'ю'=>"yu", 'я'=>"ya",
            'Ё'=>"Yo",    'Х'=>"H",  'Ц'=>"Ts",  'Ч'=>"Ch", 'Ш'=>"Sh",
            'Щ'=>"Shch",  'Ъ'=>'',   'Ь'=>'',    'Ю'=>"Yu", 'Я'=>"Ya",
        ));
        return $st;
    }

Это не самая удачная, но работающая реализация. Приведена для примера, Вы же можете изменить ее под себя. Соответственно, код формирования псевдонима сменится на

    $resource->set('alias', strtolower(transliterate($name)));
Метки:
Заходите в группу в контакте - https://vk.com/webdevkin
Анонсы статей, обсуждения интернет-магазинов, vue, фронтенда, php, гита.
Истории из жизни айти и обсуждение кода.
Как Вам статья? Оцените!