TYPO3: установите PAGE_TSCONFIG_STR в TCA для foreign_table_where - PullRequest
0 голосов
/ 03 февраля 2019

В следующей конфигурации TCA я пытаюсь установить маркер PAGE_TSCONFIG_STR для foreign_table_where

конфигурации поля TCA:

'my_field' => [
    'exclude' => 1,
    'l10n_mode' => 'mergeIfNotBlank',
    'label' => 'The label',
    'config' => [
        'type' => 'select',
        'renderType' => 'selectMultipleSideBySide',
        'enableMultiSelectFilterTextfield' => true,
        'foreign_table' => 'tx_my_foreign_table',
        'foreign_table_where' => ' ###PAGE_TSCONFIG_STR### AND tx_my_foreign_table.deleted = 0 AND tx_my_foreign_table.hidden = 0 AND tx_my_foreign_table.sys_language_uid = ###REC_FIELD_sys_language_uid### ORDER BY tx_my_foreign_table.lastname ASC, tx_my_foreign_table.firstname ASC',
        'MM' => 'tx_my_table_mm',
        'size' => 10,
        'autoSizeMax' => 30,
        'maxitems' => 99,
    ],
],

Как только я установлю следующую страницу TSConfig, ябольше не получайте никаких иностранных записей:

TCEFORM.tx_table.my_field.PAGE_TSCONFIG_STR = AND tx_my_foreign_table.pid = 1

Это прекрасно работало в TYPO3 7, но перестало работать в TYPO3 8. Нужно ли что-то менять для TYPO3 8?

РЕДАКТИРОВАТЬ

Я сделал еще одну отладку и отследил эту проблему до класса TYPO3\CMS\Backend\Form\FormDataProvider\AbstractItemProvider в строке 1139. Здесь вы найдете следующий код:

$pageTsConfigString = $connection->quote($pageTsConfigString);

Thisприводит к 'AND tx_my_foreign_table.pid = 1' (с кавычками!), который сгенерирует это foreignTableClause - и это, конечно, неправильно из-за кавычек:

'AND tx_mdnewsauthor_domain_model_newsauthor.pid = 1' AND tx_my_foreign_table.deleted = 0 AND tx_my_foreign_table.hidden = 0 AND tx_my_foreign_table.sys_language_uid = 0 ORDER BY tx_my_foreign_table.lastname ASC, tx_my_foreign_table.firstname ASC

Теперь мои новые вопросы: это ошибка или я что-то делаюнеправильно?

1 Ответ

0 голосов
/ 04 февраля 2019

Не помещайте код SQL в TsConfig, поместите его в TCA.

'foreign_table_where' => ' AND ( ###PAGE_TSCONFIG_STR### = \'FALSE\' OR tx_my_foreign_table.pid = ###PAGE_TSCONFIG_STR### ) AND tx_my_foreign_table.deleted = 0 AND tx_my_foreign_table.hidden = 0 AND tx_my_foreign_table.sys_language_uid = ###REC_FIELD_sys_language_uid### ORDER BY tx_my_foreign_table.lastname ASC, tx_my_foreign_table.firstname ASC',

И

TCEFORM.tx_table.my_field.PAGE_TSCONFIG_STR = FALSE
...