TYPO3:使用新文本字段扩展FAL sys_file_reference

时间:2017-05-30 14:42:47

标签: typo3 extbase fal

我只是尝试使用新的文本字段“copyright”扩展sys_file_reference表,只是普通的extbase方式。工作就像一个魅力,现场出现。但是当我使用sys_file_reference关系保存记录时,它不会添加引用。保存后它只是空的...如果记录是具有常规媒体字段的页面或者它是我的自定义扩展名之一,则无关紧要。有人知道我错过了什么吗?

非常感谢您的帮助!

TCA:

$fileReferenceColumns = [
'copyright' => [
    'exclude' => true,
    'label' => $ll . 'sys_file_reference.copyright',
    'config' => [
        'type' => 'input',
        'size' => 20,
        'max' => 255,
        'eval' => 'null',
        'default' => null,
    ]
]];

\TYPO3\CMS\Core\Utility\ExtensionManagementUtility::addTCAcolumns('sys_file_reference', $fileReferenceColumns);
\TYPO3\CMS\Core\Utility\ExtensionManagementUtility::addFieldsToPalette(
    'sys_file_reference',
    'imageoverlayPalette',
    'copyright'
);

SQL:

CREATE TABLE sys_file_reference (
  copyright VARCHAR(255) DEFAULT ''          NOT NULL,
);

型号:

class FileReference extends AbstractEntity
{

    /**
     * uid of a sys_file
     *
     * @var integer
     */
    protected $originalFileIdentifier;

    /**
     * @var \TYPO3\CMS\Extbase\Domain\Model\File
     */
    protected $file;

    /**
     * @var string
     */
    protected $copyright;

    /**
     * setOriginalResource
     *
     * @param \TYPO3\CMS\Core\Resource\FileReference $originalResource
     * @return void
     */
    public function setOriginalResource(\TYPO3\CMS\Core\Resource\FileReference $originalResource)
    {
        $this->originalResource = $originalResource;
        $this->originalFileIdentifier = (int)$originalResource->getOriginalFile()->getUid();
    }

    /**
     * @return \TYPO3\CMS\Extbase\Domain\Model\File
     */
    public function getFile()
    {
        return $this->file;
    }

    /**
     * @param \TYPO3\CMS\Extbase\Domain\Model\File $file
     */
    public function setFile($file)
    {
        $this->file = $file;
        $this->originalFileIdentifier = $file->getUid();
    }

    /**
     * @return string
     */
    public function getCopyright()
    {
        return $this->copyright;
    }

    /**
     * @param string $copyright
     */
    public function setCopyright($copyright)
    {
        $this->copyright = $copyright;
    }
}

的TypoScript:

config.tx_extbase {
    persistence {
        classes {
            Interlutions\ItlGallery\Domain\Model\FileReference {
                mapping {
                    tableName = sys_file_reference
                    columns {
                        uid_local.mapOnProperty = originalFileIdentifier
                        uid_local.mapOnProperty = file
                        votes.mapOnProperty = votes
                    }
                }
            }
        }

        objects {
            TYPO3\CMS\Extbase\Domain\Model\FileReference.className = Interlutions\ItlGallery\Domain\Model\FileReference
        }
    }
}

2 个答案:

答案 0 :(得分:1)

问题是,如果新领域" copyright"没有填写,它试图将值保存为NULL。但是SQL定义不允许使用NULL。

所以将SQL定义更改为例如以下工作(查看sys_file_reference标题和描述的字段定义):

CREATE TABLE sys_file_reference (
  copyright TINYTEXT,
);

我知道这很简单...

答案 1 :(得分:0)

嘿,欢迎来到Stackoverflow :-)我想你的所有引用都会丢失,因为你完全"替换"原始的FileReference对象使用:

config.tx_extbase.objects.TYPO3\CMS\Extbase\Domain\Model\FileReference.className = Interlutions\ItlGallery\Domain\Model\FileReference

在整个系统中,Extbase FileReference将替换为您的FileReference。因此,我认为关于每个FileReference的重要信息都不会存储到DB,因为你的"覆盖" -model缺少很多Setters / Getters,因为你的模型只扩展了AbstractEntity。

请尝试扩展现有的FileReference - 这可能会解决问题:

class FileReference extends \TYPO3\CMS\Extbase\Domain\Model\FileReference

请注意,使用config.tx_extbase.objects覆盖类可能会导致其他扩展名中断。您可以考虑使用plugin.tx_yourextension.objects覆盖您的扩展程序。 通过使用file.properties.copyright,例如在Fluid模板中,您的新字段无论如何都可以访问默认的FileReference。

另一件事:由于您需要版权字段,此扩展程序也是如此:https://typo3.org/extensions/repository/view/tgm_copyright