Добавить поле на редактирование к ресурсу [Решено]
Ребята привет!
Добавил в таблицу modx_site_content два поля, в которых хочу хранить идентификаторы из 1С (36 символов).
Хочу научить modx работать с ними как с обычными полями формы документа и никак не могу понять, как это нормально сделать. Расширял классы пользователей, их профилей, заказов minishop2 — все видит и все работает как надо, но как только пытаюсь добавить в field и fieldMeta эти поля аналогичным образом для modResource — сайт вообще перестает видеть ресурс и при клике для открытия формы на редактирования говорит, что ресурс не найден.
Как правильно поступить в таком случае?
Что сделал:
создал файл с таким кодом
Смотрю $_POST при сохранении ресурса- полей нет, не попадают в объект.
Добавил на onDocFormSave
ЧЯДНТ?
Добавил в таблицу modx_site_content два поля, в которых хочу хранить идентификаторы из 1С (36 символов).
Хочу научить modx работать с ними как с обычными полями формы документа и никак не могу понять, как это нормально сделать. Расширял классы пользователей, их профилей, заказов minishop2 — все видит и все работает как надо, но как только пытаюсь добавить в field и fieldMeta эти поля аналогичным образом для modResource — сайт вообще перестает видеть ресурс и при клике для открытия формы на редактирования говорит, что ресурс не найден.
Как правильно поступить в таком случае?
Что сделал:
создал файл с таким кодом
Ext.override(MODx.panel.Resource,{
getParentMainLeftFields: MODx.panel.Resource.prototype.getMainLeftFields,
getMainLeftFields: function(config){
var parentMainLeftFields = this.getParentMainLeftFields.call(this,config);
parentMainLeftFields.push({
xtype: 'textfield'
,fieldLabel: 'ID 1C'
,description: '<b>[[*id_1C]]</b>'
,name: 'id_1C'
,id: 'modx-resource-id_1C'
,maxLength: 255
,anchor: '100%'
,value: config.record.id_1C || ''
},{
xtype: 'textfield'
,fieldLabel: 'ID родителя 1C'
,description: '<b>[[*id_parent_1C]]</b>'
,name: 'id_1C'
,id: 'modx-resource-id_parent_1C'
,maxLength: 255
,anchor: '100%'
,value: config.record.id_parent_1C || ''
});
return parentMainLeftFields;
}
});
Подключаю его при onDocFormRender через$modx->controller->addLastJavascript(MODX_ASSETS_URL . 'components/smz/js/mgr/resource/field.js');
Поля появляются в форме редактирования. Но сохранить в них ничего нельзя (но если напрямую указать в БД у этих полей значения — выводит четко). Смотрю $_POST при сохранении ресурса- полей нет, не попадают в объект.
Добавил на onDocFormSave
$modx->regClientStartupScript(MODX_ASSETS_URL . 'components/smz/js/mgr/resource/field.js');
Появились, но все равно пустые.ЧЯДНТ?
Комментарии: 3
Как обычно: сам задал вопрос — сам отвечаю.
1. Добавил поля id_1C и id_parent_1C в modx_site_content
2. В плагине на OnMODXInit (у меня там куча полей для расширения разных классов)
написал
1. Добавил поля id_1C и id_parent_1C в modx_site_content
2. В плагине на OnMODXInit (у меня там куча полей для расширения разных классов)
написал
$modx->map['modResource']['fields']['id_1C'] = '';
$modx->map['modResource']['fields']['id_parent_1C'] = '';
$modx->map['modResource']['fieldMeta']['id_1C'] = array(
'dbtype' => 'varchar',
'precision' => 50,
'phptype' => 'string',
'null' => false,
'default' => ''
);
$modx->map['modResource']['fieldMeta']['id_parent_1C'] = array(
'dbtype' => 'varchar',
'precision' => 50,
'phptype' => 'string',
'null' => false,
'default' => ''
);
3. В плагине на OnDocFormSave и onDocFormPrerenderswitch ($modx->event->name) {
case 'OnDocFormPrerender':
$id_1C = '';
$id_parent_1C = '';
if (isset($scriptProperties['resource'])) {
if (is_object($resource)) {
$id_1C = $resource->get('id_1C');
$id_parent_1C = $resource->get('id_parent_1C');
}
}
$modx->controller->addHtml(<<<HTML
<script>
Ext.ComponentMgr.onAvailable('modx-resource-main-left', function(page) {
page.on('beforerender', function() {
page.insert(2,{
xtype: 'textfield'
,name: 'id_1C'
,value: '{$id_1C}'
,anchor: '100%'
,layout: 'anchor'
,fieldLabel: 'ID 1C'
});
page.insert(3,{
xtype: 'textfield'
,name: 'id_parent_1C'
,value: '{$id_parent_1C}'
,anchor: '100%'
,layout: 'anchor'
,fieldLabel: 'ID родителя 1C'
});
})
});
</script>
HTML
);
break;
case 'OnDocFormSave':
$resource->set('id_1C', $_POST['id_1C']);
$resource->set('id_parent_1C', $_POST['id_parent_1C']);
break;
}
return;
Все заработало.
А разве этот код нельзя упростить? Ну или сократить через сжатие?
switch ($modx->event->name) {
case 'OnDocFormPrerender':
$id_1C = '';
$id_parent_1C = '';
if (isset($scriptProperties['resource'])) {
if (is_object($resource)) {
$id_1C = $resource->get('id_1C');
$id_parent_1C = $resource->get('id_parent_1C');
}
}
$modx->controller->addHtml(<<<HTML
HTML
);
break;
case 'OnDocFormSave':
$resource->set('id_1C', $_POST['id_1C']);
$resource->set('id_parent_1C', $_POST['id_parent_1C']);
break;
}
return;
switch ($modx->event->name) {
case 'OnDocFormPrerender':
$id_1C = '';
$id_parent_1C = '';
if (isset($scriptProperties['resource'])) {
if (is_object($resource)) {
$id_1C = $resource->get('id_1C');
$id_parent_1C = $resource->get('id_parent_1C');
}
}
$modx->controller->addHtml(<<<HTML
HTML
);
break;
case 'OnDocFormSave':
$resource->set('id_1C', $_POST['id_1C']);
$resource->set('id_parent_1C', $_POST['id_parent_1C']);
break;
}
return;
Ну так куча полей то для разных целей
1. Добавил поля id_1C и id_parent_1C в modx_site_content
2. В плагине на OnMODXInit (у меня там куча полей для расширения разных классов)
написал
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.