>

typo3 9.5.8에 대한 extbase 확장을 작성했습니다. 확장 빌더로 시작하여 확장을 수동으로 완료했습니다. 이제 나는 이상한 행동을 인식합니다. 편집을 위해 확장 레코드를 열면 백엔드 양식이 올바르게 렌더링되고 모든 필드가 관련 날짜 기반 항목으로 올바르게 채워집니다. 그러나 일부 필드의 값만 저장할 수 있습니다. 다른 값은 사라집니다. 이 값을 데이터베이스에서 직접 편집하면 백엔드 양식에 올바르게 표시됩니다. 따라서 getter는 예상대로 작동하지만 setter는 작동하지 않습니다.

다음은이 동작으로 하나의 필드로 축소 된 설정입니다 ( "myExtension"및 "myVendor"는 실제 코드가 아닌 여기에 자리 표시 자입니다. 고객 이름이 여기에 표시되는 것을 원하지 않았습니다) :

myExtension/ext_tables.sql

#
# Table structure for table 'tx_myExtension_domain_model_kategorie'
#
CREATE TABLE tx_<myExtension>_domain_model_kategorie (
    dh_description text,
);

myExtension/Configuration/TCA/tx_myExtension_domain_model_kategorie.php

       'dh_description' => [
            'exclude' => true,
            'label' => 'LLL:EXT:myExtension/Resources/Private/Language/locallang_db.xlf:tx_<myExtension>_domain_model_kategorie.dh_description',
            'config' => [
                'type' => 'text',
                'enableRichtext' => true,
                'richtextConfiguration' => 'minimal',
                'fieldControl' => [
                    'fullScreenRichtext' => [
                        'disabled' => false,
                    ],
                ],
                'cols' => 40,
                'rows' => 15,
                'eval' => 'trim',
            ],
        ],

myExtension/Classes/Domain/Model/Kategorie.php

namespace MyVendor\myExtension\Domain\Model;
class Kategorie extends \TYPO3\CMS\Extbase\DomainObject\AbstractEntity
{
    /**
     * dhDescription
     *
     * @var string
     */
    protected $dhDescription = '';
    /**
     * Returns the dhDescription
     *
     * @return string $dhDescription
     */
    public function getDhDescription()
    {
        return $this->dhDescription;
    }
    /**
     * Sets the dhDescription
     *
     * @param string $dhDescription
     * @return void
     */
    public function setDhDescription($dhDescription)
    {
        $this->dhDescription = $dhDescription;
    }


확장 프로그램을 다시 설치하고 캐시를 지우고 typo3temp를 지 웁니다. 모델에는 아무런 영향이 없습니다. 파일 이름을 바꾸거나 구문 오류를 쓰면 typo3가 귀찮게하지 않습니다.

어떤 아이디어?

질문대로 완전한 TCA는 다음과 같습니다.

<?php
return [
    'ctrl' => [
        'title' => 'LLL:EXT:myExtension/Resources/Private/Language/locallang_db.xlf:tx_myExtension_domain_model_kategorie',
        'label' => 'kategoriename',
        'tstamp' => 'tstamp',
        'crdate' => 'crdate',
        'cruser_id' => 'cruser_id',
        'versioningWS' => true,
        'languageField' => 'sys_language_uid',
        'transOrigPointerField' => 'l10n_parent',
        'transOrigDiffSourceField' => 'l10n_diffsource',
        'delete' => 'deleted',
        'enablecolumns' => [
            'disabled' => 'hidden',
            'starttime' => 'starttime',
            'endtime' => 'endtime',
        ],
        'searchFields' => 'kategoriename,dh_description,dh_meta_keywords,dh_meta_description',
        'iconfile' => 'EXT:myExtension/Resources/Public/Icons/tx_myExtension_domain_model_kategorie.gif'
    ],
    'interface' => [
        'showRecordFieldList' => 'sys_language_uid, l10n_parent, l10n_diffsource, hidden, orig_id, kategoriename, ordnung, zeitstempel, in_teaser, dh_description, dh_meta_keywords, dh_meta_description, kurstypen',
    ],
    'types' => [
        '1' => ['showitem' => 'hidden, in_teaser, kategoriename, dh_description, ordnung, kurstypen,
        --div--;SEO Data, dh_meta_keywords, dh_meta_description,
        --div--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:tabs.access, starttime, endtime,
        --div--;LLL:EXT:frontend/Resources/Private/Language/locallang_db.xlf:tabs.seo, dh_description, dh_meta_keywords, dh_meta_description'],
    ],
    'columns' => [
        'sys_language_uid' => [
            'exclude' => true,
            'label' => 'LLL:EXT:core/Resources/Private/Language/locallang_general.xlf:LGL.language',
            'config' => [
                'type' => 'select',
                'renderType' => 'selectSingle',
                'special' => 'languages',
                'items' => [
                    [
                        'LLL:EXT:core/Resources/Private/Language/locallang_general.xlf:LGL.allLanguages',
                        -1,
                        'flags-multiple'
                    ]
                ],
                'default' => 0,
            ],
        ],
        'l10n_parent' => [
            'displayCond' => 'FIELD:sys_language_uid:>:0',
            'exclude' => true,
            'label' => 'LLL:EXT:core/Resources/Private/Language/locallang_general.xlf:LGL.l18n_parent',
            'config' => [
                'type' => 'select',
                'renderType' => 'selectSingle',
                'default' => 0,
                'items' => [
                    ['', 0],
                ],
                'foreign_table' => 'tx_myExtension_domain_model_kategorie',
                'foreign_table_where' => 'AND {#tx_myExtension_domain_model_kategorie}.{#pid}=###CURRENT_PID### AND {#tx_myExtension_domain_model_kategorie}.{#sys_language_uid} IN (-1,0)',
            ],
        ],
        'l10n_diffsource' => [
            'config' => [
                'type' => 'passthrough',
            ],
        ],
        't3ver_label' => [
            'label' => 'LLL:EXT:core/Resources/Private/Language/locallang_general.xlf:LGL.versionLabel',
            'config' => [
                'type' => 'input',
                'size' => 30,
                'max' => 255,
            ],
        ],
        'hidden' => [
            'exclude' => true,
            'label' => 'LLL:EXT:core/Resources/Private/Language/locallang_general.xlf:LGL.visible',
            'config' => [
                'type' => 'check',
                'renderType' => 'checkboxToggle',
                'items' => [
                    [
                        0 => '',
                        1 => '',
                        'invertStateDisplay' => true
                    ]
                ],
            ],
        ],
        'starttime' => [
            'exclude' => true,
            'label' => 'LLL:EXT:core/Resources/Private/Language/locallang_general.xlf:LGL.starttime',
            'config' => [
                'type' => 'input',
                'renderType' => 'inputDateTime',
                'eval' => 'datetime,int',
                'default' => 0,
                'behaviour' => [
                    'allowLanguageSynchronization' => true
                ]
            ],
        ],
        'endtime' => [
            'exclude' => true,
            'label' => 'LLL:EXT:core/Resources/Private/Language/locallang_general.xlf:LGL.endtime',
            'config' => [
                'type' => 'input',
                'renderType' => 'inputDateTime',
                'eval' => 'datetime,int',
                'default' => 0,
                'range' => [
                    'upper' => mktime(0, 0, 0, 1, 1, 2038)
                ],
                'behaviour' => [
                    'allowLanguageSynchronization' => true
                ]
            ],
        ],
        'orig_id' => [
            'exclude' => true,
            'label' => 'LLL:EXT:myExtension/Resources/Private/Language/locallang_db.xlf:tx_myExtension_domain_model_kategorie.orig_id',
            'config' => [
                'type' => 'input',
                'size' => 4,
                'eval' => 'int'
            ]
        ],
        'kategoriename' => [
            'exclude' => true,
            'label' => 'LLL:EXT:myExtension/Resources/Private/Language/locallang_db.xlf:tx_myExtension_domain_model_kategorie.kategoriename',
            'config' => [
                'type' => 'input',
                'size' => 30,
                'eval' => 'trim'
            ],
        ],
        'ordnung' => [
            'exclude' => true,
            'label' => 'LLL:EXT:myExtension/Resources/Private/Language/locallang_db.xlf:tx_myExtension_domain_model_kategorie.ordnung',
            'config' => [
                'type' => 'input',
                'size' => 4,
                'eval' => 'int'
            ]
        ],
        'zeitstempel' => [
            'exclude' => true,
            'label' => 'LLL:EXT:myExtension/Resources/Private/Language/locallang_db.xlf:tx_myExtension_domain_model_kategorie.zeitstempel',
            'config' => [
                'type' => 'input',
                'renderType' => 'inputDateTime',
                'size' => 10,
                'eval' => 'datetime',
                'default' => time()
            ],
        ],
        'in_teaser' => [
            'exclude' => true,
            'label' => 'LLL:EXT:myExtension/Resources/Private/Language/locallang_db.xlf:tx_myExtension_domain_model_kategorie.in_teaser',
            'config' => [
                'type' => 'check',
                'items' => [
                    '1' => [
                        '0' => 'LLL:EXT:lang/locallang_core.xlf:labels.enabled'
                    ]
                ],
                'default' => 0,
            ]
        ],
        'dh_description' => [
            'exclude' => true,
            'label' => 'LLL:EXT:myExtension/Resources/Private/Language/locallang_db.xlf:tx_myExtension_domain_model_kategorie.dh_description',
            'config' => [
                'type' => 'text',
                'enableRichtext' => true,
                'richtextConfiguration' => 'minimal',
                'fieldControl' => [
                    'fullScreenRichtext' => [
                        'disabled' => false,
                    ],
                ],
                'cols' => 40,
                'rows' => 15,
                'eval' => 'trim',
            ],
        ],
        'dh_meta_keywords' => [
            'exclude' => true,
            'label' => 'LLL:EXT:myExtension/Resources/Private/Language/locallang_db.xlf:tx_myExtension_domain_model_kategorie.dh_meta_keywords',
            'config' => [
                'type' => 'text',
                'cols' => 40,
                'rows' => 15,
                'eval' => 'trim'
            ]
        ],
        'dh_meta_description' => [
            'exclude' => true,
            'label' => 'LLL:EXT:myExtension/Resources/Private/Language/locallang_db.xlf:tx_myExtension_domain_model_kategorie.dh_meta_description',
            'config' => [
                'type' => 'text',
                'cols' => 40,
                'rows' => 15,
                'eval' => 'trim'
            ]
        ],
        'kurstypen' => [
            'exclude' => true,
            'label' => 'LLL:EXT:myExtension/Resources/Private/Language/locallang_db.xlf:tx_myExtension_domain_model_kategorie.kurstypen',
            'config' => [
                'type' => 'inline',
                'foreign_table' => 'tx_myExtension_domain_model_kurstypen',
                'foreign_field' => 'kategorie',
                'maxitems' => 9999,
                'appearance' => [
                    'collapseAll' => 1,
                    'levelLinksPosition' => 'top',
                    'showSynchronizationLink' => 1,
                    'showPossibleLocalizationRecords' => 1,
                    'showAllLocalizationLink' => 1
                ],
            ],
        ],
    ],
];



  • 답변 # 1

    BastianW에게 감사합니다. 그는 나에게 올바른 생각을했다. 오류를 발견했습니다.

    'types'에 이중으로 표시되는 일부 느낌이 나므로 마지막 외관의 내용 만 데이터베이스에 저장되었습니다. :-)

  • 이전 python - 클래스 내 콜백 메소드에서 메소드를 올바르게 호출하려면 어떻게해야합니까?
  • 다음 android - Firestore Paging Adapter를 사용하여 모델 클래스의 모든 값을 가져 오지 못합니까?