Главная PHP Скрипты UCOZ Joomla jQuery CSS WordPress Поддержка старых ссылок J1.0 на J1.5 - Форум Регистрация Вход
[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
Поддержка старых ссылок J1.0 на J1.5
eXeSДата: Среда, 11.11.2009, 18:41 | Сообщение # 1
Легенда
Группа: Администраторы
Сообщений: 273
Репутация: 120
Статус: Offline
Обновление ветки J1.0 на J.15 на практике не так просто как кажется, com_migrator конечно транслирует базу и решает большую часть вопросов. Сами материалы переносятся однозначно, с пунктами меню уже сложнее -
во первых не все компоненты переезжают,
во вторых некоторые пункты меню com_content из j1.0 в принципе не поддерживаются в j1.5: например блог категорий в j1.0 мог объединить сразу несколько категорий, в j1.5 в блоге может быть только одна категория или секция.

Если переносится старый сайт, то возникает вопрос - как быть с ссылками на сайт. С внутренними ссылками можно бороться в ручную - долго муторно, заменой по шаблону в дампе базы, но поменять их все, но что делать со ссылками из вне.

Почему-то не многие интересуются этой темой, хотя со времени появления 1.5 прошло достаточно времени, что бы начать перенос сайтов.

Предлагаю разобраться по шагам.

Какие варианты ссылок у нас есть:
1. ссылки на com_content
2. ссылки на com_другие

а. ссылки с выключенным sef

Code
/index.php?option=com_content&task=blogcategory&id=xx&Itemid=yy&limit=a&limitstart=b
/index.php?option=com_virtuemart&page=shop.browse&category_id=xx&Itemid=yy

b. ссылки с включенным sef
Code
/content/blogcategory/xx/yy/
/component/option,com_virtuemart/page,shop.browse/category_id,xx/Itemid,yy/

Что имеется в арсенале для борьбы с этим:
1. com_migrator + plg_backlink + таблица #__migration_backlinks
2. файл .htaccess
3. php файлы компонентов
1. Плагин BackLink
Плагин BackLink, наверное самый простой вариант. Хоть про него ничего толком не описано ( как например тут - http://joomlaforum.ru/index.php/topic,71818.0.html ), но суть в ясна - он должен при совпадении введенного адреса с одним из пунктов списка (#__migration_backlinks) перести браузер на правильный адрес. У меня com_migrator заполняет только те колонки, которые относятся к j1.0, т.е. правильного адреса он не дает. Вероятно колонку ссылок на сайте j1.5 надо заполнить самому и включить плагин.
Минусы:
1. ссылок может быть очень много, устанешь забивать или пропустишь что-то.
2. плагин увеличивает нагрузку на сервер, добавляя минимум 1 запрос к базе.
3. Как его заставить работать не понятно, (у меня с ходу не получилось )

2. .htaccess
Редактирование .htaccess это немного шаманство. Разобраться с регулярными выражениями - настоящая задача
Но думаю, что это самый перспективный путь - дает минимальную нагрузку на сервер. С ссылками com_content можно расправится почти одним махом.
Конечно не одним, но вот как можно сделать:
Ссылки стандартного SEF
Даже com_content имеет несколько вариантов SEF ссылок

Code
/content/blogcategory/1/4/  - блог категории с id=1 и itemid=4
/content/blogcategory/0/29/ - блог нескольких категории и itemid=29
/content/category/1/19/51 - список категории id=19 в секции=1 в меню itemid=51
/content/view/491/29/ - материал id=491 в меню itemid=29

С каждым вариантом надо разбираться по своему. Начну с последнего:
Код:
Code
RewriteRule ^content/view/([1-9]{1}|[0-9]{2,5})/([0-9]*)/ /index.php?option=com_content&view=article&id=$1&Itemid=$2 [L,R]

Эта правило перенаправляет браузер с site.ru/content/view/491/29/ на site.ru/index.php?option=com_content&view=article&id=491&Itemid=29
в строке адреса не показывается категория и псевдоним материала, но это не смертельно, главное выводится весь материал. Если сохранился пункт меню, то он станет активным.
Code
RewriteRule ^content/category/([0-9]*)/([1-9]{1}|[0-9]{2,4})/([0-9]*)/ /index.php?option=com_content&view=category&id=$2&Itemid=$3 [L,R]

Перенаправляет браузер с site.ru/content/category/1/19/51/ на site.ru/index.php?option=com_content&view=category&id=19&Itemid=51
Показывает список материалов категории.
Критично наличие той же категории с тем же id, а иначе выпадет ошибка, ну и пункт меню тоже хорошо бы иметь тот же
Код:
Code

RewriteRule ^content/blogcategory/([1-9]{1}|[0-9]{2,4})/([0-9]*)/ /index.php?option=com_content&view=category&layout=blog&id=$1&Itemid=$2 [L,R]

перенаправляет браузер с site.ru/content/blogcategory/1/29/ на site.ru/index.php?option=com_content&view=category&layout=blog&id=1&Itemid=29
Показывает блог материалов категории.
Критично наличие той же категории с тем же id, а иначе выпадет ошибка, ну и пункт меню с тем же itemid не помешает, но не обязателен. Если же блог собирал материалы с нескольких категорий, то восстановить работоспособность таких ссылок я пока не смог.
Для не SEF ссылок
Code
RewriteCond %{QUERY_STRING} option=com_content&task=view&id=([0-9]*)&Itemid=([0-9]*)
RewriteRule index\.php$ /index.php?option=com_content&view=article&id=%1&Itemid=%2 [L,R]

с
http://site/index.php?option=com_content&task=view&id=414&Itemid=51
на
http://site/index.php?option=com_content&view=article&id=414&Itemid=51
просмотр материала
Code
RewriteCond %{QUERY_STRING} option=com_content&task=category§ionid=([0-9]*)&id=([0-9]*)&Itemid=([0-9]*)
RewriteRule index\.php$ /index.php?option=com_content&view=category&id=%2&Itemid=%3 [L,R]

с /index.php?option=com_content&task=category§ionid=1&id=19&Itemid=51
на /index.php?option=com_content&view=category&id=19&Itemid=51
просмотр списка материалов категории
Code
RewriteCond %{QUERY_STRING} option=com_content&task=blogcategory&id=([1-9]{1}|[0-9]{2,4})&Itemid=([0-9]*)
RewriteRule index\.php$ /index.php?option=com_content&view=category&layout=blog&id=%1&Itemid=%2 [L,R]

с /index.php?option=com_content&task=blogcategory&id=17&Itemid=43
на /index.php?option=com_content&view=category&layout=blog&id=17&Itemid=43
просмотр блога материалов категории

Еще раз: поскольку для блога и списка категорий в j1.0 можно задать id=0, то эта ситуация вызовет ошибку в j1.5, впрочем ошибка будет при вызове любого несуществующего id category.

Минусы этого способа:
перенаправление происходит без использования SEF j1.5

3. Скрипт PHP
Можно так: сделать файл redirect.php и в .htaccess добавить перенаправление на него по шаблону, а в файле сделать скрипт, который будет подбирать нужные варианты ссылок и перенаправлять браузер, куда следует.
redirect.php

Code
<?php  
$url = isset($_REQUEST['url']) ? $_REQUEST['url'] : '';  
// обработка url и подбор по шаблону
header("Location: $url");  
...
}  
?>

Минусы:
Дополнительная (но меньшая, чем в работе plg_backlink) нагрузка на сервер
Плюсы: можно организовать перенаправление адресов в системе SEF J1.5
 
  • Страница 1 из 1
  • 1
Поиск:

Партнеры Инф. о пользователях сайта: Статистика сайта
Барселона-фк.Ру

  • EXES - Администратор
  • timyrkz - Администратор
  • kr1d - Проверенный(Бывший Адимнистратор)
  • Rambler's Top100

     Все права защищены. © 2026
    Хостинг от uCoz