【问题标题】:TYPO3: Renaming of alle entities on creation of a new elementTYPO3:在创建新元素时重命名所有实体
【发布时间】:2017-04-26 11:16:33
【问题描述】:

我创建了一个在 TYPO3 6.2.30 上运行的扩展,它显示了一些具有相关材料、颜色等的产品。

材质、颜色和产品由后端的 csv 导入生成,并由 PersistenceManager 持久化。

但是如果客户想在列表模块的后端创建颜色,我有一个奇怪的行为:

创建新颜色后,所有现有和新颜色的名称都是(我认为)随机生成的数字。

型号

class Color extends \TYPO3\CMS\Extbase\DomainObject\AbstractEntity {

    /**
    * name
    *
    * @var string
    * @validate NotEmpty
    */
    protected $name = '';

    /**
     * code
     *
     * @var integer
     */
    protected $code = 0;


    /**
     * Returns the name
     *
     * @return string $name
     */
    public function getName() {
        return $this->name;
    }

    /**
     * Sets the name
     *
     * @param string $name
     * @return void
     */
    public function setName($name) {
        $this->name = $name;
    }

    /**
     * Returns the code
     *
     * @return integer $code
     */
    public function getCode() {
        return $this->code;
    }

    /**
     * Sets the code
     *
     * @param integer $code
     * @return void
     */
    public function setCode($code) {
        $this->code = $code;
    }
}

TCA:

$GLOBALS['TCA']['artikel_domain_model_color'] = array(
'ctrl' => $GLOBALS['TCA']['artikel_domain_model_color']['ctrl'],
'interface' => array(
    'showRecordFieldList' => 'sys_language_uid, l10n_parent, l10n_diffsource, hidden, name, code',
),
'types' => array(
    '1' => array('showitem' => 'sys_language_uid;;;;1-1-1, l10n_parent, l10n_diffsource, hidden;;1, name, code, --div--;LLL:EXT:cms/locallang_ttc.xlf:tabs.access, starttime, endtime'),
),
'palettes' => array(
    '1' => array('showitem' => ''),
),
'columns' => array(
    'sys_language_uid' => array(
        'exclude' => 1,
        'label' => 'LLL:EXT:lang/locallang_general.xlf:LGL.language',
        'config' => array(
            'type' => 'select',
            'foreign_table' => 'sys_language',
            'foreign_table_where' => 'ORDER BY sys_language.title',
            'items' => array(
                array('LLL:EXT:lang/locallang_general.xlf:LGL.allLanguages', -1),
                array('LLL:EXT:lang/locallang_general.xlf:LGL.default_value', 0)
            ),
        ),
    ),
    'l10n_parent' => array(
        'displayCond' => 'FIELD:sys_language_uid:>:0',
        'exclude' => 1,
        'label' => 'LLL:EXT:lang/locallang_general.xlf:LGL.l18n_parent',
        'config' => array(
            'type' => 'select',
            'items' => array(
                array('', 0),
            ),
            'foreign_table' => 'artikel_domain_model_color',
            'foreign_table_where' => 'AND artikel_domain_model_color.pid=###CURRENT_PID### AND artikel_domain_model_color.sys_language_uid IN (-1,0)',
        ),
    ),
    'l10n_diffsource' => array(
        'config' => array(
            'type' => 'passthrough',
        ),
    ),

    't3ver_label' => array(
        'label' => 'LLL:EXT:lang/locallang_general.xlf:LGL.versionLabel',
        'config' => array(
            'type' => 'input',
            'size' => 30,
            'max' => 255,
        )
    ),

    'hidden' => array(
        'exclude' => 1,
        'label' => 'LLL:EXT:lang/locallang_general.xlf:LGL.hidden',
        'config' => array(
            'type' => 'check',
        ),
    ),
    'starttime' => array(
        'exclude' => 1,
        'l10n_mode' => 'mergeIfNotBlank',
        'label' => 'LLL:EXT:lang/locallang_general.xlf:LGL.starttime',
        'config' => array(
            'type' => 'input',
            'size' => 13,
            'max' => 20,
            'eval' => 'datetime',
            'checkbox' => 0,
            'default' => 0,
            'range' => array(
                'lower' => mktime(0, 0, 0, date('m'), date('d'), date('Y'))
            ),
        ),
    ),
    'endtime' => array(
        'exclude' => 1,
        'l10n_mode' => 'mergeIfNotBlank',
        'label' => 'LLL:EXT:lang/locallang_general.xlf:LGL.endtime',
        'config' => array(
            'type' => 'input',
            'size' => 13,
            'max' => 20,
            'eval' => 'datetime',
            'checkbox' => 0,
            'default' => 0,
            'range' => array(
                'lower' => mktime(0, 0, 0, date('m'), date('d'), date('Y'))
            ),
        ),
    ),
    'name' => array(
        'exclude' => 1,
        'label' => 'LLL:EXT:artikel/Resources/Private/Language/locallang_db.xlf:artikel_domain_model_color.name',
        'config' => array(
            'type' => 'input',
            'size' => 30,
            'eval' => 'trim,required'
        ),
    ),
    'code' => array(
        'exclude' => 1,
        'label' => 'LLL:EXT:artikel/Resources/Private/Language/locallang_db.xlf:artikel_domain_model_color.code',
        'config' => array(
            'type' => 'input',
            'size' => 4,
            'eval' => 'int,required'
        )
    )
),
);

ext_tables.php

\TYPO3\CMS\Core\Utility\ExtensionManagementUtility::addLLrefForTCAdescr('artikel_domain_model_color', 'EXT:artikel/Resources/Private/Language/locallang_csh_artikel_domain_model_color.xlf');
\TYPO3\CMS\Core\Utility\ExtensionManagementUtility::allowTableOnStandardPages('artikel_domain_model_color');
$GLOBALS['TCA']['artikel_domain_model_color'] = array(
'ctrl' => array(
    'title' => 'LLL:EXT:artikel/Resources/Private/Language/locallang_db.xlf:artikel_domain_model_color',
    'label' => 'name',
    'label_alt' => 'code',
    'label_alt_force' => 1,
    'tstamp' => 'tstamp',
    'crdate' => 'crdate',
    'cruser_id' => 'cruser_id',
    'dividers2tabs' => TRUE,
    'sortby' => 'name',
    'versioningWS' => 2,
    'versioning_followPages' => TRUE,
    'languageField' => 'sys_language_uid',
    'transOrigPointerField' => 'l10n_parent',
    'transOrigDiffSourceField' => 'l10n_diffsource',
    'delete' => 'deleted',
    'enablecolumns' => array(
        'disabled' => 'hidden',
        'starttime' => 'starttime',
        'endtime' => 'endtime',
    ),
    'searchFields' => 'name,code,',
    'dynamicConfigFile' => \TYPO3\CMS\Core\Utility\ExtensionManagementUtility::extPath($_EXTKEY) . 'Configuration/TCA/Color.php',
    'iconfile' => \TYPO3\CMS\Core\Utility\ExtensionManagementUtility::extRelPath($_EXTKEY) . 'Resources/Public/Icons/artikel_domain_model_color.gif'
),
);

任何想法为什么会发生这种情况或我应该从哪里开始调试?

【问题讨论】:

    标签: php typo3 extbase typo3-6.2.x


    【解决方案1】:

    正如 Dimitri 所说,sortby 是 TYPO3 用来保存排序信息的表字段的参数。

    在线阅读 https://docs.typo3.org/typo3cms/TCAReference/7.6/Reference/Ctrl/Index.html#sortby

    但是,如果您想按名称等自定义字段对后端中的条目进行排序,只需使用 default_sortby

    在线阅读 https://docs.typo3.org/typo3cms/TCAReference/7.6/Reference/Ctrl/Index.html#default-sortby

    使用default_sortby,您可以在该表中提供任何 TCA 注册字段。如果您不使用sortby 字段或不希望后端用户手动对条目进行排序,我建议您从参数中完全删除sortby。在这种情况下,用于排序的箭头也会在列表中消失,并且不会出现一些误解,为什么 BE 中的条目可以排序而在 FE 中无效

    【讨论】:

      【解决方案2】:

      从您的 ext_tables.php 中的 TCA 中删除 'sortby' => 'name',。排序字段是一个整数字段,由 Typo3 自动更新,它不应该是用户可编辑的文本字段

      【讨论】:

      • 谢谢!但是为什么 TYPO3 会重命名所有实体呢?它会启动新的“排序”行为吗?
      • 每次创建新条目或对单个条目进行排序时,整个列表都会被排序,因此sortby 字段会获得一个新值
      • 好的 - 似乎合法。是否可以在此位置添加检查,如果当前字段是字符串或 int 以在其设置为错误字段时抛出错误?
      • 否,但如果您只需要它在后端进行排序,您可以使用 Manfred 提到的 default_sortby 字段
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-10-13
      • 1970-01-01
      • 2015-09-05
      • 1970-01-01
      相关资源
      最近更新 更多