Просмотр полной версии : Новое поле для tt_news в TCA
всем - привет.
надо добавить четыре новых 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> |</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'].
спасибо.
понятно, что было бы лучше свое расширение написать. но так как это будет мое первое расширение - сколько времени я на него убью? а заказчику, как обычно надо "вчера"...
а сделать надо было так:
в 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, задаете тип поля, подписи и т.п. Сохраняете сгенерированный код расширения и устанавливаете его. Это все.
а чуть поподробнее? блин, правда нет времени глубоко копать.
dmartynenko
21.03.2012, 14:34
Да куда уж подробнее? Скриншот что-ли?
Попробуйте, если хоть раз пользовались кикстартером то у вас сразу получиться.
http://i39.tinypic.com/34y2ttw.png
ни разу не пользовался. и найти чего-то почитать тоже не могу. не подскажете ссылку на доку, как с помощью кикстартера писать расширения?
dmartynenko
22.03.2012, 15:49
Доку не подскажу, но тут все довольно очевидно. 
Устанавливаете экст. kickstarter. В экст. менеджере в выпадающем списке появляется пункт "Create new extension" (не знаю, может и локализация для kickstarter есть). Попадаете в интерфейс как на скриншоте.
Там задается конфигурация практически по всем возможностям плагинов для TYPO3 (языки для локализации, таблицы, FE модули, BE модули). И потом в "Total form" вы можете то что указали сохранить как экст (папка с файлами). Фактически полноценно создается только TCA для таблиц и полей. Остальное только как каркас (файлы плагинов и модулей которые вам нужно наполнить своим PHP кодом, пустые файлы TS шаблонов).
Пытаюсь добавить новое поля в шаблон новостей с помощью Kickstarter wizard, ничего не получается. В итоге ничего не отображается, Как сделать так чтобы при добавлении ностей можно было помимо стандартных полей вывести и какой-нибудь второй заголовок?
dmartynenko
06.04.2012, 17:20
Kickstarter вам может помочь только добавить поле в таблицу tt_news. 
Что бы вывести что-то дополнительное в шаблон (а под таким словом обычно имеется в виду HTML шаблон) нужны дополнительные действия, например использование genericmarkers (описано выше).
можно как-то детально расписать процесс добавления нового поля для tt_news?
dmartynenko
06.04.2012, 17:30
А в этой ветке выше что во вашему?
Выше добавлялись четыре новых 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###
Правильно я понимаю, этот кусок кода вставляем в 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 никаких правок не делается.
Обычно для расширения TCA создается свой экст, в котором добавляется поле в sql + TCA сторонней таблицы. А для добавления новых маркеров в tt_news используется, например, экст ttnewsgenericmarkers.
Очень помогли, спасибо!
Работает на vBulletin® версия 3.8.1. Copyright ©2000-2025, Jelsoft Enterprises Ltd. Перевод: zCarot