PDA

Просмотр полной версии : Изменить TCA fe_users


brd
08.10.2012, 13:55
Пишу такой код в своем TCA:
$TCA['fe_users']['columns']['telephone']['config']['type'] = 'select';
$TCA['fe_users']['columns']['telephone']['config']['foreign_table'] = 'tx_contacts_main';
а это поле так и остается input!! Не пойму в чем ошибка, может fe_users нельзя изменять TCA?

dmartynenko
10.10.2012, 15:31
Изменить можно все.
Почему может у вас не получаться:
1. Там где ваш код не объявлена глобальная переменная $TCA
2. Ваш код подключается до загрузки $TCA для fe_users

brd
10.10.2012, 16:03
Изменить можно все.
Почему может у вас не получаться:
1. Там где ваш код не объявлена глобальная переменная $TCA
2. Ваш код подключается до загрузки $TCA для fe_users
Если я правильно понял то по первому предложению, 1. Там где ваш код не объявлена глобальная переменная $TCA, - $GLOBALS['TCA'] ['fe_users']['columns']['telephone']['config']['type'] = 'select';
Я такой код прописывал в собственном ext в tca.php, но оно не работает, через админку Настройки->$TCA(область настройки таблиц) показывает что все присвоено верно т.е. ['fe_users']['columns']['telephone']['config']['type'] = 'select'; но всё равно когда захожу в пользователей там input, а не selectbox.

brd
10.10.2012, 16:09
2. Ваш код подключается до загрузки $TCA для fe_users
- А как это можно проследить что за чем прогружаетса?

dmartynenko
10.10.2012, 16:23
- А как это можно проследить что за чем прогружаетса?

Просто поищите по названию поля/таблицы все вхождения в typo3conf/temp_CACHED_xxxxxx_ext_tables.php

dmartynenko
10.10.2012, 16:27
Может у вас еще что-то не задано для select? Поэтому ядро и не понимает, а выводить что-то по дефолту (просто поле).

Вы можете кикстартером сделать экст, который добавляет ваше собственное поле в fe_users нужного вам типа. И посмотрите как и что он сгенерит для этого. А потом можете повторить то же самое на существующем поле.

brd
10.10.2012, 16:32
Спасибо за то что направили в нужное русло все получилось.
Все таки проблема была в :
1. $GLOBALS['TCA'] – это первый мой вывод;
2. Нужно было ее обновлять не в myext/tca.php, a myext/ext_tables.php
Вот как все выгладить в коде:
global $GLOBALS;
t3lib_div::loadTCA('fe_users');
$GLOBALS['TCA']['fe_users']['columns']['telephone']['config']['type'] = 'select';
$GLOBALS['TCA']['fe_users']['columns']['telephone']['config']['foreign_table'] = 'tx_contacts_main';

СПАСИБО!!!!!

brd
10.10.2012, 16:43
Но тут логически просто для понимания всей картины возникает вопрос:
1. В чём разница между $GLOBALS['TCA'] ['fe_users']['columns']['telephone']['config']['type'] = 'select'; и просто $TCA['fe_users']['columns']['telephone']['config']['type'] = 'select';. Какая разница между $GLOBALS['TCA'] и $TCA.
2. И почему я прописывал для других расширений $TCA['таблица]['columns']['поле']['config']['type'] = 'select'; - в файле myext/tca.php и оно работало, а в данном случае нужно было прописать в myext/ext_tables.php, да еще и вот так GLOBALS['TCA'] ['fe_users']['columns']['telephone']['config']['type'] = 'select';
Прошу если кто сталкивался объясните пожалуйста, хочу понять СПС

dmartynenko
10.10.2012, 17:32
Если вы в начале своего кода объявите global $TCA; то разницы никакой. В таком случае переменная с локальной видимостью $TCA становиться ссылкой на $GLOBALS['TCA']. По умолчанию переменная $TCA (и ей подобные) не объявлены.

Что касается порядка. Возможно (это мое предположение!) сначала все xxx/tca.php подключаются, потом все xxx/ext_tables.php. Если оказывается что ваш экст подключается после изменяемого, то изменение сработает через любой файл. А если до - то только через ext_tables.php

brd
10.10.2012, 17:54
Если вы в начале своего кода объявите global $TCA; то разницы никакой. В таком случае переменная с локальной видимостью $TCA становиться ссылкой на $GLOBALS['TCA']. По умолчанию переменная $TCA (и ей подобные) не объявлены.
про писал в начале файла tca.php
global $TCA;
$TCA['fe_users']['columns']['telephone']['config']['type'] = 'select';
$TCA['fe_users']['columns']['telephone']['config']['foreign_table'] = 'tx_contacts_main'; и оно не работате, или я чет не так понял с вашего объяснения?