web-dev-qa-db-ja.com

新しいカテゴリを作成するときにプログラムで「created_by」を設定する方法

インポートスクリプトの作成中に、データのカテゴリを作成する必要があり、以下のコードでそれを正常に達成しています。ただし、テーブルの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
    }
}
3
GDP

この問題を回避するために、保存する前に$ app-> login()を使用しました。他の多くのカテゴリとコンテンツアイテムが同時に追加されたため、これは私たちの状況にとって最もクリーンな答えのようでした。

2
GDP

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が誤って設定されることに注意してください...)

1
David Fritsch