Typo3 foreign_table & foreign_table_where в TCA - PullRequest
6 голосов
/ 16 марта 2012

Я борюсь со следующей проблемой.

У меня есть две таблицы базы данных: «Книги» и «Категория».Я получаю все данные из «книг» -таблицы через Sysfolder в Backends List-view для редактирования, сортировки и управления ими.

То, что я хотел бы получить, это то, что в этом списке будет также название категории, к которой относится книга.

В таблице «Книги» есть поле иностранных-key "category_id", определяющий, к какой категории относится Книга.Я пытался через это "category_id" получить название категории в виде списка книг.

Когда я определяю в TCA['books'], что category_id похоже на:

'category_id' => array (        
            'exclude' => 0,     
            'label' => 'Cat name',      
            'config' => array (
                'type'     => 'select',
                'foreign_table' => 'category',
                'foreign_table_where' => 'AND category.id=###REC_FIELD_category_id###',
                'eval'     => 'int',
                'checkbox' => '0',
                'default' => 0
            )
        ),

он соединяет Книги и Категории, используя category_id (в Таблице книг) и uid (в Таблице категорий).

Не хотелось бы, чтобы он соединял их, используя category_id (в Книгах-table) и id (в таблице категорий).Этот идентификатор является идентификатором категории и может отличаться от идентификатора uid.

Я что-то не так делаю или Typo3 каким-то образом автоматически устанавливает это "соединение" с внешними таблицами uid.?Есть ли способ получить его так, как я хотел бы?

Ответы [ 2 ]

3 голосов
/ 16 марта 2012

Боюсь, невозможно указать другой внешний ключ. Так что, если кто-то не докажет, что я неправ, вот обходной путь, который я бы использовал.

itemsProcFunc типа select позволяет полностью переопределить элементы в меню и, таким образом, создать другое отношение.

  1. Создайте дополнительный класс, который будет загружен только в бэкэнд и будет иметь метод, который будет вызываться в itemsProcFunc:

    yourMethod($PA, $fobj)

  2. Создайте метод для загрузки всех категорий, которые вы хотите иметь, в поле SELECT и установите их в $PA['items'], полностью переопределив его так, чтобы он представлял собой массив массивов, где ключом 0 является заголовок элемента и 1 ключ - это идентификатор категории, который вы хотите. См items в выберите .

    $PA['items'] = array(array($title, $id, ''));

  3. Включить класс в ext_tables.php :

    if(TYPO3_MODE == 'BE') require_once(t3lib_extMgm::extPath($_EXTKEY).'class.YOUR_CLASS.php');

  4. Установить конфигурацию для поля категории в таблице книг:

    'itemsProcFunc' => 'tx_YOUR_CLASS->yourMethod',

0 голосов
/ 23 января 2015

В дополнение к великолепному ответу cascaval: @cascaval: Вы не против указать на select.items в Typo3TCA в ссылках select?Текущие ссылки не являются прямыми.

http://docs.typo3.org/typo3cms/TCAReference/singlehtml/#columns-select-properties-items

(нет разрешения комментировать ваш ответ, поэтому пришлось самому отвечать только за эту ссылку ... странно)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...