Представим себе дополнительное поле tags, это дополнительное поле выводит ресурсы, например для формирования тегов к новости.
Так вот, стандартное дополнительное поле список (множественный выбор) выведет в код страницы все ресурсы, а не только выбранные, таким образом загрузка страницы существенно увеличиться.
Для решения таких проблем есть пакет SuperBoxSelect
Он подгружает необходимые ресурсы только тогда когда мы обращаемся к самому дополнительному полю.
Но в и в нём есть некоторая проблема:
Если у вас дополнительное поле, которое выводит не ресурсы, а пользователей и вы захотите искать не по полю username, а по полю fullname, то следующее решение для вас:
Будем править прям код самого пакета, по этому при первом обновлении вся наша работа удалится :)
Переходим по пути
core\components\superboxselect\processors\types\users\getlist.class.php
Присоединяем таблицу modUserProfile к modUser и добавляем в выдачу 2 поля internalKey и fullname.
До:
$c->select($this->modx->getSelectColumns($this->classKey, $this->classKey, '', ['id', 'username']));
добавляем:
$c->leftJoin('modUserProfile', 'modUserProfile', ['modUserProfile.internalKey = modUser.id']);
$c->select($this->modx->getSelectColumns('modUserProfile', 'modUserProfile', '', ['internalKey','fullname']));
Добавляем поиск не только по полю username, но и по полю fullname.
После:
$c->where([
'username:LIKE' => '%' . $query . '%'
]);
добавляем:
$c->where([
'OR:modUserProfile.fullname:LIKE' => '%' . $query . '%'
]);
Меняем в выдаче результат
Заменяем:
$titleTpl = $this->getProperty('userTitleTpl', '@INLINE [[+username]]');
на:
$titleTpl = $this->getProperty('userTitleTpl', '@INLINE [[+fullname]]');
Таким образом можно добавить и другие поля, например email, телефон и прочие.