我的目标是能够:
Expertise
个条目(已完成)SubExpertise
个条目
Expertise
相同的道具但是
它们属于一个或多个Expertise
) AdditionalInfoTitles
个条目
Expertise
OR SubExpertise
)Expertise
和SubExpertise
中选择对象 现在我只能在所有Expertise
之间进行选择 - 参赛作品:
这就是我考虑继承的原因,因为SubExpertise
与Expertise
的类型相同,因此会自动显示在Expertise
条目的AdditionalInfoTitles
列表中。但这只是我的理论而且我有点陷入了现实中的错字3 TCA以及我缺乏的其他知识......
在我的扩展程序构建器中,我做了以下操作(不介意 subExpertises 属性)
然后我将expertise
添加到Overrides
文件夹,因为我正尝试使用subexpertise
扩展它:
<?php
if (!defined('TYPO3_MODE')) {
die ('Access denied.');
}
$temporaryColumns = array (
'expertise' => array(
'exclude' => 1,
'label' => 'LLL:EXT:appoints/Resources/Private/Language/locallang_db.xlf:tx_appoints_domain_model_subexpertise.expertise',
'config' => array(
'type' => 'select',
'foreign_table' => 'tx_appoints_domain_model_subexpertise',
'MM' => 'tx_appoints_subexpertise_expertise_mm',
'size' => 10,
'autoSizeMax' => 30,
'maxitems' => 9999,
'multiple' => 0,
'wizards' => array(
'_PADDING' => 1,
'_VERTICAL' => 1,
'edit' => array(
'module' => array(
'name' => 'wizard_edit',
),
'type' => 'popup',
'title' => 'Edit',
'icon' => 'edit2.gif',
'popup_onlyOpenIfSelected' => 1,
'JSopenParams' => 'height=350,width=580,status=0,menubar=0,scrollbars=1',
),
'add' => Array(
'module' => array(
'name' => 'wizard_add',
),
'type' => 'script',
'title' => 'Create new',
'icon' => 'add.gif',
'params' => array(
'table' => 'tx_appoints_domain_model_expertise',
'pid' => '###CURRENT_PID###',
'setValue' => 'prepend'
),
),
),
),
),
);
\TYPO3\CMS\Core\Utility\ExtensionManagementUtility::addTCAcolumns(
'tx_appoints_domain_model_expertise',
$temporaryColumns
);
\TYPO3\CMS\Core\Utility\ExtensionManagementUtility::addToAllTCAtypes(
'tx_appoints_domain_model_expertise',
'expertise'
);
但我认为我没有朝着正确的方向前进 -
因为我认为这样我就不能在后端添加SubExpertise
与Expertise
分开了 - 我的对象扩展fe_user
时遇到了同样的问题,因为创建它们我通常必须通过一个新用户然后设置扩展类型 - 但是这样我没有单独列出扩展fe_user
的不同实体。
答案 0 :(得分:1)
我会在大多数情况下摆脱Expertise和SubExpertise之间的分离。根据您的描述,SubExpertise不能将另一个SubExpertise作为其父项,因此您可以调整select字段,使其仅列出具有空父字段的Expertise。 通过消除差异,删除了在AdditionalInfoTitles中选择(子)专业知识的问题;它只是一种相同类型的物体。
如果您需要区分BE表单中的演示文稿,可以使用许多选项来调整列出的项目的标签,使用您自己的函数来构建列表甚至是自定义表单元素。
在Extbase中,您只需在存储库中编写一些函数即可获取专业知识,SubExpertise或两者。
答案 1 :(得分:1)
如果实体SubExpertise
在您的域模型中没有意义,那么Jigal的答案非常适合您的场景。如果它确实有意义,你可以使用Extbase中的单表继承来实现它。
class Expertise extends \TYPO3\CMS\Extbase\DomainObject\AbstractEntity
{
// all common properties
}
class SubExpertise extends Expertise
{
/**
* @var \TYPO3\CMS\Extbase\Persistence\ObjectStorage<\[YourVendorName]\Appoints\Domain\Model\Expertise>
*/
protected $expertises;
public function __construct()
{
$this->expertises = new \TYPO3\CMS\Extbase\Persistence\ObjectStorage();
}
public function getExpertises() {}
public function setExpertises($expertises) {}
}
通过TypoScript,您必须定义映射规则,因为Expertise
和SubExpertise
都将存储在同一个表tx_appoints_domain_model_subexpertise
中。
您可以在Extbase book中找到有关单表继承的更多详细信息。