扩展 sys_file_reference (FAL)
Extending sys_file_reference (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');
到目前为止它在后端工作。
Classes/Domain/Model/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 提议的实现。我只需要更改 fluid 中的语法:{image.properties.nofollow} 就可以了。
而且我认识到我不需要我的大部分代码:
Classes/Domain/Model/MyFileReference.php
没有必要
config.tx_extbase.persistence.classes
也没有必要
只需要 TCA 代码和不同的语法。
但我无法弄清楚为什么这种语法有效而普通语法无效。
谢谢大家的回答!
您是否也在引用您的 sys_file_reference 实施?
所以,这可能看起来像那样
/**
*
* @var \TYPO3\CMS\Extbase\Persistence\ObjectStorage<\LISARDO\Foerderland\Domain\Model\MyFileReference>
* @lazy
*/
protected $media;
据我所知,您可以使用 {image.properties.nofollow}
.
在流体中访问您自己的属性
您需要参考您的自定义实现。
像 Georg Ringer 在他的回答中建议的那样,或者您可以在 TS 级别替换 class,如下所示:
plugin.tx_yourext {
objects {
TYPO3\CMS\Extbase\Domain\Model\FileReference {
className = LISARDO\Foerderland\Domain\Model\MyFileReference
}
}
}
这将在引用它的所有属性中自动实例化 MyFileReference
而不是核心的 FileReference
,还包括 @inject
和 ObjectManager->get()
调用。
如果你想在全局级别(对于所有插件,包括核心)进行,你可以在上面的 TS 中将 tx_yourext
更改为 tx_extbase
。
我想用自己的字段扩展 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');
到目前为止它在后端工作。
Classes/Domain/Model/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 提议的实现。我只需要更改 fluid 中的语法:{image.properties.nofollow} 就可以了。
而且我认识到我不需要我的大部分代码:
Classes/Domain/Model/MyFileReference.php
没有必要config.tx_extbase.persistence.classes
也没有必要
只需要 TCA 代码和不同的语法。
但我无法弄清楚为什么这种语法有效而普通语法无效。
谢谢大家的回答!
您是否也在引用您的 sys_file_reference 实施?
所以,这可能看起来像那样
/**
*
* @var \TYPO3\CMS\Extbase\Persistence\ObjectStorage<\LISARDO\Foerderland\Domain\Model\MyFileReference>
* @lazy
*/
protected $media;
据我所知,您可以使用 {image.properties.nofollow}
.
您需要参考您的自定义实现。
像 Georg Ringer 在他的回答中建议的那样,或者您可以在 TS 级别替换 class,如下所示:
plugin.tx_yourext {
objects {
TYPO3\CMS\Extbase\Domain\Model\FileReference {
className = LISARDO\Foerderland\Domain\Model\MyFileReference
}
}
}
这将在引用它的所有属性中自动实例化 MyFileReference
而不是核心的 FileReference
,还包括 @inject
和 ObjectManager->get()
调用。
如果你想在全局级别(对于所有插件,包括核心)进行,你可以在上面的 TS 中将 tx_yourext
更改为 tx_extbase
。