ユーザーのリストをフィルタリングできるかどうか、またはどのようにフィルタリングできるかを判断できませんでした。以下の ユーザーフォームフィールドタイプ の例は、使用中のフィルターを示していますが、リストに含めるグループを指定する方法を思いつきませんでした。
<field name="modified_user_id" type="user"
label="JGLOBAL_FIELD_MODIFIED_BY_LABEL"
class="readonly"
readonly="true"
filter="unset" />
確かに、何千人ものユーザーがいる場合、このリストを特定のユーザーグループに何とかして減らすことができます。その仮定に誤りはありますか?
あなたは単に使うことができます
<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属性に使用できる値は次のとおりです。
実際、ユーザーフォームフィールドタイプでユーザーのリストをフィルタリングするのは非常に簡単です。
最初にマニフェストで、フィールドの新しいタイプを作成する必要があります(例: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;
}
}
それで全部です
Joomla 3.8.2で新しいオプションを見つけました。フィールドタイプ「ユーザー」には「グループ」オプションがあります。
<field
name="partner_id"
type="user"
label="JGLOBAL_FIELD_MODIFIED_BY_LABEL"
groups="10"
required="true"/>
多分それは誰かのために役立つでしょう