我尝试使用TYPO3的DataHandler数据结构(使用TYPO3 v7测试)创建嵌套记录结构。但是,关系不会按预期创建。请考虑以下数据结构:
$data = array(
'sys_category' =>
array(
'NEW_1' =>
array(
'title' => 'Category 1',
'pid' => $pid,
),
'NEW_2' =>
array(
'title' => 'Category 3',
'pid' => $pid,
),
'NEW_3' =>
array(
'title' => 'Category 2',
'pid' => $pid,
),
'NEW_4' =>
array(
'title' => 'Category 1.1',
'pid' => $pid,
'parent' => 'NEW_1',
),
'NEW_5' =>
array(
'title' => 'Category 1.2',
'pid' => $pid,
'parent' => 'NEW_1',
),
'NEW_6' =>
array(
'title' => 'Category 3.1',
'pid' => $pid,
'parent' => 'NEW_2',
),
),
);
这在数据库中给出了以下结果:
uid title parent
1 Category 1 0
2 Category 3 0
3 Category 2 0
4 Category 1.1 0
5 Category 1.2 0
6 Category 3.1 0
注意" 0"所有"父母的价值"领域。为什么" NEW _ *"值不会被解释为"父母"在数据结构中设置的字段?
答案 0 :(得分:1)
如上述评论中所述,情况在TYPO3 6.2和7.6之间发生了变化。区别在于\TYPO3\CMS\Core\DataHandling\DataHandler::processRemapStack()
。从TYPO3 7.6开始,它会检查" NEW *"占位符包含低破折号(_
)。如果是,则占位符在该字符上拆分,并且字符串的第一部分被视为相关的表名。
这是以前的变化,低速冲刺没有特殊含义。实际上,文档提到了使用低速划线的示例。
因此,只需从所有占位符中删除低速划线,上述代码就可以正常工作。
答案 1 :(得分:0)
据我所知,只检查了pid值的“NEW”关键字。 但是你可以使用一些包含的钩子来启用“父”的分配。
编辑: 我指的是TYPO3 \ CMS \ Core \ DataHandling \ DataHandler :: process_datamap()