如何在Typo3 6.2扩展中实现继承?

时间:2016-09-27 13:17:58

标签: typo3 backend extend typo3-6.2.x

我的目标是能够:

  1. 在后端创建Expertise个条目(已完成)
  2. 在后端创建SubExpertise个条目
    • (与Expertise相同的道具但是 它们属于一个或多个Expertise
  3. 在后端创建AdditionalInfoTitles个条目
    • (他们可以属于一个或多个Expertise OR SubExpertise
    • 我希望能够在创建新条目时从所有ExpertiseSubExpertise中选择对象
  4. 现在我只能在所有Expertise之间进行选择 - 参赛作品: enter image description here

    这就是我考虑继承的原因,因为SubExpertiseExpertise的类型相同,因此会自动显示在Expertise条目的AdditionalInfoTitles列表中。但这只是我的理论而且我有点陷入了现实中的错字3 TCA以及我缺乏的其他知识......

    在我的扩展程序构建器中,我做了以下操作(不介意 subExpertises 属性)enter image description here
    然后我将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'
    );
    

    但我认为我没有朝着正确的方向前进 - 因为我认为这样我就不能在后端添加SubExpertiseExpertise分开了 - 我的对象扩展fe_user时遇到了同样的问题,因为创建它们我通常必须通过一个新用户然后设置扩展类型 - 但是这样我没有单独列出扩展fe_user的不同实体。

2 个答案:

答案 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,您必须定义映射规则,因为ExpertiseSubExpertise都将存储在同一个表tx_appoints_domain_model_subexpertise中。

您可以在Extbase book中找到有关单表继承的更多详细信息。