Quick Manager+のフロントエンドでテンプレートごとにボタンを不可視にする方法  【解決済み】

質問全般・改善要望
umeda
メンバー
メンバー
記事: 12
登録日時: 2009年10月29日(木) 18:28

Quick Manager+のフロントエンドでテンプレートごとにボタンを不可視にする方法

投稿記事by umeda » 2010年1月15日(金) 17:18

1.0.2Jでサイトを作成中です。
Quick Manager+のフロントエンドでテンプレートごとに「リソースの作成」ボタンを不可視にする方法は、ありますでしょうか?
----------------------------------------------
例)
ブログ(フォルダ)----子ドキュメント(この下には記事を作成させたくない)
----------------------------------------------
ブログフォルダ以下に顧客が子ドキュメント(記事)を複数追加していく場合、その記事の下(孫ドキュメント)までは作らせたくないので、子ドキュメントには「リソースの作成ボタン」を非表示にしたいのです。プラグンインの設定項目で「Show add document here button」を「false」にしてみますが、これだとすべてのページで「リソースの作成」ボタンが非表示になってしまいます。
ManagerManagerでは、フロントエンドエディター内の項目等の表示/非表示、あるいは「リソースの編集」の可不可は決められますが、この画面上部のボタンのそれぞれの表示/非表示は決められないように思えます。
何か別の解決策があれば、ご教授いただきたいのですが、顧客に限定的にコンテンツを追加させる場合みなさんはいかがされているのでしょうか?
何か基本的な見落としをしているようにも思えるのですが・・・ :oops:
アバター
yama
管理人
記事: 3096
登録日時: 2009年7月29日(水) 02:50

Re: Quick Manager+のフロントエンドでテンプレートごとにボタンを不可視にする方法

投稿記事by yama » 2010年1月17日(日) 04:32

qm.inc.phpの136行目あたりの

コード: 全て選択

if ($this->addbutton == 'true' && $access)

この部分を

コード: 全て選択

if ($this->addbutton == 'true' && $access && $this->modx->documentObject['template']=='3')

ハードコーディングでよければ、こんな感じで。たとえばこのように条件を加えると、テンプレートID「3」を設定しているページのみ新規作成ボタンを表示するようになります。
sama55
メンバー
メンバー
記事: 816
登録日時: 2009年8月03日(月) 08:16

Re: Quick Manager+のフロントエンドでテンプレートごとにボタンを不可視にする方法

投稿記事by sama55 » 2010年1月17日(日) 09:34

yamaさんの提案有効だと思います。
現時点ではコードまで示せませんが、基準ドキュメントIDと基準ドキュメントからの相対階層数で制限できるように改造する、というのはどうでしょうね?

改造内容(手順)

 (1)Quick Manager+プラグインの”設定”に制限対象とする基準ドキュメントIDと制限階層数をペアで設定するパラメータを追加
 (2)yamaさんが示してくれた箇所で、カレントドキュメントを基点としてgetParent()を再帰的に呼び出して親ドキュメントを追跡
 (3)(2)の過程で基準ドキュメントIDがないか、階層数が浅い場合のみ「ドキュメント追加」ボタンを表示

例)
ルート(ID=0) : Level-0
 +ブログフォルダドキュメント(ID=1) : Level-1
    +ブログ記事1 : Level2
    +ブログ記事2 : Level2
    +ブログ記事3 : Level2
     +ブログ記事4 : Level3 ※管理画面から追加したイレギュラーなもの
 +他のドキュメント(ID=2とか3とか) : Level-1
    +サブドキュメント : Level2
     +サブサブドキュメント : Level3

上記構成の場合、QMの追加パラメータには、基準ドキュメントID=1, 制限階層数=1 と設定する。

結果的に・・・
ブログフォルダドキュメントでは、基準ID&階層数ともに不一致で追加可。
ブログ記事1/2/3では、基準IDも階層数も一致するため追加不可。
ブログ記事4では、基準IDも階層数も一致する(より深い)ため追加不可。
他のドキュメント、サブドキュメント、サブサブドキュメントなどでは、基準IDが一致しないため追加可。

ぱっと考えた方式なので、多分考慮抜けが多いと思いますが・・・
umeda
メンバー
メンバー
記事: 12
登録日時: 2009年10月29日(木) 18:28

Re: Quick Manager+のフロントエンドでテンプレートごとにボタンを不可視にする方法

投稿記事by umeda » 2010年1月18日(月) 14:21

さっそく試させていただきました。勉強になります、ありがとうございました。

yamaさんに教えていただいたコード変更で、下記のようなフロントエンドボタンが実現できました。
---------------------------------------------
■TOPページ→[リソースの編集][管理][ログアウト]
■ブログ→[リソースの編集][リソースの作成][管理][ログアウト]
■リンク集→[リソースの編集][リソースの作成][管理][ログアウト]
■その他のサイトページ→[管理][ログアウト]
---------------------------------------------
この案件では、
・MODxのロール →基本的なドキュメントごとの制限
・ManagerManager →ユーザーやテンプレごとのエディタ内の項目ONOFFと編集の可不可
・QM+→ (コード変更により)指定テンプレートで「リソースの作成」ボタンを表示/非表示
のあわせ技で、顧客が記事やリンクを追加できる感じにしています。

ただひとつ、sama55さんのも読ませていただいて
「基準ドキュメントIDと基準ドキュメントからの相対階層数」
に合わせて、“親ドキュメントからの「リソースの作成」で子ドキュメントのテンプレートを指定”も複数テンプレートごとに可能だと良いなあ、と感じています。QM+のプラグイン設定で新規ドキュメントのテンプレートを「parent/id/selected」他で指定できますが、例えば上記案件のように「リソースの作成」ボタンをテンプレートの「3(ブログ用)」と「4(リンク集用)」の両方で表示したくて、
---------------------------------------------
// if ($this->addbutton == 'true' && $access && $this->modx->documentObject['template']=='3' or $this->modx->documentObject['template']=='4') { //
---------------------------------------------
とし、ブログページとリンクページ等、複数テンプレート以下にそれぞれ別のテンプレートで新規ドキュメントを作成したい場合の設定が出来ないように思います。
現在のQM+仕様では、親テンプレートを子が引き継いでしまうと「リソースの作成」ボタンが表示されてしまうので別のテンプレIDを指定しますが、これがプラグイン設定の該当項目で一つしか指定できません
なので以下のような感じにならないようです。

例)
ブログフォルダ(テンプレート1)親
  +記事1(テンプレート3)
  +記事2(テンプレート3)
  +記事3(テンプレート3)
リンクフォルダ(テンプレート2)親
  +リンク先1(テンプレート4)
  +リンク先2(テンプレート4)

もし何か解決策がありましたら、ご教授願います。よろしくお願いいたします。

この辺りは、サイトによって様々な形が望まれる所でしょうから、ManagerManagerのようにチャンク内で柔軟に引数を与えられればMODxの利便性が更に上がるのでは、と考えています :oops:
最後に編集したユーザー umeda on 2010年1月18日(月) 17:25 [ 編集 1 回目 ]
sama55
メンバー
メンバー
記事: 816
登録日時: 2009年8月03日(月) 08:16

Re: Quick Manager+のフロントエンドでテンプレートごとにボタンを不可視にする方法

投稿記事by sama55 » 2010年1月18日(月) 15:09

umedaさんの仰りたいこと、すごく良くわかります。 ^^
yamaさんのレスで要件的には十分満足すると思ったのですが、将来を見据えた改造のヒントという意味で、蛇足ながら付け加えさせていただきました。ドキュメントのタイプに応じてテンプレを分け、テンプレIDを利用して処理を分岐させるのはmodxの常道ですが、ロジックで対処できれば尚結構ですものね。

ちなみに、プラグインパラメータの追加は簡単ですので、後々のテンプレートの増加やDBの移植などを見越して、3,4のテンプレIDはハードコーディングせずにプラグインパラメータを追加するぐらいのことはしといた方が良いですね(CSVで渡してexplode ^^)。
umeda
メンバー
メンバー
記事: 12
登録日時: 2009年10月29日(木) 18:28

Re: Quick Manager+のフロントエンドでテンプレートごとにボタンを不可視にする方法  【解決済み】

投稿記事by umeda » 2010年1月18日(月) 19:06

ドキュメントの見落としでお恥ずかしい。

テンプレートごとにQMの「リソースの作成」を表示/非表示を決めるスレ題の件はyamaさんのソース変更で解決しました。ありがとうございました。
また、“「リソースの作成」を(ブログフォルダやリンク集といった)親のテンプレートごとに、異なるテンプレートで子ドキュメントを作成したい”、のがQMの設定でなんとかならないもんかな?と悩んでいたのですが、プラグイン付属のドキュメントにちゃんと書いてありました。すいません。sama55さんのコメントも大変参考にさせていただきました。今一度ドキュメントを見直して勘違いに気がつきました。

こういうときは、「Inherit Selected Template」を合わせて使うんですね。親になるフォルダのTVに子に使いたいテンプレートを設定しておく。。。またひとつ勉強しました。 :oops:

英文に弱いとだめですね、QMはまだ日本語のドキュメントが少ない所為もあって私のようなアマチュアはとたんに手も足も出なくなります。QuickManager、ManagerManagerでまだまだ不明な点がありますので、何かの際はまたご助言ください。この度はありがとうございました。