我有TYPO3版本7.6.18。我添加了兴趣' int字段到fe_users表。
我的TCA:
'interest' => [
'exclude' => 1,
'label' => 'Interest',
'config' => [
'type' => 'check',
'default' => '0',
'items' => [
['Mann', 0 ],
['Frau', 1],
['Paar', 2]
]
]
],
请帮帮我。我必须建模,用户可以在他的个人资料中设置兴趣检查弓吗? getter和setter方法必须如何?我必须使用什么对象,请告诉我
答案 0 :(得分:3)
自TYPO3 stores multiple checkboxes as a single integer value bitmask以来,这有点棘手。因此,如果您想使用它,在某些时候您需要再次拆分这个组合值。顺便说一句,您的复选框值未使用,因为TYPO3会自动将所有复选框存储为位1或0,具体取决于是否选中它们。
一个简单的解决方案是将此值映射到模型中的integer
,然后为每个可能的值提供getter:
/**
* @var integer
*/
protected $interests;
/**
* @return bool
*/
public function isInterestedInMen()
{
return $this->interests & 0b00000001;
}
/**
* @return bool
*/
public function isInterestedInWomen()
{
return $this->interests & 0b00000010;
}
/**
* @return bool
*/
public function isInterestedInPairs()
{
return $this->interests & 0b00000100;
}
然后,您可以在Extbase中使用$object->isInterestedInPairs()
或在Fluid中使用{object.interestedInPairs}
。
以下是如何实施制定者的示例:
/**
* @var integer
*/
protected $interests;
/**
* @param bool
*/
public function setInterestedInMen($interestedInMen)
{
if ($interestedInMen) {
$this->interests |= 0b00000001;
} else {
$this->interests &= ~0b00000001;
}
}
要写入这些内容,例如通过Fluid表格,您只需使用<f:form.checkbox property="interestedInMen" value="1" />
。
但是你可以看到这很快变得笨拙并且很难理解,因此我建议为利益创建一个单独的表格和模型,然后可以在后端轻松维护或者至少切换到{ {3}}字段并使用字符串值,然后在本地存储为CSV。然后,可以将其映射到模型中的string
,并通过explode()
传递以获取单独的值。但同样,我建议查看单独的表/模型和关系方法。
答案 1 :(得分:1)
在这里你可以找到一个扩展TYPO3的FileReference的例子。行为几乎是一样的。在您的情况下,它只是FrontendUser而不是FileReference:Extending sys_file_reference (FAL)