昨日Concrete5部で上級権限モードの話をしていたので、僕も何か書こうと思います。
上級権限モードは、ページの編集権限から、個別のエリアの編集や追加権限など、非常に事細かに設定ができるすぐれものなのですが、設定が非常に大変です。権限の設定だけでひと財産築けるんじゃないかなって思うくらい大変です。ジョークです。
そして、今回は上級権限モードとは関係の無い話でした。
一体なにがしたいのか
下記のコードを実際に使っているのですが、一体何をしようとしているのか。
「編集モードだったら+ユーザーがadminだったら、エリアを表示する」
という書き方をしています。
理由は以下の通り
- スマホ版のテーマが別にある(レスポンシブではない)。
- スマホ版の編集もPCで行う。
- PCとスマホで表示する内容が異なる。
- このエリアが編集できるのは、「admin」さんだけ。
つまり、レスポンシブではなく、モバイル用のテンプレートを別で用意していて、それぞれに別の情報を表示したい、でもエリアを表示できるのはadminさんだけに限定したい、というとてもニッチな状況で下記のコードで対処しました。
PC側のテンプレート
/themes/pc/elements/header.php <?php if ($c->isEditMode() && $u->getUserName() == 'admin') { global $c; $a = new GlobalArea('sp area'); $a->display($c); } else { } ?>
スマホ側のテンプレート
/themes/sp/elements/header.php <?php $a = new GlobalArea('sp area'); $a->display($c); ?>
それで、できたあとに気づいたのですが、ブロックテンプレートにmobile_detectを使うとか、そもそもadminさんしか編集できないならテーマにハードコーディングしてしまえばよかったなと思いました。
追記
ツイッターでacliss19xxさんから教えてもらいました!
@concretefiblog $u->getUserName() より $u->isSuperUser() のほうが無難かもしれません。
— acliss19xx (@acliss19xx) 2015, 4月 14
「admin」さんだけだったら、スーパーユーザーだけって書いた方がいいですね。
PC側のテンプレート
/themes/pc/elements/header.php <?php if ($c->isEditMode() && $u->isSuperUser()) {//←ここ global $c; $a = new GlobalArea('sp area'); $a->display($c); } else { } ?>