Вывод кастомных полей ресурса в админке

Всем привет!
Хочу добавить пару полей в modResource, скажем, еще один заголовок и еще одно поле с контентом. Ну вот хочется мне :) Допустим, расширение стандартной модели я сделаю по заметке Василия. Но как быть с админкой? Я где-то видел хитрый плагин тут на сайте, который добавляет кастомный js к ресурсу, но уже два часа копаюсь и не могу найти. Может напомнит кто?
Дмитрий
02 февраля 2018, 11:43
modx.pro
4
1 482
0
Поблагодарить автора Отправить деньги

Комментарии: 1

Дмитрий
05 февраля 2018, 14:48
0
Таки нашел сам. Столько времени потратил :)
Плагин вешается на события, указанные в коде.
Тут пример с использованием кастомного класса, но убрать его и заменить на что-то другое не проблема, я полагаю.
<?php

$modx->addPackage('extendResource', $modx->getOption('core_path').'components/extendresource/model/');
 
switch ($modx->event->name) {
    case 'OnDocFormPrerender':
        $views = 0;
        $keywords='';
        $level = 0;
        if (isset($scriptProperties['resource'])) {
            $id = $scriptProperties['resource']->get('id');
            $query = $modx->newQuery('extendResource');
            $query->where(array(
               'resource' => $id,
            ));
            $extendResource = $modx->getObject('extendResource',$query);
            if (is_object($extendResource)) {
                $views = $extendResource->get('views');
                $keywords = $extendResource->get('keywords');
                $level = $extendResource->get('level');
            }
        }
$modx->controller->addHtml(<<<HTML
<script>
    Ext.ComponentMgr.onAvailable('modx-resource-main-right', function(page) {
        page.on('beforerender', function() {
            page.insert(2,{
                xtype: 'textfield'
                ,name: 'views'
                ,value: {$views}
                ,anchor: '100%'
                ,layout: 'anchor'
                ,fieldLabel: 'Просмотры'
            });
            page.insert(3,{
                xtype: 'textfield'
                ,name: 'level'
                ,value: {$level}
                ,anchor: '100%'
                ,layout: 'anchor'
                ,fieldLabel: 'Уровень'
            });
        })
    });
    Ext.ComponentMgr.onAvailable('modx-resource-main-left', function(page) {
        page.on('beforerender', function() {
            page.insert(2,{
                xtype: 'textfield'
                ,name: 'keywords'
                ,value: '{$keywords}'
                ,anchor: '100%'
                ,layout: 'anchor'
                ,fieldLabel: 'Ключевые слова'
            });
        })
    });
</script>
HTML
);
        break;
        
    case 'OnDocFormSave':
        // do processing logic here. 
        $id = $scriptProperties['resource']->get('id');
        $query = $modx->newQuery('extendResource');
        $query->where(array(
          'resource' => $id,
        ));
        $extendResource = $modx->getObject('extendResource',$query);
        if (!is_object($extendResource)) {
            $extendResource = $modx->newObject('extendResource');
            $extendResource->set('resource', $id);            
        }
        $extendResource->set('views', $_POST['views']);
        $extendResource->set('keywords', $_POST['keywords']);
        $extendResource->set('level', $_POST['level']);
        $extendResource->save();
        break;
}
return;
    Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
    1