Подключить свою вкладку в табы extjs
Василий, помню ты писал, когда разрабатывал дополнение репозитория, что добавляешь свою вкладку (над деревом ресурсов) без хаков, а совершенно нормальными встроенными средствами extjs.
Как бы мне такое же провернуть? Где про такое почитать?
Только у меня задача другая — в modx предусмотрен механизм установки отдельным юзерам собственных значений настроек, которые перекрывают настройки системы.
А мне вот хотелось бы, чтобы свои настройки можно было задавать группе юзеров, а не только отдельным уникам. Плюс, чтобы можно было выбирать ранг для юзеров этой группы, к которым эта настройка предназначена.
Т.е. логика такая:
1. создаём свою табличку (копируем site_settings с небольшими изменениями).
2. Вклиниваем свой таб в настройки доступов для группы юзеров. В табе размещаем грид с настройками.
3. И там, где надо вызываем свой кастомный метод getOption.
Вроде ничего сложного, но 2 момента:
1. По-любому нужно удобное управление, т.е. админка. Грид-то я разместить смогу, а вот как добавить вкладку — понятия не имею(
2. И если юзер состоит в нескольких группах и какая-то настройка определена в обеих группах, то какую ему настройку отдавать? Там где роль больше/меньше? А если роль одинаковая?
В целом по второму пункту по фигу — здесь я под свою задачу выберу (у меня юзер не может быть в нескольких группах).
Но вот этот таб…
А может быть есть ещё какие-то подводные камни, о которых я не подумал?
Как бы мне такое же провернуть? Где про такое почитать?
Только у меня задача другая — в modx предусмотрен механизм установки отдельным юзерам собственных значений настроек, которые перекрывают настройки системы.
А мне вот хотелось бы, чтобы свои настройки можно было задавать группе юзеров, а не только отдельным уникам. Плюс, чтобы можно было выбирать ранг для юзеров этой группы, к которым эта настройка предназначена.
Т.е. логика такая:
1. создаём свою табличку (копируем site_settings с небольшими изменениями).
2. Вклиниваем свой таб в настройки доступов для группы юзеров. В табе размещаем грид с настройками.
3. И там, где надо вызываем свой кастомный метод getOption.
Вроде ничего сложного, но 2 момента:
1. По-любому нужно удобное управление, т.е. админка. Грид-то я разместить смогу, а вот как добавить вкладку — понятия не имею(
2. И если юзер состоит в нескольких группах и какая-то настройка определена в обеих группах, то какую ему настройку отдавать? Там где роль больше/меньше? А если роль одинаковая?
В целом по второму пункту по фигу — здесь я под свою задачу выберу (у меня юзер не может быть в нескольких группах).
Но вот этот таб…
А может быть есть ещё какие-то подводные камни, о которых я не подумал?
Комментарии: 4
По второму вопросу сказать не могу — голова занята другим.
А по первому — держи плагин от Extras, там всё понятно:
Вся соль в волшебном методе Ext.ComponentMgr.onAvailable.
А по первому — держи плагин от Extras, там всё понятно:
if ($modx->event->name == 'OnManagerPageBeforeRender') {
$controller->Extras = $Extras = $modx->getService('extras','Extras', MODX_CORE_PATH . 'components/extras/model/extras/', array());
$controller->addLexiconTopic('extras:default');
//$controller->addJavascript($this->modx->getOption('manager_url',null,MODX_MANAGER_URL).'assets/modext/util/datetime.js');
$controller->addJavascript($Extras->config['jsUrl'].'mgr/extras.js');
$controller->addJavascript($Extras->config['jsUrl'].'misc/extras.combo.js');
$controller->addJavascript($Extras->config['jsUrl'].'mgr/widgets/key/keys.grid.js');
$controller->addJavascript($Extras->config['jsUrl'].'mgr/widgets/extras.tree.js');
$controller->addCss($Extras->config['cssUrl'].'mgr/main.css');
$scripts = array(
'head' => '
Extras.config = '.$modx->toJSON($Extras->config).';
Extras.config.connector_url = "'.$Extras->config['connectorUrl'].'";
'
,'tree' => $modx->hasPermission('extras_tree')
? '
Ext.ComponentMgr.onAvailable(\'modx-leftbar-tabpanel\', function() {
this.on(\'beforerender\', function() {
this.add({
title: _(\'extras_packages\')
,xtype: \'extras-tree-extras\'
,id: \'extras-tree-extras\'
});
});
});
'
: ''
,'user' => '
Ext.ComponentMgr.onAvailable(\'modx-user-tabs\', function() {
/*
Ext.apply(this, {
activeTab: 0
,stateful: true
,stateId: \'modx-user-tabs\'
,stateEvents: [\'tabchange\']
,getState: function() {
return {
activeTab:this.items.indexOf(this.getActiveTab())
};
}
});
*/
this.on(\'beforerender\', function() {
this.add({
title: _(\'extras_keys\')
,xtype: \'extras-panel-keys\'
,id: \'extras-panel-keys\'
});
});
});
'
,'permissions' => $modx->hasPermission('extras_repository_new')
? 'MODx.perm.extras_repository_new = true;'
: ''
);
$controller->addHtml('<script type="text/javascript">'.implode("\n", $scripts).'</script>');
}
Вся соль в волшебном методе Ext.ComponentMgr.onAvailable.
Круто-круто! Спасибо огромное!
А вот это:
p.s. интересный способ вывода скриптов через массив и implode) Возьму на заметку))
А вот это:
/*
Ext.apply(this, {
activeTab: 0
,stateful: true
,stateId: \'modx-user-tabs\'
,stateEvents: [\'tabchange\']
,getState: function() {
return {
activeTab:this.items.indexOf(this.getActiveTab())
};
}
});
*/
, на сколько я понимаю, для того, чтобы активную вкладку запоминать? И где-то есть метод. который в это куку записывает?p.s. интересный способ вывода скриптов через массив и implode) Возьму на заметку))
stateful — это встроенная фишка ExtJS, у них в доках описано.
Все само сохраняет и делает, нужно только указать верные параметры и функцию getState().
У меня отключено потому, что показалось не очень удобно, когда у юзера запоминается таб — он чаще нужен только первый.
Все само сохраняет и делает, нужно только указать верные параметры и функцию getState().
У меня отключено потому, что показалось не очень удобно, когда у юзера запоминается таб — он чаще нужен только первый.
Понял, спасибо)
p.s. я как в доки экста захожу — у меня глаза округляются — ни хрена не понимаю с какого боку к нему подойти xD
Поэтому, если что-то с экстом делаю, то только по аналогии с уже написанным в самом modx. Дальше не хожу)
p.s. я как в доки экста захожу — у меня глаза округляются — ни хрена не понимаю с какого боку к нему подойти xD
Поэтому, если что-то с экстом делаю, то только по аналогии с уже написанным в самом modx. Дальше не хожу)
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.