tx_news:扩展第二个容器 $contentElements
tx_news: extend with a second container $contentElements
TYPO3 8.7.4
新闻 6.0.0
是否可以使用第二个容器在 news_extend 扩展中扩展新闻? (如 contentElements)
目标是将这第二个容器放在详情页的相关内容中。
有例子吗?
这应该有效。只需按照文档中的描述扩展新闻 tca 和模型
是的,很简单。需要在数据库中添加字段,在TCA中配置,扩展新闻模型,调整详情模板。
- 在news_extend/ext_tables.sql中添加:
CREATE TABLE tx_news_domain_model_news (
tx_newsextend_content_elements_second text
);
- 在 news_extend/Configuration/TCA/Overrides/tx_news_domain_model_news.php:
$newNewsColumns = [
'tx_newsextend_content_elements_second' => [
// .... here copy the original 'content_elements' field's config from ext news' TCA. update the label to yours.
];
\TYPO3\CMS\Core\Utility\ExtensionManagementUtility::addTCAcolumns('tx_news_domain_model_news', $newNewsColumns);
\TYPO3\CMS\Core\Utility\ExtensionManagementUtility::addToAllTCAtypes('tx_news_domain_model_news', 'tx_newsextend_content_elements_second', '', 'after:content_elements');
- 在news_extend/Resources/Private/Language/locallang_db.xlf 添加:
...
<trans-unit id="tx_news_domain_model_news.tx_newsextend_content_elements_second">
<source>Additional content elements</source>
</trans-unit>
- news_extend/Classes/Domain/Model/News.php:
namespace [my vendor]\NewsExtend\Domain\Model;
class News extends \GeorgRinger\News\Domain\Model\News {
// here copy all uses of contentElement field from original model, only name it txNewsextendContentElementsSecond.
// watch whether it's only declared property and getter/setter (simple fields), or something more is done in the model and do it the same way as there.
// tip: see getContentElementIdList() method
}
- 将您的扩展注册为扩展 class 的新闻模型提供者:
在 news_extend/ext_localconf.php 添加:
$GLOBALS['TYPO3_CONF_VARS']['EXT']['news']['classes']['Domain/Model/News'][] = 'news_extend';
- 现在您可以在模板中使用它了:
<f:if condition="{newsItem.txNewsExtendContentElementsSecond}">
<!-- content elements second -->
<f:cObject typoscriptObjectPath="lib.tx_news.contentElementRendering">{newsItem.txNewsExtendContentElementsSecondIdList}</f:cObject>
</f:if>
如果你复制粘贴上面的内容可能不可行,我是根据我的笔记写的。但它会帮助你理解这个想法。祝你好运
TYPO3 8.7.4 新闻 6.0.0
是否可以使用第二个容器在 news_extend 扩展中扩展新闻? (如 contentElements) 目标是将这第二个容器放在详情页的相关内容中。
有例子吗?
这应该有效。只需按照文档中的描述扩展新闻 tca 和模型
是的,很简单。需要在数据库中添加字段,在TCA中配置,扩展新闻模型,调整详情模板。
- 在news_extend/ext_tables.sql中添加:
CREATE TABLE tx_news_domain_model_news ( tx_newsextend_content_elements_second text );
- 在 news_extend/Configuration/TCA/Overrides/tx_news_domain_model_news.php:
$newNewsColumns = [ 'tx_newsextend_content_elements_second' => [ // .... here copy the original 'content_elements' field's config from ext news' TCA. update the label to yours. ]; \TYPO3\CMS\Core\Utility\ExtensionManagementUtility::addTCAcolumns('tx_news_domain_model_news', $newNewsColumns); \TYPO3\CMS\Core\Utility\ExtensionManagementUtility::addToAllTCAtypes('tx_news_domain_model_news', 'tx_newsextend_content_elements_second', '', 'after:content_elements');
- 在news_extend/Resources/Private/Language/locallang_db.xlf 添加:
... <trans-unit id="tx_news_domain_model_news.tx_newsextend_content_elements_second"> <source>Additional content elements</source> </trans-unit>
- news_extend/Classes/Domain/Model/News.php:
namespace [my vendor]\NewsExtend\Domain\Model; class News extends \GeorgRinger\News\Domain\Model\News { // here copy all uses of contentElement field from original model, only name it txNewsextendContentElementsSecond. // watch whether it's only declared property and getter/setter (simple fields), or something more is done in the model and do it the same way as there. // tip: see getContentElementIdList() method }
- 将您的扩展注册为扩展 class 的新闻模型提供者: 在 news_extend/ext_localconf.php 添加:
$GLOBALS['TYPO3_CONF_VARS']['EXT']['news']['classes']['Domain/Model/News'][] = 'news_extend';
- 现在您可以在模板中使用它了:
<f:if condition="{newsItem.txNewsExtendContentElementsSecond}"> <!-- content elements second --> <f:cObject typoscriptObjectPath="lib.tx_news.contentElementRendering">{newsItem.txNewsExtendContentElementsSecondIdList}</f:cObject> </f:if>
如果你复制粘贴上面的内容可能不可行,我是根据我的笔记写的。但它会帮助你理解这个想法。祝你好运