Логотип StingRay

Социальные сети
FacebookInstagramRSSTwitterYouTubeВ контактеОдноклассники
FacebookInstagramRSSTwitterYouTubeВ контактеОдноклассники
Силуэт человека

Несколько фокусов с CMS Joomla! Преобразование адресов сайта в дружественные (SEF) для внешних нужд


Преобразование адресов сайта в дружественные (SEF) для внешних нужд

Представьте себе, что есть некоторая задача, когда «страшные» адрес Joomla-сайта вида http://domain.zone/index.php?option=com_content&view=article&id=1:artalias&catid=2:catalias&Itemid=3 нужно преобразовать в «дружественные» (Search Engine Friendly, SEF) вида http://domain.zone/section/1-artalias не просто на самом этом сайте (это делается включением штатного SEF-модуля в настройках сайта), а где-то снаружи, на другом сайте (не обязательно на Joomla! даже).

Чтобы такая задача не казалась искусственной и выдуманной (я-то столкнулся с ней на практике!), я приведу пример: если у вас несколько связанных (Joomla-)сайтов, и вы хотите на одном из них (ну или на всех) осуществлять поиск сразу по всем сайтам – в этом случае механизм поиска может возвращать вам результаты поиска на «внешних» сайтах с адресами приведённого «страшного» вида, а правильно преобразовать их в «красивые» SEF-адреса может только сам сайт http://domain.zone/, точнее, его Joomla-движок, который знает свою структуру меню, категорий и материалов. Вот поэтому внешний относительно него механизм поиска, точнее, вывода результатов нуждается в преобразовании одних адресов в другие по запросу.

Реализация самого преобразования адресов для старенькой Joomla! 1.5 у меня работает такая:

/sef.php

// Инициализация Joomla! для отдельного PHP-файлаdefine('_JEXEC', 1);define('DS', DIRECTORY_SEPARATOR);define('JPATH_BASE', dirname(__FILE__));require_once(JPATH_BASE.DS.'includes'.DS.'defines.php');require_once(JPATH_BASE.DS.'includes'.DS.'framework.php');require_once(JPATH_BASE.DS.'components'.DS.'com_content'.DS.'helpers'.DS.'route.php');$mainframe = &JFactory::getApplication('site');$mainframe->initialise();$mainframe->route();// Получение «страшного» адреса из параметра url, его разбиение на части$url = $_GET['url'];$absolute_prefix = substr($url, 0, 23);$relative_url = substr($url, 24);if (substr($relative_url, 0, 4) == 'ndex') $relative_url = 'i'.$relative_url;// Извлечение из относительной части адреса параметров id, alias и catid$slug = substr($url, strpos($url, '&id=') + 4);$slug = substr($slug, 0, strpos($slug, '&'));$id = substr($slug, 0, strpos($slug, ':'));$alias = substr($slug, strpos($slug, ':') + 1);$catid = substr($relative_url, strpos($relative_url, '&catid=') + 7);$catid = substr($catid, 0, strpos($catid, ':'));// Преобразование «страшного» адреса в «красивый» SEF-адрес и его выводjimport('joomla.methods');$sef_url = $absolute_prefix.JRoute::_(ContentHelperRoute::getArticleRoute($id, $catid));if ((strpos($url, '&Itemid=') > 0) && (is_numeric(substr($sef_url, strrpos($sef_url, '/') + 1)))) $sef_url = $sef_url.'-'.$alias;echo $sef_url;

При этом использование результата работы этого PHP-сценария на внешнем сайте выглядит так:

$url = file_get_contents(substr($url, 0, n).'sef.php?url='.urlencode($url));
Добавьте свой комментарий или войдите, чтобы подписаться/отписаться.
OpenId
Предпросмотр
Улыбка Подмигивание Дразнит Оскал Смех Огорчение Сильное огорчение Шок Сумасшествие Равнодушие Молчание Крутизна Злость Бешенство Смущение Сожаление Влюблённость Ангел Демон Задумчивость Рука-лицо Не могу смотреть Жирный Курсив Подчёркивание Зачёркивание Размер шрифта Гиперссылка Цитата
Загрузка…