PDA

Просмотр полной версии : Новое поле для tt_news в TCA


Anlov
19.03.2012, 14:45
всем - привет.
надо добавить четыре новых select/option поля из tt_address в одну из закладок tt_news.

это я добавил в tca.php tt_news
'partner1' => array (
'exclude' => 1,
'label' => 'Partner 1',
'config' => array (
'type' => 'select',
'items' => Array (
array(
'',
0
),
),
'foreign_table' => 'tt_address',
'foreign_table_where' => 'ORDER BY tt_address.last_name',
'size' => 1,
'minitems' => 0,
'maxitems' => 1,
)
),
'partner2' => array (
'exclude' => 1,
'label' => 'Partner 2',
'config' => array (
'type' => 'select',
'items' => Array (
array(
'',
0
),
),
'foreign_table' => 'tt_address',
'foreign_table_where' => 'ORDER BY tt_address.last_name',
'size' => 1,
'minitems' => 0,
'maxitems' => 1,
)
),
'auftraggeber1' => array (
'exclude' => 1,
'label' => 'Auftraggeber 1',
'config' => array (
'type' => 'select',
'items' => Array (
array(
'',
0
),
),
'foreign_table' => 'tt_address',
'foreign_table_where' => 'ORDER BY tt_address.last_name',
'size' => 1,
'minitems' => 0,
'maxitems' => 1,
)
),
'auftraggeber2' => array (
'exclude' => 1,
'label' => 'Auftraggeber 2',
'config' => array (
'type' => 'select',
'items' => Array (
array(
'',
0
),
),
'foreign_table' => 'tt_address',
'foreign_table_where' => 'ORDER BY tt_address.last_name',
'size' => 1,
'minitems' => 0,
'maxitems' => 1,
)
),

это - в class.tx_ttnews.php
$markerArray['###PARTNER1###'] = $row['partner1'];
$markerArray['###PARTNER2###'] = $row['partner2'];
$markerArray['###AUFTRAGGEBER1###'] = $row['auftraggeber1'];
$markerArray['###AUFTRAGGEBER2###'] = $row['auftraggeber2'];

и это - в tt_news_v3_template.html
###PARTNER1###
###PARTNER2###
###AUFTRAGGEBER1###
###AUFTRAGGEBER2###

на закладке tt_news общие появились четыре select поля, в которых я могу выбрать имена! из tt_address.

выбираю, сохраняю новость. на странице появляется не имя из tt_address, которое я вижу в select-списке, а uid! а мне-то нужно именно имя!

хелп!

dmartynenko
20.03.2012, 13:48
Было бы странно если бы увидели что-то другое.

Вообще-то вы идёте неправильным путем. Лезть в код чужого экста - значит терять возможность обновить его при необходимости на свежую версию (кстати tt_news на днях дорос до версии 3.2).

Обычно для расширения TCA создается свой экст, в котором добавляется поле в sql + TCA сторонней таблицы. А для добавления новых маркеров в tt_news используется, например, экст ttnewsgenericmarkers. И потом магия TS (пример мой, но ваш будет похож):


# настрока своих маркеров
plugin.tt_news.genericmarkers {
# используем в маркерах нижеперечисленные поля из записи tt_news
data = uid,tx_ttnewspublisher_source

# создаем значение для маркера ###PUBLISHER_LINK###
publisher_link = COA
publisher_link {
# поле generic_tx_ttnewspublisher_source содержит значение
# поля tt_news.tx_ttnewspublisher_source
stdWrap.fieldRequired = generic_tx_ttnewspublisher_source
stdWrap.dataWrap = <div class="news-single-publisher"><span class="label">{LLL:EXT:ttnews_publisher/locallang_db.xml:tx_ttnewspublisher_label}</span>&nbsp;|</div>

# выборка из таблицы tx_ttnewspublisher_sources записи по uid
# из tt_news.tx_ttnewspublisher_source и создание ссылки из
# tx_ttnewspublisher_sources.publisher_name и tx_ttnewspublisher_sources.website
10 = RECORDS
10 {
tables = tx_ttnewspublisher_sources
source.field = generic_tx_ttnewspublisher_source

conf.tx_ttnewspublisher_sources = TEXT
conf.tx_ttnewspublisher_sources {
field = publisher_name
typolink.parameter.data = field:website
}
}
}
}


PS: Если вы все же хотите пойти своим путем, то вместо = $row['partner1'] используйте обращение к БД для выборки названия (нужного поля) по uid которых сохранен в = $row['partner1'].

Anlov
20.03.2012, 20:35
спасибо.
понятно, что было бы лучше свое расширение написать. но так как это будет мое первое расширение - сколько времени я на него убью? а заказчику, как обычно надо "вчера"...
а сделать надо было так:
в class.tx_ttnews.php вместо $markerArray['###PARTNER1###'] = $row['partner1']; надо было написать $partner1 = t3lib_BEfunc::getRecord('tt_address', $row['partner1']);
$markerArray['###PARTNER1###'] = $partner1['name'];
то есть используя Typo3 API, достать потом из tt_address записи, соответствующие сохраненным в поле tt_news.partner1 номерам.
но свой экс, конечно, было бы правильнее.

dmartynenko
20.03.2012, 20:46
спасибо.
понятно, что было бы лучше свое расширение написать. но так как это будет мое первое расширение - сколько времени я на него убью?

Не более 5 минут - в кикстартере выбираете "добавить поле в чужую таблицу", выбираете таблице tt_news, задаете тип поля, подписи и т.п. Сохраняете сгенерированный код расширения и устанавливаете его. Это все.

Anlov
21.03.2012, 14:23
а чуть поподробнее? блин, правда нет времени глубоко копать.

dmartynenko
21.03.2012, 14:34
Да куда уж подробнее? Скриншот что-ли?

Попробуйте, если хоть раз пользовались кикстартером то у вас сразу получиться.

http://i39.tinypic.com/34y2ttw.png

Anlov
22.03.2012, 15:36
ни разу не пользовался. и найти чего-то почитать тоже не могу. не подскажете ссылку на доку, как с помощью кикстартера писать расширения?

dmartynenko
22.03.2012, 15:49
Доку не подскажу, но тут все довольно очевидно.

Устанавливаете экст. kickstarter. В экст. менеджере в выпадающем списке появляется пункт "Create new extension" (не знаю, может и локализация для kickstarter есть). Попадаете в интерфейс как на скриншоте.

Там задается конфигурация практически по всем возможностям плагинов для TYPO3 (языки для локализации, таблицы, FE модули, BE модули). И потом в "Total form" вы можете то что указали сохранить как экст (папка с файлами). Фактически полноценно создается только TCA для таблиц и полей. Остальное только как каркас (файлы плагинов и модулей которые вам нужно наполнить своим PHP кодом, пустые файлы TS шаблонов).

Anlov
22.03.2012, 17:52
буду пробовать, спасибо.

antony
06.04.2012, 17:09
Пытаюсь добавить новое поля в шаблон новостей с помощью Kickstarter wizard, ничего не получается. В итоге ничего не отображается, Как сделать так чтобы при добавлении ностей можно было помимо стандартных полей вывести и какой-нибудь второй заголовок?

dmartynenko
06.04.2012, 17:20
Kickstarter вам может помочь только добавить поле в таблицу tt_news.
Что бы вывести что-то дополнительное в шаблон (а под таким словом обычно имеется в виду HTML шаблон) нужны дополнительные действия, например использование genericmarkers (описано выше).

antony
06.04.2012, 17:24
можно как-то детально расписать процесс добавления нового поля для tt_news?

dmartynenko
06.04.2012, 17:30
А в этой ветке выше что во вашему?

antony
06.04.2012, 17:39
Выше добавлялись четыре новых select/option. Мне нужно добавить одно поле field стринговое. Синтаксис изменится, я не могу понять какой он будет и не испорчу ли ве в существующем сайте? Можете описать по шагам, если не трудно?

dmartynenko
06.04.2012, 18:00
Значит у вас код для вывода вашего поля будет проще:

plugin.tt_news.genericmarkers {
data = tx_myext_fieldX

my_field = TEXT
my_field.field = tx_myext_fieldX
}


Маркер для HTML шаблона ###MY_FIELD###

antony
06.04.2012, 18:03
Правильно я понимаю, этот кусок кода вставляем в tca.php tt_news:
lugin.tt_news.genericmarkers {
data = tx_myext_fieldX

my_field = TEXT
my_field.field = tx_myext_fieldX
}
а этот
Маркер для HTML шаблона ###MY_FIELD###
в class.tx_ttnews.php? этого будет достаточно? а правки в базе?

dmartynenko
06.04.2012, 18:13
Нет, не правильно понимаете. Прочитайте еще раз ветку с начала. Посмотрите документацию экста ttnewsgenericmarkers.

1. Поле добавляется установкой своего экста, который доабвляет поле в таблицу tt_news и он же определяет конфигурацию поля. Экст создается через кистартер.
2. Приведенный код добавляется в TS шаблон (или по вашему он похож на PHP код?)
3. Маркер добавляется в HTML шаблон для tt_news.

В коде экста tt_news никаких правок не делается.

ms9
12.04.2012, 17:37
Обычно для расширения TCA создается свой экст, в котором добавляется поле в sql + TCA сторонней таблицы. А для добавления новых маркеров в tt_news используется, например, экст ttnewsgenericmarkers.


Очень помогли, спасибо!