インポートスクリプトの作成中に、データのカテゴリを作成する必要があり、以下のコードでそれを正常に達成しています。ただし、テーブルのcreated_user_id
列の設定方法を特定できません。
スクリプトはログインしていませんが、created_user_id
は常に無視され、0のカテゴリレコードが作成されます。
[〜#〜] update [〜#〜]最初はpath
について尋ねられましたが、追加されました-> rebuildPath() `-それでも、created_user_idではうまくいきません
function createCategory( $title, $parent_id, $note=null ) {
$table = JTable::getInstance('category');
$data = array();
$data['title'] = $title;
$data['parent_id'] = $parent_id;
$data['extension'] = 'com_content';
$data['published'] = 1;
$data['created_user_id'] = 123456;
$table->setLocation($data['parent_id'], 'last-child');
$table->bind($data);
if ($table->check()) {
$table->store();
$table->rebuildPath($table->id);
// Success
} else {
// Error
}
}
この問題を回避するために、保存する前に$ app-> login()を使用しました。他の多くのカテゴリとコンテンツアイテムが同時に追加されたため、これは私たちの状況にとって最もクリーンな答えのようでした。
JTableCategory
はそのプロパティをストア関数に設定するため、機能させるには少しハックする必要があります。
IDをセッションに含めるユーザーを設定することもできます。
$session = JFactory::getSession();
$user = JFactory::getUser($user_id);
$session->set('user', $user);
文字通り、これを$data['created_user_id'] = 123456;
という行の代わりに追加します。次に、created_user_id
が自動的に設定されます。
または、次のようにストアを2回実行する必要があります。
$table->store();
$table->created_user_id = 123456;
$table->store();
カテゴリテーブルクラスは、created_user_idが新しいオブジェクトの場合にのみ設定します。最初のストアはデータベースにレコードを作成し、IDを$table
に戻します。次に、必要な値をリセットして、再度保存できます。 (この方法ではmodified_time
およびmodified_user_id
が誤って設定されることに注意してください...)