TYPO3 получает пользователя из поля cruser_id
я хотел бы показать пользователю, который создал элемент. ТСА выглядит следующим образом:
'ctrl' => [
'title' => 'Title',
'label' => 'title',
'tstamp' => 'tstamp',
'crdate' => 'crdate',
'cruser_id' => 'cruser_id',
С геттером я могу получить tstamp и crdate. Но с cruser_id это не работает. Как я могу получить имя пользователя с cruser_id?
1 ответ
Следующий пример работает на TYPO3 11.5.8 и должен работать и с TYPO3 10.
Сначала вам нужны геттеры и сеттеры для вашей модели (\YourVendor\YourExtension\Domain\Model\YourModel)
/**
* @var int
*/
protected int $cruserId = 0;
/**
* @return int
*/
public function getCruserId(): int
{
return $this->cruserId;
}
/**
* @param int $cruserId
*/
public function setCruserId(int $cruserId): void
{
$this->cruserId = $cruserId;
}
Затем вам нужно добавить конфигурацию TCA для этого конкретного поля. Вам не нужно добавлять его в
types
или где-нибудь еще. TYPO3 просто нужна конфигурация, чтобы он знал, что с ней делать.
'cruser_id' => [
'config' => [
'type' => 'input',
'size' => 10,
'max' => 255,
],
],
И последнее, и не менее важное: вам нужно отобразить его в правом столбце. Итак, под вашим
your_extension/Configuration/Extbase/Persistence/Classes.php
вам нужно добавить свою модель и свойство:
\YourVendor\YourExtension\Domain\Model\YourModel::class => [
'columns' => [
'cruserId' => [
'mapOnProperty' => 'cruser_id'
]
]
]
Вот ссылка: TYPO3 v10 Как мне получить crdate объекта или tstamp во FrontEnd
Объект внутреннего пользователя
Если вы хотите получить информацию о пользователе Backend, шаги те же, но необходимо внести некоторые изменения.
Модель
use TYPO3\CMS\Beuser\Domain\Model\BackendUser
/**
* @var BackendUser|null
*/
protected ?BackendUser $cruserId = null;
/**
* @return BackendUser|null
*/
public function getCruserId(): ?BackendUser
{
return $this->cruserId;
}
/**
* @param ?BackendUser $cruserId
*/
public function setCruserId(?BackendUser $cruserId): void
{
$this->cruserId = $cruserId;
}
ТСА
'cruser_id' => [
'config' => [
'type' => 'select',
'renderType' => 'selectSingle',
'foreign_table' => 'be_users',
'foreign_table_where' => 'ORDER BY username',
],
],
Это даст вам следующее:
Надеюсь, это помогло