カスタムコンポーネントでコンテンツの「ロック」はどのように処理されますか?


7

デフォルトのコアのcom_contentには、特定の記事がユーザーによって編集されているときに「ロック」される組み込みシステムがあり、他のユーザーが同時にそれを編集することはできません。ユーザーがウィンドウを閉じるか、記事を適切に閉じずにセッションを期限切れにした場合(「保存」または「キャンセル」をクリックするなど)、そのコンテンツは「チェック」され、その横のバックエンドにロックアイコンが表示されます。スーパー管理者がロックを解除する必要があります。

私の質問は、独自のコンテンツテーブルを持つカスタムコンポーネントにどのように追加されるのですか?私が見つけた限りでは、JTableを使用してそのコンテンツを操作している限り、それはそのクラスのメソッドの組み込み機能として提供されているように見えます...そうですか?または、JTableContentなどの他のものを使用する必要がありますか?コンテンツ(特定の列)を格納するために使用されるテーブルに何かを追加する必要がありますか?

回答:


3

あなたは正しいですが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の方法を使用すると、多くの便利なものが無料で手に入ります。:)


わは!cppl、どうもありがとう!それは非常に詳細で明確な返答でした。私がしっかりした地位にいることを知るために先に進む必要があった出発点にすぎません。非常に高く評価!
Isidro Baquero 2014年

2

あなたの仮定は正しいです。実行しようとしていることを実行するには、関連するロジックを設定したテーブルが必要です。

私はJoomla 3+を学習しているので、Component Creatorを使用して、単一のテーブルと、学習したいJoomla機能だけで非常にシンプルなコンポーネントを作成しています。生成されたコードは非常に優れており、通常のコンポーネントのすべての複雑さがインストールされていなくても簡単に追跡できます。


素早い回答ありがとうございます。私はそれが3.3のためにあまりにも多くの変更された場合は...確か、Joomlaの1.5のためにこれを見つけていないdocs.joomla.org/J1.5:Using_the_JTable_class#Checkout.2FCheckin そしてところで、私はあまりにもCCを使用しています:)
イシドロBaquero

それはほぼ同じように見えるので、私はそれで実行したいと思います。「うまく機能する」ものの1つなので、複雑さについてはよく知りません。
GDP、
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.