在 select 框中保存 TYPO3 中的 TCA 更改
Save TCA changes in TYPO3 on select box
我在 TCA 中创建了新字段。我想列出所有文章和 select 一篇,将文章设置为 top-article。
文章有一个 UID,数据库有一个名为 istoparticle 的列。
tx_vendor_domain_model_article 是包含文章所有信息的 table。
我添加了一个 TCA 列。
\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,正文等等。但是我只能将 header 存储在数组中!?
现在我在后端的 select 框中列出了所有标题。
如果我在后端 select 一篇文章,我需要做什么来保存我的 toparticle?
TCA有onChange方法吗?如果我 select 一个,我怎样才能得到像 Uid 这样的信息?
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
如果您使用的是早于 8.6 的 TYPO3,您需要根据以下内容查找 requestUpdate
:https://docs.typo3.org/typo3cms/extensions/core/8.7/Changelog/8.6/Deprecation-78899-TCACtrlFieldRequestUpdateDropped.html
我在 TCA 中创建了新字段。我想列出所有文章和 select 一篇,将文章设置为 top-article。
文章有一个 UID,数据库有一个名为 istoparticle 的列。 tx_vendor_domain_model_article 是包含文章所有信息的 table。
我添加了一个 TCA 列。
\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,正文等等。但是我只能将 header 存储在数组中!? 现在我在后端的 select 框中列出了所有标题。
如果我在后端 select 一篇文章,我需要做什么来保存我的 toparticle?
TCA有onChange方法吗?如果我 select 一个,我怎样才能得到像 Uid 这样的信息?
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
如果您使用的是早于 8.6 的 TYPO3,您需要根据以下内容查找 requestUpdate
:https://docs.typo3.org/typo3cms/extensions/core/8.7/Changelog/8.6/Deprecation-78899-TCACtrlFieldRequestUpdateDropped.html