Russian TYPO3 community

Russian TYPO3 community (http://forum.typo3.ru/index.php)
-   Общие вопросы (http://forum.typo3.ru/forumdisplay.php?f=12)
-   -   расширение CoolURL (http://forum.typo3.ru/showthread.php?t=7939)

Никита 03.09.2009 14:27

Ну изначально мой магазин и существовал как отдельный модуль в каталоге shop/, и даже была административная панель, но этого всё-таки мало, поэтому я и решил связать его с typo3 для полного счастья.


Связал интернет-магазин с typo3 очень просто: взял расширение extendedshop и переписыл там все файлы под мой магазин, поэтому сейчас категории shop не существует и физически магазин находится в корне сайта, но фактически, конечно, он начинается со страницы shop, созданной правда в typo3.

В итоге всё прекрасно работает вместе с typo3, но ссылки некрасивые.
Изначально было два выхода:
1. попытаться всё-таки их переписать средствами typo3 или напрямую через mod_rewrite
2. Закачать папку с магазином в корень сайта и подключить шаблон, созданный в typo3 к магазину.
По-моему 1-ый вариант покрасивши...

dmartynenko 03.09.2009 15:23

Цитата:

Сообщение от Никита (Сообщение 25425)
В итоге всё прекрасно работает вместе с typo3, но ссылки некрасивые.

Если все работает - то вам осталось вместо функции генерации URL для товара в коде вашего магазина вызвать TYPO3 функцию typolink() с нужными параметрами. Или одну из функций pi_*Link* из класса pi_base, от которого наследуются все FE плагины для TYPO3.

Получите красивые ссылки при правильной настройке RealURL/CoolURI.

Никита 03.09.2009 16:02

Моя функция для генерации красивого URL для товара:
public static function ToProduct($productId)
{
/*Сейчас определяю внешний вид ссылки (беру из бд имя продукта, соответствующее его ProductID)*/
$link = self::CleanUrlText(Catalog::GetProductName($produc tId)) . '/';
return self::Build($link);
}
то есть мне особо не надо генерить ссылки - они уже есть или всё равно надо?

Вот моя функции для генерации простого URL для товара:
public static function ToProduct($productId)
{
return self::Build('?ProductId=' . $productId);
}
Наверное сюда надо прикрутить функцию typolink()? А каким образом? Просто заменить на typolink()? Расширение pagepath подключать надо? Можно примерчик? И потом надо обратно url поменять? С помощью .htaccess?

dmartynenko 03.09.2009 17:43

Такой вариант может сработать - генерить ссылки без TYPO3. TYPO3 при получении такого URL будет его парсить и заполнять соответствующие переменные в $_GET.

Если вы используете TYPO3 и для генерации - то получаете URL который будет правильно парситься. Иначе надо следующие нюансы.

Сейчас у вас index.php?ProductID=9 переводится в shop/product_name9/
Пусть у вас есть страница с алиасом shop - ее RealURL распознает. Но дальше ему надо понять что делать с product_name9. В конфиге для RealURL вы привели код:

Код:

'70' => array (
  'shop' => array (
      array(
        'GETvar' => 'ProductID',

Судя по всему 70 это uid страницы с алиасом shop.
Но дальше идет префикс shop за которым будет title товара, причем из-за 'spaceCharacter' => '-' он будет таким "product-name9". Сгенерированный URL получиться таким:
example.org/shop/shop/product-name9/

Он отличается от того, который вы передаете TYPO3 при помощи апачевского RewriteRule. Поэтому при парсинге возникнет ошибка, как вы приводили выше.

Экст pagepath можно использовать для генерации корректного URL - ему передаются параметры страница, и ваш ProductID и он вернет URL. Но это не быстрое решение. Быстрее работает если создать объект cObject и вызвать у него typolink. Посмотрите как это делается в том же pagepath.

У вас может получиться эмулировать корректный URL и не тратить дополнительное время на его генерацию через TYPO3. Но я не уверен что это сработает из-за подмены uid на title (lookUpTable). Возможно логика RealURL такова, что он именно при генерации запоминает соответствие uid и title и потом при парсинге его использует.

Никита 03.09.2009 17:59

Спасибо, буду пробовать.

Никита 03.09.2009 22:13

1. Значит я попробывал генерить ссылки без TYPO3, но безуспешно. Правильно ли я всё делаю: установил расширение realurl, сконфигурировал файл realurlconf.php, сгенерил правильные ссылки и прописал файл .htaccess ("RewriteRule shop/shop/product_name9/ index.php?ProductID=9")?


2. А если использовать typo3 для генерации URL, то что надо сделать? Установить экст pagepath, и прописать линки через функцию typolink() в моём файле, и всё? А где надо обратно перевести url, чтобы потом его обработать (в .htaccess)?

dmartynenko 04.09.2009 15:55

Цитата:

Сообщение от Никита (Сообщение 25436)
1. Значит я попробывал генерить ссылки без TYPO3, но безуспешно. Правильно ли я всё делаю: установил расширение realurl, сконфигурировал файл realurlconf.php, сгенерил правильные ссылки и прописал файл .htaccess ("RewriteRule shop/shop/product_name9/ index.php?ProductID=9")?

Я не телепат и не могу сказать какой URL получиться если генерировать его через TYPO3. Это зависит от настройки как TYPO3 так и RealURL. Поэтому правильный ли RewriteRule вы прописали я не знаю.

Цитата:

Сообщение от Никита (Сообщение 25436)
2. А если использовать typo3 для генерации URL, то что надо сделать? Установить экст pagepath, и прописать линки через функцию typolink() в моём файле, и всё? А где надо обратно перевести url, чтобы потом его обработать (в .htaccess)?

В документации к pagepath даже код приведен:
Код:

require_once(t3lib_extMgm::extPath('pagepath', 'class.tx_pagepath_api.php');
$parameters = array('PruductID' => 6);
$url = tx_pagepath_api::getPagePath($pageId, $parameters);

Через typolink быстрее будет работать. И возможно даже проще.
Я не видел код вашего плагина для TYPO3, но обычно обычно FE плагины наследуются от класса tslib_pibase, и тогда создание ссылки выглядит примерно так (typolink при этом вызывается внутри tslib_pibase):
Цитата:

$linkText = "Самый лучший продукт";
$urlParameters = array('ProductID' => $id);
$url = $this->pi_linkTP($linkText, $urlParameters);

Никита 07.09.2009 15:30

Спасибо огромное за помощь! С задачей справился!
В итоге остановился на cooluri. А красивые ссылки инсертю в таблицу для cooluri с помощюь триггера, как только пишу новый продукт сразу в соответствующей таблицы показывается url на него.

dmartynenko 07.09.2009 18:39

Цитата:

Сообщение от Никита (Сообщение 25491)
Спасибо огромное за помощь! С задачей справился!
В итоге остановился на cooluri. А красивые ссылки инсертю в таблицу для cooluri с помощюь триггера, как только пишу новый продукт сразу в соответствующей таблицы показывается url на него.

Самый простой и думаю самый эффективный способ.
По и самый "не TYPO3" способ :)

PS: Кстати обратите внимание, что эти таблицы могут очищатся при "полной очистке кэша TYPO3". Так что сделайте для надежности ежедневную процедуру по крону заполнения для всех товаров.


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

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