あなたは正しいですがJTable
、Joomlaの方法に従っていJControllerForm
て、View Controllerのベースとして使用している場合は、にダウンする必要はありません。
class MycomponentControllerMycontent extends JControllerForm {}
そしてJModelAdmin
コンポーネントモデルのベースとして使用する
class MycomponentModelMycontent extends JModelAdmin {}
を拡張すると、モデルとテーブルを設定JControllerForm
する組み込みのedit()
メソッドが提供され、問題のあるレコードへのアクセスと、テーブルがチェックアウトをサポートしているかどうかがチェックされます(列checked_out
が存在することを確認することにより)。存在する場合は、checkout()
モデルを介して記録を試みます。
JModelAdminを拡張することによりgetItem()
、それ、checkIn()
およびcheckOut()
メソッドを継承します。前述のように、モデルはcheckout()
(それが継承するJModelForm
)を呼び出し、checked_out
列に加えてテーブルにもと呼ばれるものがあることを確認しますchecked_out_time
。
この時点で、これらの列のいずれかが存在せず、JModelForm
それを偽装して返された場合true
(ジョブが完了したことを示す)、2つのことが起こります。それ以外の場合は、現在のユーザーを取得してから、最初にチェックアウトを試み、別のユーザーに既にチェックアウトされているかどうかを確認します。この時点で、最終的にのJTable
実装を呼び出したcheckOut()
場合(J3では通常必要とされない独自のテーブル定義でオーバーライドしていない場合)。
JTable
まったく同じ列チェックを実行し、すべてが適切である(つまり、有効なIDを持っている)場合、列checked_out
を更新し、checked_out_time
編集中のレコードを更新します。
補足として、edit()
アイテムgetItem()
が呼び出されると、それはaを介してレコードをロードしますJTable
(つまり、後にがgetTable()
続きload($pk)
ます(この時点で、プラグインのonBeforeLoadイベントとonAfterLoadイベントJTable
もトリガーされます)。
レコードがのバージョンに返されJModelAdmin
、ベースstdClass
オブジェクトに変換されます(JObject
以前は過去に使用されていました)。レコード(現在はオブジェクト)にparams
列/属性が含まれているJRegistry
場合は、簡単にアクセスできるようにそれをオブジェクトに変換します。
したがって、Joomlaの方法を使用すると、多くの便利なものが無料で手に入ります。:)