Russian TYPO3 community Форум больше не используется. Присоединяйтесь к каналу #community-ru в Slack for TYPO3 community  

Вернуться   Russian TYPO3 community > Обсуждение общих технических вопросов > Общие вопросы

Ответ
 
Опции темы Опции просмотра
Старый 05.03.2011, 15:16   #1
jettero
Senior Member
 
Регистрация: 24.06.2006
Сообщений: 143
По умолчанию

Цитата:
Сообщение от dmartynenko Посмотреть сообщение
Если ли бы вы делали ваш код, как типичный плагин наследуемый от класса tslib_pibase, то в нем есть ряд функций для генерации ссылок:

PHP код:
function pi_getPageLink($id,$target='',$urlParameters=array())
function 
pi_linkToPage($str,$id,$target='',$urlParameters=array())
function 
pi_linkTP($str,$urlParameters=array(),$cache=0,$altPageId=0
Они в свою очередь являются обертками для функции класса tslib_cObj - getTypoLink_URL() и getTypoLink().
а getTypoLink_URL() и getTypoLink() в свою очередь обертки для typolink()
поэтому самый быстрый способ получить ссылку:
PHP код:
$url $this->cObj->typolink(
    
'',
    array(
        
'parameter' => $id,
        
'returnLast' => 'url',
    )
); 
jettero вне форума   Ответить с цитированием
Старый 06.03.2011, 18:25   #2
dmartynenko
Senior Member
 
Аватар для dmartynenko
 
Регистрация: 20.07.2007
Адрес: Беларусь, Минск
Сообщений: 957
Отправить сообщение для dmartynenko с помощью ICQ
По умолчанию

Ну если вы хотите так углубиться, то typolink() является "оберткой" для $GLOBALS['TSFE']->tmpl->linkData()

"Быстрый" в вашем примере понятие весьма условное. Так как скорость генерации ссылки будет одинакова - накладные расходы на обертки во много-много раз меньше, чем время генерации ссылки через linkData(). А вот удобство и читаемость кода ухудшаються. И банально можно опечататься в названии передаваемых переменных и потом долго искать причину, почему же нет ссылки.
dmartynenko вне форума   Ответить с цитированием
Старый 08.03.2011, 04:38   #3
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 вне форума   Ответить с цитированием
Старый 09.03.2011, 03:27   #4
Valery Romanchev
Administrator
 
Аватар для Valery Romanchev
 
Регистрация: 23.08.2003
Адрес: Moscow, Russia
Сообщений: 1,926
Отправить сообщение для Valery Romanchev с помощью Skype™
По умолчанию

На эту тему есть экстеншен pagepath, который для генерации URL вызывает FE (конечно, не весь, а только нужную часть)
http://typo3.org/documentation/docum....1.6/view/1/2/
__________________
Веб-студия ТТЛАБ
www.ttlab.ru
Valery Romanchev вне форума   Ответить с цитированием
Старый 09.03.2011, 13:56   #5
dmartynenko
Senior Member
 
Аватар для dmartynenko
 
Регистрация: 20.07.2007
Адрес: Беларусь, Минск
Сообщений: 957
Отправить сообщение для dmartynenko с помощью ICQ
По умолчанию

jettero, вы все правильно написали.

Но я написал решение для конкретного вопроса.
Цитата:
Вопрос только в том, как имея uid страницы в моем кое получить ссылку на эту страницу в правильном виде, а не index.php?id=1 и т.д.
И не предлагал сделать свою замену typolink() через linkData().
dmartynenko вне форума   Ответить с цитированием
Ответ


Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB code is Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход


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


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

Хостинг и техническая поддержка: TYPO3 Лаборатория