web-dev-qa-db-ja.com

ユーザーフォームフィールドタイプのユーザーリストのフィルタリング

ユーザーのリストをフィルタリングできるかどうか、またはどのようにフィルタリングできるかを判断できませんでした。以下の ユーザーフォームフィールドタイプ の例は、使用中のフィルターを示していますが、リストに含めるグループを指定する方法を思いつきませんでした。

<field name="modified_user_id" type="user"
    label="JGLOBAL_FIELD_MODIFIED_BY_LABEL"
    class="readonly"
    readonly="true"
    filter="unset" />

確かに、何千人ものユーザーがいる場合、このリストを特定のユーザーグループに何とかして減らすことができます。その仮定に誤りはありますか?

3
GDP

あなたは単に使うことができます

<field name="modified_user_id" 
  type="user"
  label="JGLOBAL_FIELD_MODIFIED_BY_LABEL"
  desc="A_DESCRIPTION_IS_ALWAYS_GOOD"/>

モーダルウィンドウの右上にあるコンボボックスを選択すると、グループでフィルターできるユーザーのリストを表示するモーダルフィールドが作成されます。

シンプルなコンボボックスが必要で、ユーザーグループをハードコーディングしてもかまわない場合は、

<field name="modified_user_id_2" 
                type="sql"
                label="JGLOBAL_FIELD_MODIFIED_BY_LABEL"
                desc=""
                query="SELECT u.id , u.name FROM #__users as u inner join #__user_usergroup_map AS ugm ON ugm.user_id = u.id where ugm.group_id=8"
                multiple="single" 
                key_field="id" 
                value_field="name"
                />

そして、8を任意のユーザーグループIDに置き換えます。

編集:フィルター属性の機能は、フィールドの表示された値をフィルターすることではありません。入力値afterが送信されたフォームを処理するのは、より多くのクリーニング関数です。この場合、 'user'フィールドはユーザーIDしか出力できないため、ほとんど使用されませんが、テキストフィールドでは、 'INT'フィルターを使用して、ユーザーが数字を入力していることを確認できます。

Filter属性に使用できる値は次のとおりです。

  • INT:整数、
  • UINT:符号なし整数、
  • FLOAT:浮動小数点数
  • BOOLEAN:ブール値。
  • ワード:A-Zまたはアンダースコアのみを含む文字列(大文字と小文字は区別されません)、
  • ALNUM:A-Zまたは0-9のみを含む文字列(大文字と小文字は区別されません)、
  • CMD:A〜Z、0〜9、アンダースコア、ピリオド、ハイフン(大文字と小文字は区別されません)を含む文字列、
  • BASE64:A〜Z、0〜9、スラッシュ、プラス以上の文字列(大文字と小文字は区別されません)、
  • STRING:完全にデコードおよびサニタイズされた文字列(デフォルト)、
  • HTML:サニタイズされた文字列、
  • ARRAY:配列、
  • PATH:サニタイズされたファイルパス、
  • ユーザー名:使用しない(アプリケーション固有のフィルターを使用)、
  • RAW:生の文字列はフィルタリングなしで返されます。
  • 不明:不明なフィルタはSTRINGのように機能します。入力が配列の場合、完全にデコードおよびサニタイズされた文字列の配列を返します。

Joomlaソースコードから

4
Florian

実際、ユーザーフォームフィールドタイプでユーザーのリストをフィルタリングするのは非常に簡単です。

最初にマニフェストで、フィールドの新しいタイプを作成する必要があります(例:userFiltering(下記参照))。

<field
        name="myUser"
        type="userFiltering"
        label="LABEL"
        description="DESCRIPTION"
/>

マニフェストのフィールドセットで、属性 'addfieldpath'に新しいフィールドタイプ宣言のパスを追加します(以下を参照)

<fieldset addfieldpath="/administrator/components/com_mycomponent/models/fields">

最後にパス「/ administrator/components/com_mycomponent/models/fields」で、次のコードを使用してファイルuserfiltering.phpを作成します

defined('JPATH_BASE') or die();

class JFormFieldUserfiltering extends JFormFieldUser {

public $type = 'userfiltering';

protected function getGroups()
{
    $groups = array();
    $groups[] = 11; // put here the list of the groups you want to filter
    return $groups;
}
} 

それで全部です

5
Christelle

Joomla 3.8.2で新しいオプションを見つけました。フィールドタイプ「ユーザー」には「グループ」オプションがあります。

<field
    name="partner_id"
    type="user"
    label="JGLOBAL_FIELD_MODIFIED_BY_LABEL"
    groups="10"
    required="true"/>

多分それは誰かのために役立つでしょう

1
Almika