Fluidtypo3:使用自定义字段作为FCE的标题

时间:2015-11-25 12:57:34

标签: typo3 fluid flux

我不想在我的FCE中使用默认标头,而只使用自定义通量字段。在后端列表视图中,我的FCE显示为“[无标题]”,因为未填充默认标题。这会给编辑带来很多困惑。

如何在TYPO3后端列表视图等中定义一个自定义通量字段作为FCE的标题?

1 个答案:

答案 0 :(得分:1)

您不能只使用flexform中的字段,因为FCE中的所有字段都存储在数据库的同一字段中(pi_flexform)。

您可以做的是使用用户功能呈现内容元素标题。它在TCA配置中注册了这样的一行:

$GLOBALS['TCA']['tt_content']['ctrl']['label_userFunc'] = 'Vendor\\Extkey\\Utility\\ContentElementLabelRenderer->getContentElementTitle';

用户功能本身可能如下所示:

<?php
namespace Vendor\Extkey\Utility;

/**
 * This class renders a human readable title for FCEs,
 * so one is able to find a content element by its headline.
 */
class ContentElementLabelRenderer implements \TYPO3\CMS\Core\SingletonInterface {

    /**
     * @var \TYPO3\CMS\Extbase\Service\FlexFormService
     * @inject
     */
    protected $flexFormService = null;

    /**
     * Returns the content element title for a given content element
     */
    public function getContentElementTitle(&$params) {

        if (null === $this->flexFormService) {
            $this->flexFormService = \TYPO3\CMS\Core\Utility\GeneralUtility::makeInstance('TYPO3\\CMS\\Extbase\\Service\\FlexFormService');
        }

        if (ctype_digit($params['row']['uid']) && 'fluidcontent_content' === $params['row']['CType']) {

            // If this is a FCE, parse the flexform and template name and generate the 
            // title in a template specific way.
            $row = $params['row'];
            $additionalRowData = $GLOBALS['TYPO3_DB']->exec_SELECTgetSingleRow('pi_flexform, tx_fed_fcefile', 'tt_content', 'uid = ' . $row['uid']);
            $flexFormContent = $this->flexFormService->convertFlexFormContentToArray($additionalRowData['pi_flexform']);

            $lastColonPosition = strrpos($additionalRowData['tx_fed_fcefile'], ':');
            $contentElementType = (FALSE === $lastColonPosition) ? 'invalidtype' : substr($additionalRowData['tx_fed_fcefile'], $lastColonPosition + 1);
            switch ($contentElementType) {

                case 'Image.html':
                    $params['title'] = 'Image: "' . ($flexFormContent['title'] ?: $flexFormContent['subtitle']) . '"';
                    break;
                default:
                    $params['title'] = 'Unknown content element type';
                    break;
             }
        }
        else {
            // If this is not a FCEm, print out "normal"    
            // title. Not the real thing, but comes pretty close, hopefully.
            $params['title'] = $params['row']['header'] ?: ($params['row']['subheader'] ?: $params['row']['bodytext']);
        }
    }
}

这会产生维护问题:每次添加或更改内容元素时,都必须更新此文件。