グーグル後などすべてのプラグインイベントなどが行われるように、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を使用してモデルをロードし、そのメソッドを使用して変更/保存する方法に興味があります。カテゴリコンポーネントが実行するときに実行されるコードをたどってみましたが、あまりにも多くのことが行われているため、それがどのように行われるかを詳しく説明することはできません。
$ 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つの方法があります。
$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
$catTable = $catModel->getTable();
$catTable->load($id);
$catTable->title = 'My New Title';
$catTable->check();
$catTable->store();
最初の方法でのみ、onContentBeforeSave
およびonContentAfterSave
イベントが発生します。