TYPO3将复选框字段添加到模型中

时间:2017-06-20 07:56:45

标签: typo3

我有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方法必须如何?我必须使用什么对象,请告诉我

2 个答案:

答案 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)