1

我只是想用一个新的文本字段“版权”来扩展 sys_file_reference 表,这只是普通的 extbase 方式。像魅力一样工作,现场出现。但是当我使用 sys_file_reference 关系保存记录时,它不会添加引用。保存后它只是空的......无论记录是具有常规媒体字段的页面还是我的自定义扩展之一都没有关系。有人知道我错过了什么吗?

非常感谢您的帮助!

三氯乙酸:

$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;
    }
}

排版:

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
        }
    }
}
4

2 回答 2

2

问题是,如果没有填写新字段“版权”,它会尝试将值保存为 NULL。但是 SQL 定义不允许 NULL。

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

CREATE TABLE sys_file_reference (
  copyright TINYTEXT,
);

我知道这很简单……

于 2017-05-31T12:27:48.423 回答
0

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

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

在您的整个系统中,Extbase FileReference 将被您的 FileReference 替换。因此,我认为有关每个 FileReference 的重要信息不会存储到 DB,因为您的“覆盖”模型缺少很多 Setters / Getters,因为您的模型仅扩展了 AbstractEntity。

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

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

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

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

于 2017-05-30T16:44:03.957 回答