web-dev-qa-db-ja.com

joomlaユーザーとそのデータをプログラムで削除する正しい方法は何ですか?

Joomla 3.xデータベースからIDでユーザーのセットを削除したいと思います。各データベーステーブルに独自のSQLを記述する必要なく、これが可能かどうかをドキュメントから把握しようとしています。

次の擬似コードのようなもの:

 delete from #_users where ( `lastvisitDate` < NOW() - INTERVAL 1 MONTH  ) AND ( #__user_usergroup_map.group_id = 18 );
 delete from #_user_usergroup_map where user_id not in (select id from #_users);
 delete from #_user_profiles where user_id not in (select id from #_users);

私はクエリビルダーに精通しています: https://docs.joomla.org/Inserting,_Updating_and_Removing_data_using_JDatabase/en

しかし、フレームワークにユーザーの詳細を削除するコードがすでにある場合は、ホイールを再発明しないことが私の好みです。

ドキュメントにはこれがあります: https://api.joomla.org/cms-3/classes/Joomla.CMS.User.User.html しかし、パラメーターがuser-> deleteに渡されていないようです?

管理者のバックエンドユーザーリストのボックスにチェックを入れ、複数のユーザーを削除することができるため、これは可能だと思います。

私はJoomlaで数年(1.5以降)作業してきましたが、APIドキュメントに常に苦労してきました。

どんな助けでも大歓迎です。

4
Ryan

ドキュメントにはこれがあります: https://api.joomla.org/cms-3/classes/Joomla.CMS.User.User.html しかし、パラメーターがuser-> deleteに渡されていないようです?

そのとおりです。このメソッドはユーザーインスタンスで機能します。

use Joomla\CMS\User\User;

// Get user with ID 1.
$userId = 1;
$user   = User::getInstance($userId);

// Delete the user.
if (!$user->delete())
{
    // Error occurred.
}
else
{
    // User with ID 1 deleted.
}

このメソッドを使用すると、onUserBeforeDeleteおよびonUserAfterDeleteイベントがトリガーされるため、プラグインは関連するユーザーデータを削除できます。

3
Sharky