Как добавить поле в админке только одному ресурсу?
Здравствуйте!
Возможно ли в админке добавить свои поля при редактировании ресурса, но только одному определенному ресурсу? Т.е. чтобы у всех остальных этих полей не было
Возможно ли в админке добавить свои поля при редактировании ресурса, но только одному определенному ресурсу? Т.е. чтобы у всех остальных этих полей не было
Комментарии: 13
Сделать этому ресурсу отдельный шаблон и добавить TV-шки.
тут просто TV не подойдет. Просто сама суть задачи: вывести два поля: выпадающий список и просто текстовое поле. В выпадающем списке дочерние ресурсы и при их выборе в текстовом выводится значение одной TV-шки выбранного ресурса. Мне бы просто узнать условие какое писать в плагине? Проверять если id ресурса равно условно 3, то добавить ему кастомное поле, верно?
вроде все верно звучит, да
Да конечно возможно.
Если вы добавляете дополнительное текстовое поле в админке — то у вас всегда доступен объект this.record где есть все поля ресурса. Там вы без проблем можете получить доступ и к Id страницы, и к шаблону и родителю и любому другому полю, которое подходит для фильтрации
Если вы добавляете дополнительное текстовое поле в админке — то у вас всегда доступен объект this.record где есть все поля ресурса. Там вы без проблем можете получить доступ и к Id страницы, и к шаблону и родителю и любому другому полю, которое подходит для фильтрации
switch ($modx->event->name) {
case 'OnDocFormPrerender':
$modx->controller->addHtml("
<script type='text/javascript'>
Ext.ComponentMgr.onAvailable('modx-panel-resource', function(){
//Подключаем по id
if(this.record.id !== 1) {return;}
//Подключаем по template
if(this.record.id !== 4) {return;}
//Подключаем по parent
if(this.record.parent !== 10) {return;}
const leftCol = this.items[1].items[0].items[0].items[0];
const en_title = {
anchor: '100%',
description: '<b>[[*en_pagetitle]]</br>Заголовок на английском</b>',
fieldLabel: 'Заголовок на английском',
id: 'modx-resource-en-pagetitle',
maxLength:255,
msgTarget: 'under',
name:'en_pagetitle',
xtype:'textfield'
}
leftCol.items.splice(1, 0, en_title);
});
</script>");
break;
}
круто, получилось! а не подскажете, можно ли в этом поле выводить значение tv дочернего ресурса, чтобы я мог его тут редактировать? такое возможно?
можно ли в этом поле выводить значение tv дочернего ресурсаПо умолчанию нельзя конечно. У нас доступны только поля текущего ресурса.
Навскидку вижу два пути решения вопроса.
1. Сделать небольшую инъекцию в процессор get — где просто добавить нужное поле
2. В JS скрипте при его загрузке делать ajax или fetch запрос за нужными данными и уже там подмешивать куда нужно значение поля
а, нет пардон, не получилось.
код плагина:
код плагина:
<?php
if($modx->event->name != 'OnDocFormRender') return '';
$modx->controller->addLastJavascript('/assets/components/mynamespace/js/tab.js');
Код tab.js:Ext.override(MODx.panel.Resource, {
getParentFields: MODx.panel.Resource.prototype.getFields,
getFields: function(config){
var parentFields = this.getParentFields.call(this, config);
for(var i in parentFields) {
var item = parentFields[i];
if(item.id == 'modx-resource-tabs') {
item.items.push({
id: 'my-custom-tab'
,autoHeight: true
,title: 'Редактирование новостей'
,layout: 'form'
,anchor: '100%'
,items: [{
html: '<p>Тут можно привязать товары к новостям</p>'
,bodyCssClass: 'panel-desc'
,border: false
},{
layout: 'column',
width: '100%',
anchor: '100%',
cls: 'main-wrapper',
items: [{
columnWidth: .5,
items: [{
xtype: 'numberfield',
fieldLabel: '<span>Выберите новость</span>',
width: '100%',
}]
}, {
columnWidth: .5,
items: [{
xtype: 'textfield',
fieldLabel: '<span>Введите ID товаров через запятую</span>',
width: '100%',
}]
}]
}]
});
}
}
return parentFields;
}
});
где мне в tab.js проверить id ресурса? где мне в tab.js проверить id ресурса?Ну правильнее всего в начале скрипта первой строкой
правильно ли я сделал:
Ext.ComponentMgr.onAvailable('modx-panel-resource', function(){
//Подключаем по id
if(this.record.id == 452) {
тут остальной код tab.js
}
});
В целом да, но сравните с моим примером. Там читаемость получше будет. Меньше вложенности.
не работает к сожалению ваш пример. теперь вкладка нигде не выводится в принципе
Все там работает — я же не из головы взял код, а прямо из действующего проекта пример привел.
возможно дело в том, что плагин работает при событии OnDocFormRender, а в вашем примере OnDocFormPrerender. Сейчас проверю
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.