web-dev-qa-db-ja.com

ユーザーグループごとに記事のフロントエンドの作成を制限する

どこから始めればいいのか少し戸惑っています。

これは起こるはずです:

  1. 管理者はユーザーグループを編集し、このグループのメンバーが作成できる記事の数を定義できる必要があります。
  2. グループメンバーが前に新しい記事を作成/保存する前に、このユーザーが作成した記事の量が、そのグループメンバーシップの最大許容記事と比較されます。疑似コード:

    if ($articlesCreatedByUser < $allowedArticlesByGroup){
      $article->save();
    } else {
      die('you reached the article limit');
    

ここではJoomlaの開発を始めたばかりなので、私の質問です。

  • joomla3では、ユーザー用に整数の追加フィールドを簡単に作成できますが、これはユーザーグループでも可能ですか?そうでない場合、ユーザーグループバックエンドフォームを拡張するために何が必要ですか?
  • 上で説明したように、記事作成フォームを制限する最も簡単な方法は何ですか。プラグインの作成(およびbeforesaveへのフック)に飛び込む必要があるのか​​、com_contentとそのモデルの保存メソッドを拡張するのか不明です。

ありがとう!

トニ

enter image description here

1
t Book

このタスクを実行するには、テンプレートオーバーライドと共にコンテンツプラグインを開発することをお勧めします。以下の例では、ユーザーごとに1日あたり最大5つの記事を制限しています。

public function onContentBeforeSave($context, $article, $isNew)
{
    if ( $context != 'com_content.form' || !$isNew) 
    {
        return true;
    }

    $user = JFactory::getUser();
    $db = JFactory::getDbo();

    $query = $db->getQuery(true)
        ->select('count(*)')
        ->from('#__content')
        ->where('created_by = '.$user->id.' and created > CURDATE()');
    $db->setQuery($query);
    $articlesCreatedByUser = (int)$db->loadResult();

    // get the allowed articles somehow..
    $allowedArticlesByGroup = 5;

    // check the allowed articles.
    if ($articlesCreatedByUser >= $allowedArticlesByGroup)
    {
        $article->setError('Maximum of '.$allowedArticlesByGroup.' articles are allowed per day.');
        return false;
    }

    return true;
}

プラグインは、ユーザーが許可された制限を超えて新しい記事を作成できないようにします。ここで、ユーザーが記事の作成ページ自体にアクセスできないようにするには、フォームのレイアウトをオーバーライドして、上記のロジックを追加します。

1
Nagarjun