繁体   English   中英

如何在Typo3 6.2 Extension中实现继承?

[英]How to realize inheritance in Typo3 6.2 Extension?

我的目标是能够:

  1. 在后端创建Expertise条目(已完成)
  2. 在后端创建SubExpertise条目
    • (与Expertise相同的道具,但它们属于一项或多项Expertise
  3. 在后端创建AdditionalInfoTitles条目
    • (它们可以属于一个或多个“ Expertise或“ SubExpertise Expertise
    • 创建新条目时,我希望能够从所有ExpertiseSubExpertise Expertise选择对象

现在,我只能在所有Expertise条目之间进行选择: 在此处输入图片说明

这就是为什么我考虑继承的原因,因为从那时起SubExpertise将与Expertise具有相同的类型,并因此自动显示在AdditionalInfoTitles条目的Expertise列表中。 但这只是我的理论,我有点因为typo3 TCA和其他我所缺乏的知识而陷入现实...

在我的扩展程序构建器中,我进行了以下操作(不要介意subExpertises属性) 在此处输入图片说明
然后,我在Overrides文件夹中添加了expertise ,因为我试图通过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的不同实体的单独清单。

在大多数情况下,我会摆脱专门知识和子专业知识之间的分隔。 根据您的描述,一个SubExpertise不能将另一个SubExpertise作为其父级,因此您可以调整选择字段,使其仅列出具有空父级字段的Expertise。 通过消除差异,可以消除在AdditionalInfoTitles中选择(Sub)Expertise的问题; 它只是一种且类型相同的对象。

如果您需要区分BE表单的显示方式,则有很多选项可以调整所列项目的标签,可以使用自己的功能来构建列表,甚至可以定制表单元素。

在Extbase中,您只需在存储库中编写一些函数即可获取Expertise的,SubExpertise的或两者。

如果实体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书中找到有关单表继承的更多详细信息。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM