![]() |
расширение CoolURL
Здравствуйте, я установил расширение coolurl, подключил свой магазин к typo3, в итоге адреса страниц правильно и красиво переписываются, а вот продукты нет (http://www.localhost/shop/?productID=4, хотелось бы вот так: http://www.localhost/shop/product_name/). В модуле coolurl можно для одного продукта переписать, а можно ли как-нибудь установить правило, чтобы для всех сразу?
|
Каким образом вы свой магазин подключили?
И RealURL и Cooluri могут заменить productID=хх на название продукта, если вы им укажите какую-либо таблицу из базы TYPO3 и на что заменять ID. Т.е. таблица как минимум должна содержать uid и какое-нибудь поле title, и быть зарегистрирована в TYPO3 (т.е. создана каким-либо установленным в системе экстеншеном). |
Цитата:
|
Я сделал своё расширение, таблица с uid (у меня product_id) и title естественно есть, так где можно установить правила подмены url. Файл для ссылок уже есть.
|
Читайте документацию по Cooluri. Там должно быть все подробно расписано. Я могу дать готовый пример только для RealURL.
Цитата:
Вы еще не сказали как именно вы встроили магазин? Что бы преобразовать обычный УРЛ в красивый ЧПУ действительно нужно задействовать логику TYPO3 через вызов функции typolink. Для родных экстеншенов это работает как говорят "out of box". Для "неродных" можно использовать http://typo3.org/extensions/reposito...epath/current/ Но еще нужно преобразовать УРЛ обратно - если ваш магазин совсем никак не связан с TYPO3 и ему вместо productID=4 будет передано http://www.localhost/shop/product_name/ что он будет с этим делать? |
Спасибо. Давайте пример для realurl, пожалуйста.
|
В файл конфигурации typo3conf/realurl_conf.php
в блок postVarSets вставляете что-то вроде: Код:
... http://localhost/shop/tovar/zubnaya-schetka/ shop - алиас для страницы 123 с магазином tovar - префикс для распознавания что дальше будет идти код товара zubnaya-schetka - значение поля title из вашей таблицы tx_moymagazin_tovary для указанного ID |
СПасибо, разберусь.
|
Установил расширение realurl, для обычных страниц работает, а для продуктов - нет.
Хотел бы обратить Ваше внимание на следующие моменты. 1. В моём собственном интернет-магазине все ссылки изначально "красивые", поэтому я не нуждаюсь в использовании функции typolink(), правильно, она нужна только для переписывания ссылки - из динамической в статическую? 2. Обратно переписываю ссылки с помощью директивы в файле .htaccess: "RewriteRule shop/product_name9/ index.php?ProductID=9" 3. В файл realconf.php или real_conf.php вставляю строки: 'postVarSets' => array( '_DEFAULT' => array( //begin of product code '70' => array ( 'shop' => array ( array( 'GETvar' => 'ProductID', 'lookUpTable' => array( 'table' => 'product', 'id_field' => 'product_id', 'alias_field' => 'name', 'addWhereClause' => ' AND NOT (deleted OR hidden)', 'useUniqueCache' => 1, 'useUniqueCache_conf' => array( 'strtolower' => 1, 'spaceCharacter' => '-', ), ), ), ), ), //end of product code //---------------------------------------------------------------- // news archive parameters 'archive' => array( array( 'GETvar' => 'tx_ttnews[year]' , В итоге на странице http://www.localhost/shop/product_name9/ надпись: Error! Reason: "shop/name/" could not be found, closest page matching is shop/ Что же всё-таки я неправильно делаю? Заранее спасибо. |
Цитата:
Если вас магазин установлен в отдельном каталоге с именем /shop/, то TYPO3 вообще не будет вызываться - будет вызываться например /shop/index.php и делать все что ему нужно... Далее судя по вашему RewriteRule вы не даете TYPO3 ничего делать по генерации URL (да и файлов realconf.php или real_conf.php не существует, есть только typo3conf/realurl_conf.php). Поэтому получая указанный URL RealURL и TYPO3 пытаются с ним разобраться и честно вам пишут, что страница shop/ найдена в дереве страниц, а дальше не понятно что с вашим URL делать. Третий раз задаю вам вопрос - как вы подключили ваш магазин к TYPO3? Тогда и решение можно будет предложить по существу, а не предлагать вам то что совершенно не нужно. |
Ну изначально мой магазин и существовал как отдельный модуль в каталоге shop/, и даже была административная панель, но этого всё-таки мало, поэтому я и решил связать его с typo3 для полного счастья.
Связал интернет-магазин с typo3 очень просто: взял расширение extendedshop и переписыл там все файлы под мой магазин, поэтому сейчас категории shop не существует и физически магазин находится в корне сайта, но фактически, конечно, он начинается со страницы shop, созданной правда в typo3. В итоге всё прекрасно работает вместе с typo3, но ссылки некрасивые. Изначально было два выхода: 1. попытаться всё-таки их переписать средствами typo3 или напрямую через mod_rewrite 2. Закачать папку с магазином в корень сайта и подключить шаблон, созданный в typo3 к магазину. По-моему 1-ый вариант покрасивши... |
Цитата:
Получите красивые ссылки при правильной настройке RealURL/CoolURI. |
Моя функция для генерации красивого 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? |
Такой вариант может сработать - генерить ссылки без TYPO3. TYPO3 при получении такого URL будет его парсить и заполнять соответствующие переменные в $_GET.
Если вы используете TYPO3 и для генерации - то получаете URL который будет правильно парситься. Иначе надо следующие нюансы. Сейчас у вас index.php?ProductID=9 переводится в shop/product_name9/ Пусть у вас есть страница с алиасом shop - ее RealURL распознает. Но дальше ему надо понять что делать с product_name9. В конфиге для RealURL вы привели код: Код:
'70' => array ( Но дальше идет префикс 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 и потом при парсинге его использует. |
Спасибо, буду пробовать.
|
1. Значит я попробывал генерить ссылки без TYPO3, но безуспешно. Правильно ли я всё делаю: установил расширение realurl, сконфигурировал файл realurlconf.php, сгенерил правильные ссылки и прописал файл .htaccess ("RewriteRule shop/shop/product_name9/ index.php?ProductID=9")?
2. А если использовать typo3 для генерации URL, то что надо сделать? Установить экст pagepath, и прописать линки через функцию typolink() в моём файле, и всё? А где надо обратно перевести url, чтобы потом его обработать (в .htaccess)? |
Цитата:
Цитата:
Код:
require_once(t3lib_extMgm::extPath('pagepath', 'class.tx_pagepath_api.php'); Я не видел код вашего плагина для TYPO3, но обычно обычно FE плагины наследуются от класса tslib_pibase, и тогда создание ссылки выглядит примерно так (typolink при этом вызывается внутри tslib_pibase): Цитата:
|
Спасибо огромное за помощь! С задачей справился!
В итоге остановился на cooluri. А красивые ссылки инсертю в таблицу для cooluri с помощюь триггера, как только пишу новый продукт сразу в соответствующей таблицы показывается url на него. |
Цитата:
По и самый "не TYPO3" способ :) PS: Кстати обратите внимание, что эти таблицы могут очищатся при "полной очистке кэша TYPO3". Так что сделайте для надежности ежедневную процедуру по крону заполнения для всех товаров. |
Часовой пояс GMT +4, время: 18:11. |
Работает на vBulletin® версия 3.8.1.
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Перевод: zCarot