PowerCMS X Q&A

PowerCMS Xを用いてWebサイトを構築する際の技術的なヒントや解決策をご紹介します。

RebuildRelationsプラグインがどのような処理をしているのか教えてください

記事モデルにページモデルへのリレーション「関連ページ(related_page)」を設定し、以下のようにRebuildRelationsプラグインを設定しているものとして大まかに解説します。
RebuildRelationsプラグインの設定画面。参照元モデルで記事を、リレーション・モデルでページを選択している

ページ(ID:604)の編集画面で更新ボタンを押すとCMSの処理が起動します。その際、ページモデルはRebuildRelationsプラグイン設定画面のリレーション・モデルでチェックが入っているのでpost_saveコールバックの登録が行われ、ページ保存後にRebuildRelationsプラグインの処理(trigger_context_objs)が呼ばれるようになります。

RebuildRelationsプラグインの処理(trigger_context_objs)が呼ばれると、参照元モデルとして設定されたモデルのオブジェクトを抽出します。RebuildRelationsプラグイン設定画面の参照元モデルで記事にチェックが入っているので、リレーションのデータを保存しているテーブルから更新したページを参照している記事オブジェクト(記事ID: 14967, 15028)が抽出されます。この時、下書きになっている記事オブジェクトは抽出されません。
phpMyAdminでmt_relationテーブルの中からリレーション「related_page」に関する情報を表示した画面

抽出された記事オブジェクトはCMSの処理の最終段階でpublish_objメソッドにより再構築が行われます。オブジェクトを再構築するので、関連ページを掲載しているビューだけでなく、アーカイブ種別が記事になっている全てのURLマップが再構築されます。

※同一モデル、つまり記事モデルに記事モデルへのリレーションを設定しているケースの場合、参照しているオブジェクトを抽出する処理が少し違います。

複数のモデルにチェックが入っているケース

複数のモデルにチェックを入れるとなんとなく不安に感じる方もいらっしゃるかもしれませんが、問題ありません。

リレーション・モデルが複数の場合

リレーション・モデルに複数のチェックが入っていたとしても1人の編集者が複数のモデルを同時編集することは通常ないので、気にすることはありません。リレーション・モデルはRebuildRelationsプラグインの処理が起動する条件となるモデルと考えれば良いでしょう。

参照元モデルが複数の場合

ページ(ID:604)を編集した場合に、記事モデルだけでなく例えばイベントモデルにページ(ID:604)を参照しているオブジェクトがないかを探すだけなので、このケースも気にすることはありません。

関連するQ&A