Структура DataHandler для создания отношений родительских / дочерних записей
Я пытаюсь создать вложенные структуры записей, используя структуры данных 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_*" не интерпретируются для "родительских" полей, установленных в структуре данных?
2 ответа
Как упомянуто в комментарии выше, ситуация изменилась между TYPO3 6.2 и 7.6. Разница заключается в \TYPO3\CMS\Core\DataHandling\DataHandler::processRemapStack()
, Начиная с TYPO3 7.6, он проверяет, содержат ли заполнители "NEW*" низкую черту (_
). Если да, то местозаполнитель разделяется на этот символ, и первая часть строки считается именем связанной таблицы.
Это изменение по сравнению с предыдущим, где низкая черта не имела особого значения. Действительно, в документации упоминаются примеры с использованием низкой черты.
Таким образом, приведенный выше код отлично работает, просто удаляя низкую черту из всех заполнителей.
Насколько я вижу, только pid-значение проверяется на ключевое слово "NEW". Но вы также можете использовать некоторые из включенных хуков для включения присваивания для "родителя".
РЕДАКТИРОВАТЬ: я имею в виду TYPO3\CMS\Core\DataHandling\DataHandler::process_datamap()