web-dev-qa-db-ja.com

MVCモデルを使用してレコードをロード、変更、保存するにはどうすればよいですか?

グーグル後などすべてのプラグインイベントなどが行われるように、JoomlaにAdd新しいカテゴリを追加するために以下のコードに到達しました。

$basePath = JPATH_ADMINISTRATOR.'/components/com_categories';
require_once $basePath.'/models/category.php';
$catmodel = new CategoriesModelCategory(array('table_path' => $basePath.'/tables'));

$myArrayOfData = array('id'=>'0','title'='my title'...);
$catmodel->save($myArrayOfData);

現状では、同じコードを使用してレコードを更新していますが、追加するデータ配列の新しいコピーの代わりに、SQLを使用して既存のレコードを配列として取得し、同じ方法で変更して保存しています。

これは「機能」しますが、正しい方法とは思えないため、CategoryのIDを使用してモデルをロードし、そのメソッドを使用して変更/保存する方法に興味があります。カテゴリコンポーネントが実行するときに実行されるコードをたどってみましたが、あまりにも多くのことが行われているため、それがどのように行われるかを詳しく説明することはできません。

7
GDP

$ idに保存されているカテゴリIDがあるとします。以前と同じように、カテゴリモデルをインスタンス化できます。

$basePath = JPATH_ADMINISTRATOR . '/components/com_categories';
require_once $basePath . '/models/category.php';
$catModel = new CategoriesModelCategory(array('table_path' => $basePath . '/tables'));
$id = 11;

これで2つの方法があります。

方法1-JTableオブジェクトなし

$item = $catModel->getItem($id);
$catModel->save('id' => $id, 'parent_id' => $item->parent_id, 'title' => 'My New Title'); // parent_id should be defined otherwise a warning will be displayed

方法2-JTableオブジェクトを使用

$catTable = $catModel->getTable();
$catTable->load($id);
$catTable->title = 'My New Title';

$catTable->check();
$catTable->store();

注意

最初の方法でのみ、onContentBeforeSaveおよびonContentAfterSaveイベントが発生します。

3
Farahmand