【问题标题】:ObjectStorage does not save dataObjectStorage 不保存数据
【发布时间】:2017-06-14 09:59:29
【问题描述】:

我有 TYPO3 版本 7.6.18。

我无法在前端保存下拉字段,但我可以将其保存在后端。

TCA:

'glasses' => array(
    'label' => 'LLL:EXT:feusersplus/Resources/Private/Language/locallang_db.xlf:tx_feusersplus_domain_model_user.glasses',
    'config' => array(
        'type' => 'select',
        'renderType' => 'selectMultipleSideBySide',
        'foreign_table' => 'tx_feusersplus_domain_model_glasses',
        'MM' => 'tx_feusersplus_user_glasses_mm',
        'foreign_table_where' => 'AND tx_feusersplus_domain_model_glasses.sys_language_uid=###REC_FIELD_sys_language_uid### ',
        'maxitems' => '50'
    ),
),

模型:

/**
 * glasses
 *
 * @var \TYPO3\CMS\Extbase\Persistence\ObjectStorage<\Fhk\Feusersplus\Domain\Model\Glasses>
  * 
 */
protected $glasses;

/**
 * Returns the glasses
 *
 * @return \TYPO3\CMS\Extbase\Persistence\ObjectStorage<\Fhk\Feusersplus\Domain\Model\Glasses> $glasses
 */
public function getGlasses()
{
    return $this->glasses;
}

/**
 * Sets the glasses
 *
 * @return void
 */
public function setGlasses($glasses)
{
    $this->glasses = $glasses;
}

观点:

{namespace femanager=Fhk\Feusersplus\ViewHelpers}
<f:render section="default" arguments="{_all}" />

<f:section name="default">
    <div class="femanager_fieldset femanager_glasses control-group">
        <label for="femanager_field_glasses" class="control-label">
            <f:translate key="tx_feusersplus.glasses"/>
            <f:if condition="{femanager:Validation.IsRequiredField(fieldName:'glasses')}">
                <span>*</span>
            </f:if>
        </label>
        <div class="controls">
            <femanager:form.select
                id="femanager_field_glasses"
                property="glasses"
                options="{femanager:Form.GetGlasses()}"
                class="input-block-level"
                additionalAttributes="{femanager:Validation.FormValidationData(settings:settings,fieldName:'glasses')}" />
        </div>
    </div>
</f:section>

真的,我尝试了很多变体。清除所有缓存。而且它不适用于后端。请任何人帮我)它不会保存在前端

【问题讨论】:

    标签: typo3 typo3-7.6.x


    【解决方案1】:

    您需要在model 文件中为selectMultipleSideBySide 选择框添加以下方法

    protected function initStorageObjects() {
        $this->glasses = new \TYPO3\CMS\Extbase\Persistence\ObjectStorage();
    }
    
    
    /**
     * Adds a glasses
     *
     * @param \Fhk\Feusersplus\Domain\Model\Glasses $glasses
     * @return void
     */
    public function addglasses(\Fhk\Feusersplus\Domain\Model\Glasses $glasses) {
        $this->glasses->attach($glasses);
    }
    
    /**
     * Removes a glasses
     *
     * @param \Fhk\Feusersplus\Domain\Model\Glasses $glassesToRemove The Category to be removed
     * @return void
     */
    public function removeglasses(\Fhk\Feusersplus\Domain\Model\Glasses $glassesToRemove) {
        $this->glasses->detach($glassesToRemove);
    }
    
    /**
     * Returns the glasses
     *
     * @return \TYPO3\CMS\Extbase\Persistence\ObjectStorage<\Fhk\Feusersplus\Domain\Model\Glasses> $glasses
     */
    public function getglasses() {
        return $this->glasses;
    }
    
    /**
     * Sets the glasses
     *
     * @param \TYPO3\CMS\Extbase\Persistence\ObjectStorage<\Fhk\Feusersplus\Domain\Model\Glasses> $glasses
     * @return void
     */
    public function setglasses(\TYPO3\CMS\Extbase\Persistence\ObjectStorage $glasses) {
        $this->glasses = $glasses;
    }
    

    还有你的 TCA 和 sql 文件,如下所示。

    glasses int(11) unsigned DEFAULT '0' NOT NULL,
    
        'glasses' => [
        'exclude' => true,
        'label' => 'LLL:EXT:feusersplus/Resources/Private/Language/locallang_db.xlf:tx_feusersplus_domain_model_user.glasses',
        'config' => [
        'type' => 'select',
        'renderType' => 'selectMultipleSideBySide',
        'foreign_table' => 'tx_feusersplus_domain_model_glasses',
        'MM' => 'tx_feusersplus_user_glasses_mm',
        'size' => 10,
        'autoSizeMax' => 30,
        'maxitems' => 9999,
        'multiple' => 0,
        'wizards' => [
            '_PADDING' => 1,
            '_VERTICAL' => 1,
            'edit' => [
                'module' => [
                    'name' => 'wizard_edit',
                ],
                'type' => 'popup',
                'title' => 'Edit', // todo define label: LLL:EXT:.../Resources/Private/Language/locallang_tca.xlf:wizard.edit
                'icon' => 'EXT:backend/Resources/Public/Images/FormFieldWizard/wizard_edit.gif',
                'popup_onlyOpenIfSelected' => 1,
                'JSopenParams' => 'height=350,width=580,status=0,menubar=0,scrollbars=1',
            ],
            'add' => [
                'module' => [
                    'name' => 'wizard_add',
                ],
                'type' => 'script',
                'title' => 'Create new', // todo define label: LLL:EXT:.../Resources/Private/Language/locallang_tca.xlf:wizard.add
                'icon' => 'EXT:backend/Resources/Public/Images/FormFieldWizard/wizard_add.gif',
                'params' => [
                    'table' => 'tx_drcbanners_domain_model_bannerscategories',
                    'pid' => '###CURRENT_PID###',
                    'setValue' => 'prepend'
                ],
            ],
        ],
    ],
    ],
    

    在添加此更改后一次 uninstall / install 扩展并清除所有 cache data 安装费用。

    【讨论】:

    • 我按照你说的添加代码,我看到它在 fe_users 表中的 field glass 中设置了 glass = 0。而且它不会向 glass_mm 表添加行
    • 它从 glass_mm 中删除行但不向该表中添加行((请您帮忙
    猜你喜欢
    • 1970-01-01
    • 2018-06-05
    • 1970-01-01
    • 2020-03-25
    • 2021-10-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多