Russian TYPO3 community

Russian TYPO3 community (http://forum.typo3.ru/index.php)
-   Разработка расширений / TYPO3 extension development (http://forum.typo3.ru/forumdisplay.php?f=38)
-   -   Изменить TCA fe_users (http://forum.typo3.ru/showthread.php?t=10335)

brd 08.10.2012 13:55

Изменить TCA fe_users
 
Пишу такой код в своем 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

Если я правильно понял Вас?
 
Цитата:

Сообщение от dmartynenko (Сообщение 34580)
Изменить можно все.
Почему может у вас не получаться:
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

А как это можно проследить что за чем прогружаетса?
 
Цитата:

Сообщение от dmartynenko (Сообщение 34580)
2. Ваш код подключается до загрузки $TCA для fe_users

- А как это можно проследить что за чем прогружаетса?

dmartynenko 10.10.2012 16:23

Цитата:

Сообщение от brd (Сообщение 34584)
- А как это можно проследить что за чем прогружаетса?

Просто поищите по названию поля/таблицы все вхождения в 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

Не работает
 
Цитата:

Сообщение от dmartynenko (Сообщение 34590)
Если вы в начале своего кода объявите 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';

и оно не работате, или я чет не так понял с вашего объяснения?


Часовой пояс GMT +4, время: 18:35.

Работает на vBulletin® версия 3.8.1.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot