ダッシュボードのカスタマイズ

部品の使い方や応用ノウハウ
アバター
yama
管理人
記事: 2916
登録日時: 2009年7月29日(水) 02:50

ダッシュボードのカスタマイズ

投稿記事by yama » 2010年5月28日(金) 23:38

MODxネタはいろいろあるのですが、とりあえず管理画面トップのダッシュボードについて。

管理画面にログインすると、まずダッシュボードが表示されます。アイコンがずらっと並んでまして、

・ユーザー管理
・ウェブユーザー
・モジュールの管理
・エレメント管理
・バックアップマネージャー
・ヘルプ
・受信トレイ

こんな感じなんですが・・正直、管理者向けの機能ばかりです。更新担当者向けに権限を絞ったロールでアクセスするとダッシュボードにはアイコンが何も表示されない・・なんてことも実際あります。この状況に納得がいかなければ、とりあえず自力でデザインするしかありません。
(※具体的に提案いただければ機能アレンジ検討しますが・・アイデア歓迎です)

実はこのダッシュボード領域は、Evoになってからカスタマイズ推奨領域としてコア領域から分離されました。このダッシュボード領域のコードは
/assets/templates/manager/welcome.html
このファイルにまとめてあります。これをテキストエディタで開いてみると、phpコードなどは全く書かれてません。htmlの読み書きができる人なら、なんとかできそうな感じです。

日本語版では独自に「ヘルプ」のアイコンを追加しています。他のアイコンが[+BackupIcon+]などの形でプレイスホルダーとして記述されているのに対し、ヘルプの機能だけはあえてhtmlベタ書きで記述しています。これを参考に、独自の機能をここにコピーして記述していただければと思います。

MODxの管理画面はフレーム構成になっているので分かりにくいですが、管理画面内のあらゆる機能はURLで呼び出すことができます。たとえば「ヘルプ」なら「/manager/index.php?a=9」になります。これは、リンクを右クリックで別タブなどで開けばすぐに分かります。新規投稿ボタンを追加したいなら「/manager/index.php?a=4」になりますね。

アイコンはCrystal Clearアイコンの中から適当なものを選ぶとよいと思います。

アイコンの追加だけでなく、ダッシュボードは自由にhtmlで記述できますので、好みに応じて自由にアレンジしてみるとよいと思います。
modxmen
メンバー
メンバー
記事: 17
登録日時: 2012年3月04日(日) 23:55

Re: ダッシュボードのカスタマイズ

投稿記事by modxmen » 2012年3月14日(水) 03:27

管理画面の項目を最大限削って、分かりやすい管理画面を作りたいと思っています。

管理画面のカスタマイズというより、メニューの非表示を行いたいのですが、1.0.6Jでは
/assets/templates/manager/welcome.html が無く、
http://kyms.jp/blog/modx/25.html 程のカスタマイズは私には無理です。
権限によって表示/非表示を切り替えるような使い方がしたいのです。

◆Administrator(デフォルト)

管理画面
【ダッシュボード】の「メイン」のみ表示、「MODXの最新情報」、「あなたの情報」、「オンライン」の3つのタブは非表示
上記以外はデフォルトのまま

-----

◆Webmaster(新たに作成)

ロール管理
【概要】の「パスワード変更」「パスワード更新」、【コンテンツ管理】の全部、【設定管理】の「バックアップ・リストア機能の使用」を有効にして、
上記以外はすべて無効。

管理画面
【ダッシュボード】の「メイン」のみ表示、「MODXの最新情報」、「あなたの情報」、「オンライン」の3つのタブは非表示
【メイン】タブの「検索」と「ウェブリンクを作成」の2つを非表示
【レポート】タブを非表示

-----

HTMLの編集か、phpでもコピペや簡単な修正であれば、私でもできるかもしれません。
phpが全く分からないのですが、ご教授いただけますでしょうか?
アバター
yama
管理人
記事: 2916
登録日時: 2009年7月29日(水) 02:50

Re: ダッシュボードのカスタマイズ

投稿記事by yama » 2012年3月14日(水) 09:39

1.0.6Jは「ダッシュボード」というチャンクがあるので、これを2つコピーします。ひとつは「admin用ダッシュボード」もうひとつは「ウェブマスター用ダッシュボード」という名前にして、

コード: 全て選択

switch($modx->getLoginUserID())
{
  case adminのロールID(実際のIDで読み替えてください): $tpl = $modx->getChunk('admin用ダッシュボード');break;
  case webmasterのロールID(実際のIDで読み替えてください): $tpl = $modx->getChunk('ウェブマスター用ダッシュボード');break;
}
$modx->event->setGlobalVariable('tpl',$tpl);


上記のような簡単なプラグインを作って、システムイベントOnManagerWelcomePrerenderにチェックを入れて保存します。
(試してないので、もしうまくいかなかったら返信ください)
modxmen
メンバー
メンバー
記事: 17
登録日時: 2012年3月04日(日) 23:55

Re: ダッシュボードのカスタマイズ

投稿記事by modxmen » 2012年3月14日(水) 15:33

プラグイン「管理画面切り替え」を作りました。
AdministratorのロールID 1
WebmasterのロールID 3

---

switch($modx->getLoginUserID())
{
case 1: $tpl = $modx->getChunk('Admin用ダッシュボード');break;
case 3: $tpl = $modx->getChunk('Webmas用ダッシュボード');break;
}
$modx->event->setGlobalVariable('tpl',$tpl);

---

チャンク「ダッシュボード」を複製して、「Admin用ダッシュボード」(IDは4)と
「Webmas用ダッシュボード」(IDは5)を作りました。

「Webmas用ダッシュボード」のチャンク コード (html)の記述を所々削除してみたのですが、
ログインし直してもダッシュボードのタブに変化はありません。

この段階でも既に間違っているのでしょうか?
アバター
yama
管理人
記事: 2916
登録日時: 2009年7月29日(水) 02:50

Re: ダッシュボードのカスタマイズ

投稿記事by yama » 2012年3月14日(水) 15:41

すいません間違えました
switch($_SESSION['mgrRole'])
ですね
modxmen
メンバー
メンバー
記事: 17
登録日時: 2012年3月04日(日) 23:55

Re: ダッシュボードのカスタマイズ

投稿記事by modxmen » 2012年3月14日(水) 17:04

switch($_SESSION['mgrRole']) に変更したら、ダッシュボードがスッキリしました!

---

同じく、Webmaster権限で、管理画面上部にあるメニューの非表示が行いたいのですが、
こちらは、どうすれば良いのでしょうか?

管理画面
【メイン】タブの「検索」と「ウェブリンクを作成」の2つを非表示
【レポート】タブを非表示

上記の変更方法も教えて頂けますか?
アバター
yama
管理人
記事: 2916
登録日時: 2009年7月29日(水) 02:50

Re: ダッシュボードのカスタマイズ

投稿記事by yama » 2012年3月14日(水) 18:32

そのへんはロール設定ではカバーされてないですね

https://github.com/elastic/ManagerManag ... nu.inc.php
これを使えばトップメニューはわりと自由にカスタマイズできると思います。(これ見て使い方分かるでしょうか?)
modxmen
メンバー
メンバー
記事: 17
登録日時: 2012年3月04日(日) 23:55

Re: ダッシュボードのカスタマイズ

投稿記事by modxmen » 2012年3月14日(水) 19:28

管理画面上部メニューのうち、

【メイン】タブの「検索」と「ウェブリンクを作成」の2つを非表示

 検索 'search'=>array('href'=>'index.php?a=71'),

 ウェブリンク 'new weblink'=>array('href'=>'index.php?a=72'),

【レポート】タブを非表示

 レポートのタブ  'reports'=>array('id'=>'#limenu1-2','href'=>'#menu1-2'),
 公開状態の一覧 'shedule'=>array('href'=>'index.php?a=70'),
 イベントログ 'system events'=>array('href'=>'index.php?a=114'),
 管理操作ログ 'manager actions'=>array('href'=>'index.php?a=13'),
 システム情報 'system info'=>array('href'=>'index.php?a=53')

が関係するところまでは分かりましたが、それをManagerManagerでどのように設定すれば、
Administrator権限とWebmaster権限でメニュー表示の切り替えができるのかが分かりません。

お忙しいと思いますが、こちらも教えてください。よろしくお願いします。
アバター
yama
管理人
記事: 2916
登録日時: 2009年7月29日(水) 02:50

Re: ダッシュボードのカスタマイズ

投稿記事by yama » 2012年3月14日(水) 20:03

https://github.com/elastic/ManagerManag ... nu.inc.php
上記ページのコード枠の右上に「Fork and edit this file | Raw | Blame | History」というボタンが並んでます。この「Raw」を「別名で保存」でファイル名「topmenu.inc.php」としてダウンロードします。このテキストファイルを assets/plugins/managermanager/functions/ ディレクトリにコピーします。それでインストールは完了です。

使い方ですが、
https://github.com/elastic/ManagerManag ... demo-rules
ここに書いてあります。

https://github.com/elastic/ManagerManag ... Menu-names
メニュー名の一覧はここにあります。
今回はsearch・new weblink・reportsを表示しないということなので
hideMenu('search,new weblink,reports');
だと思います。
webmasterロールのロールIDが3だとして、このロールでのみルールを適用する場合は
hideMenu('search,new weblink,reports','3');
こうですね
modxmen
メンバー
メンバー
記事: 17
登録日時: 2012年3月04日(日) 23:55

Re: ダッシュボードのカスタマイズ

投稿記事by modxmen » 2012年3月15日(木) 02:17

ManagerManagerの「プラグイン コード (php)」に

//hideMenu($names, $roles='')
hideMenu('search,new weblink,reports','3');

を追記したところ、

/home/kir019478/public_html/testver_net/evolution/manager/includes/document.parser.class.inc.php(1105) : eval()'d code on line 2

が出てしまい、MODXの管理画面が使えなくなってしまったので、再インストールしました。
どう設定して良いのか分からないので、もうちょっと教えて頂けますか?

これができるようになると、管理画面をユーザレベルによって変えられるので、
今後の提案がしやすくなります。お忙しいとは思いますが、よろしくお願いします。
アバター
yama
管理人
記事: 2916
登録日時: 2009年7月29日(水) 02:50

Re: ダッシュボードのカスタマイズ

投稿記事by yama » 2012年3月15日(木) 10:15

試しに
hideMenu('search');
とだけ書いてみるとどうでしょう?これでうまくいくなら、パラメータ指定の方法が違うのかもしれません
modxmen
メンバー
メンバー
記事: 17
登録日時: 2012年3月04日(日) 23:55

Re: ダッシュボードのカスタマイズ

投稿記事by modxmen » 2012年3月15日(木) 11:45

やり方が間違っているかもしれないので、確認させてください。

1.mm_demo_rules を複製して mm_rules を作成しました。
  mm_rules にはテストの為に以下のみを記述しています。

  1行目 mm_renameField('pagetitle', 'ページの題名');

2.ManagerManagerの設定タブをクリックし、Configuration Chunkのところに
  mm_rules と記述して保存。

3.リソースを適当に選んで投稿画面を開いてみたところ、リソース名が「ページの題名」
  に正しく変わっていました。

4.確認できたので mm_rules に以下のみを記述しました。

  1行目 hideMenu('search');

 ですが「検索」のタブは消えません。

topmenu.inc.php も /assets/plugins/managermanager/functions に
アップロード済みなのですが、他に何か設定があるのでしょうか?
アバター
yama
管理人
記事: 2916
登録日時: 2009年7月29日(水) 02:50

Re: ダッシュボードのカスタマイズ

投稿記事by yama » 2012年3月15日(木) 13:16

その手順で合ってますよね。何か理由があってそのままでは動かないのかも?あとで試してみます
アバター
yama
管理人
記事: 2916
登録日時: 2009年7月29日(水) 02:50

Re: ダッシュボードのカスタマイズ

投稿記事by yama » 2012年3月15日(木) 13:56

コード: 全て選択

function hideMenu($names, $roles='') {
    $name = strtolower($name);
    global $mm_top_menu;
    if (useThisRule($roles)) {
        $output .= " // ----------- hide tab -------------- \n";
        $tabsArray = explode(',',$names);
        foreach($tabsArray as $name) {
            if((int)$name > 0) {
                //hide module tab
                $output .= "\$j(\"a[href='index.php?a=112&id=".$name."']\").parent().remove();\n";
            }
            else {
                //hide tab
                $output .= "\$j(\"a[href='".$mm_top_menu[$name]['href']."']\").parent().remove();\n";
            }
        }
        echo ($output . "\n");
    }
}

これだけ見ると動かない気がしますが、作者さんの環境では動いてるのかな?あとで対応考えてみますが、ManagerManagerとは別プラグインとして作るのがよさそうですね