Структура 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()

Другие вопросы по тегам