Я хочу, чтобы пользователь мог указать ссылку на страницу. Поэтому используется группа. Пример основан на поле «related». Поскольку остальная часть структурирована не только для входа, пользователь также должен иметь возможность установить более одной ссылки. Обратный запрос не требуется.
Вот как я это делаю:
Здесь я загружаю поле ввода «ссылка»:
$TCA['tt_news'] = Array (
'ctrl' => $TCA['tt_news']['ctrl'],
'interface' => Array (
'showRecordFieldList' => 'title,hidden,datetime,starttime,archivedate,category,author,author_email,short,image,imagecaption,links,related,news_files,link'
),
Здесь я определяю поле «ссылка»
'link' => Array (
'label' => 'Link to another page',
'config' => Array (
'type' => 'group',
'internal_type' => 'db',
'allowed' => 'tt_news,pages',
'MM' => 'tt_news_link_mm',
'size' => '3',
'autoSizeMax' => 10,
'maxitems' => '200',
'minitems' => '0',
'show_thumbs' => '1',
'wizards' => array(
'suggest' => array(
'type' => 'suggest'
)
)
)
),
Я использовал поле «связанные» в качестве образца.
Здесь я определяю позицию в бэкэнде:
'types' => Array (
'0' => Array('showitem' =>
'hidden, type;;;;1-1-1,title;;;;2-2-2,short,bodytext;;2;richtext:rte_transform[flag=rte_enabled|mode=ts];4-4-4,
--div--;LLL:EXT:tt_news/locallang_tca.xml:tt_news.tabs.special, datetime;;;;2-2-2,archivedate,author;;3;; ;;;;2-2-2,
keywords;;;;2-2-2,sys_language_uid;;1;;3-3-3,
--div--;LLL:EXT:tt_news/locallang_tca.xml:tt_news.tabs.media, image;;;;1-1-1,imagecaption;;5;;,links;;;;2-2-2,news_files;;;;4-4-4,link;;;;3-3-3,
--div--;LLL:EXT:tt_news/locallang_tca.xml:tt_news.tabs.catAndRels, category;;;;3-3-3,related;;;;3-3-3,
--div--;LLL:EXT:tt_news/locallang_tca.xml:tt_news.tabs.access, starttime,endtime,fe_group,editlock,
--div--;LLL:EXT:tt_news/locallang_tca.xml:tt_news.tabs.extended,
'),
Теперь поле отображается так, как ожидалось. Я могу выбрать страницу, и она появляется в списке выбора. В поле в таблице tt_news
значение меняется только с 0 на 1. Также в таблице tt_news_related_mm
появилась запись. Я достиг этого, используя отдельную таблицу.
CREATE TABLE `tt_news_link_mm` (
`uid_local` int(11) NOT NULL default '0',
`uid_foreign` int(11) NOT NULL default '0',
`sorting` int(11) NOT NULL default '0',
`tablenames` varchar(255) NOT NULL default '',
KEY `uid_local` (`uid_local`),
KEY `uid_foreign` (`uid_foreign`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
Не хватает только одного: как преобразовать идентификатор страницы в говорящий URL?
Теперь мне это удалось с помощью cascaval:
$typolink_conf = array(
"title" => $title,
"ATagParams" =>'',
"no_cache" => 0,
"parameter" => $data['uid'],
"useCacheHash" => 1
);
$link = $this->cObj->typolink('linkname', $typolink_conf);
typolink
классаtslib_pibase
. - person tmt   schedule 11.01.2012