Показать сообщение отдельно
Старый 08.03.2011, 04:38   #10
jettero
Senior Member
 
Регистрация: 24.06.2006
Сообщений: 143
По умолчанию

Цитата:
Сообщение от dmartynenko Посмотреть сообщение
Ну если вы хотите так углубиться, то typolink() является "оберткой" для $GLOBALS['TSFE']->tmpl->linkData()
typolink() нельзя назвать оберткой. Обертка это когда всю работу выполняет другая функция, которую мы вызываем с нужными параметрами. А если сравнить объем кода: linkData() - 85 строк, typolink() - 527 строк.

Эти функции находятся на разных слоях API. Каспер разрабатывал TYPO3 как фреймворк, а не как обычную CMS. И linkData() находится в t3lib директории, то есть это часть фреймворка. А typolink() в директории tslib, то есть это часть экстеншена СMS.

Все ссылки, которые генерятся через шаблоны, идут только через typolink(), и какое-либо расширение может через хуки в typolink() изменять вид ссылок. Поэтому, когда мы вызываем typolink() мы всегда знаем, что получаем самую "правильную" ссылку.

Ну и наконец вызывать linkData() просто неудобно - например нужно передавать не id страницы, а ее запись, то есть нужно будет самому делать запрос к БД, но это пол беды – нужно самому проверять, что у юзера есть доступ к этой странице, нужно проверить, что эта страница не shortcut, проверить, что там нет mount point и т.д. и т.п.
То есть придется самому написать половину из тех 500 строк в typolink()

PS Еще заметил, что у вас вызов неправильно написан:
PHP код:
$link $GLOBALS['TSFE']->tmpl->linkData($page_id''$GLOBALS['TSFE']->no_cache''''$params$type); 
там не $page_id, а массив $page.

Последний раз редактировалось jettero; 08.03.2011 в 04:54
jettero вне форума   Ответить с цитированием