扩展sys_file_reference(FAL)

时间:2016-09-26 16:23:56

标签: typo3 fal

我想用自己的字段扩展sys_file_reference。所以我创建了该领域和TCA。在后端,该字段可用,但我不能在我的流体模板中引用该字段。

ext_tables.php:

CREATE TABLE sys_file_reference (
 nofollow int(11) DEFAULT '0' NOT NULL,
);

Configuration / TCA / Overrides / sys_file_reference.php:

$tempColumns = array(
    'nofollow' => array(
        'exclude' => 1,
        'l10n_mode' => 'mergeIfNotBlank',
        'label' => 'Link als Nofollow?',
        'config' => array(
            'type' => 'check',
            'default' => '0'
        )
    )
);
TYPO3\CMS\Core\Utility\ExtensionManagementUtility::addTCAcolumns('sys_file_reference',$tempColumns,1);
TYPO3\CMS\Core\Utility\ExtensionManagementUtility::addFieldsToPalette('sys_file_reference', 'imageoverlayPalette','--linebreak--,nofollow','after:description');

到目前为止它在后端工作。

类别/域/型号/ MyFileReference.php

<?php
namespace LISARDO\Foerderland\Domain\Model;
use TYPO3\CMS\Extbase\Domain\Model\FileReference;

class MyFileReference extends FileReference {

    /**
     * nofollow
     *
     * @var integer
     */
    protected $nofollow;


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

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

在我的设置中:

config.tx_extbase.persistence.classes {
    LISARDO\Foerderland\Domain\Model\MyFileReference {
        mapping {
            tableName = sys_file_reference
        }
    }
}

在Fluid中我得到image.uid或者image.link但是image.nofollow总是空的。我错了什么?我认为映射不正确......

我得到了正确的答案并注意到我犯了一个错误并在某些方面解释错了。第一:它不是普通的extbase扩展,而只是一个自己的内容元素。所以我没有自己的扩展模型,我可以像Georg和Victor提出的那样注入实现。我只需要更改流畅的语法:{image.properties.nofollow}完成工作。

我认识到我不需要我的大部分代码:

  • Classes/Domain/Model/MyFileReference.php没有必要
  • config.tx_extbase.persistence.classes也不是必需的

只需要TCA代码,并且流畅的语法不同。

但是我无法弄清楚为什么这种语法有效并且正常的语法不行。

感谢所有答案!

3 个答案:

答案 0 :(得分:2)

您是否也引用了sys_file_reference实现?

所以,那可能看起来像那样

if np.array_equal(mask, green_mask):

答案 1 :(得分:2)

据我所知,您可以使用{image.properties.nofollow}访问自己的属性。

答案 2 :(得分:1)

您需要参考自定义实现。

要么像 Georg Ringer 在他的回答中建议的那样做,要么你可以在TS级替换这个类,如下:

plugin.tx_yourext {
    objects {
        TYPO3\CMS\Extbase\Domain\Model\FileReference {
            className = LISARDO\Foerderland\Domain\Model\MyFileReference
        }
    }
}

这将自动在所有属性中实例化MyFileReference而不是核心FileReference,这些属性引用它,还包括@injectObjectManager->get()来电。

如果您想在全局级别(包括所有插件,包括核心)执行此操作,您只需在上面的TS中将tx_yourext更改为tx_extbase