Сохранить изменения TCA в TYPO3 в поле выбора - PullRequest
0 голосов
/ 05 июля 2018

Я создал новое поле в своем TCA. Я хочу перечислить все статьи и выбрать одну, чтобы установить статью в качестве верхней статьи.

Статьи имеют UID, а в базе данных - столбец с именем istoparticle tx_vendor_domain_model_article - таблица со всей информацией статьи.

Я добавил TCAcolumn.

\TYPO3\CMS\Core\Utility\ExtensionManagementUtility::addTCAcolumns('tt_content', array(
    'tx_test_istoparticle' => array(
        'exclude' => 1,
        'onChange' => 'reload',
        'label' => 'Top Article',
        'l10n_mode' => 'exclude',
        'config' => array(
            'type' => 'select',
            'itemsProcFunc' => \Vendor\MyArticles\Hooks\Backend\Preview\ArticleRenderer::class . '->getArticleTitle',

        )
    ),
));

С пользовательской функцией

public function getTopArticles($param){
    $pid = $param['row']['pid'];
    $articles = $this->getArticles($pid);

    foreach ($articles as $article) {

        $record = BackendUtility::getRecord('tx_vendor_domain_model_article', $article->getUid());
        $title = $record['header'];
        $param['items'][][] = $title;
    }
}

Кстати: $ record содержит всю необходимую мне информацию, UID, bodytext и так далее. Но я могу хранить только заголовок в массиве !? Теперь я получил все названия, перечисленные в моем окне выбора в бэкэнде.

Что мне нужно сделать, чтобы сохранить мою частицу, если я выберу статью в бэкэнде?

Есть ли метод onChange для TCA? И как я могу получить такую ​​информацию, как Uid, если я выберу одну?

1 Ответ

0 голосов
/ 05 июля 2018

Элементы в конфигурации TCA должны иметь как минимум два элемента: первый - это метка, а второй - значение. Есть еще варианты, но я думаю, что не нужно в вашем случае. Вы можете прочитать о них здесь: https://docs.typo3.org/typo3cms/TCAReference/8.7/ColumnsConfig/Type/Select.html#items

Это означает, что ваш usefFunc должен выглядеть так:

public function getTopArticles(&$param){
    $pid = $param['row']['pid'];
    $teasers = $this->getArticles($pid);

    foreach ($articles as $article) {

        $record = BackendUtility::getRecord('tx_vendor_domain_model_article', $article->getUid());
        $param['items'][] = [
            $record['header'],
            $record['uid'],
        ]
    }
}

И да, в TCA есть onChange функциональность: https://docs.typo3.org/typo3cms/TCAReference/8.7/Columns/Index.html?highlight=onchange#onchange

Если вы используете более старый TYPO3, чем 8.6, вам нужно искать requestUpdate в соответствии с: https://docs.typo3.org/typo3cms/extensions/core/8.7/Changelog/8.6/Deprecation-78899-TCACtrlFieldRequestUpdateDropped.html

...