Решено! Генерация SEF ссылок используя sh404sef из админки

Тема в разделе "Joomla и SEF (ЧПУ)", создана пользователем woojin, 07.03.2015.

?

пригодилось

  1. да :)

    6 голосов
    85.7%
  2. нет :(

    1 голосов
    14.3%
  1. woojin
    Offline

    woojin Местный Команда форума

    Регистрация:
    31.05.2009
    Сообщения:
    3 209
    Симпатии:
    335
    Пол:
    Мужской
    всем привет:gratitude:
    была поставлена задача по генерации SEF ссылок для YML файла:gratitude:
    долго мучился...|H|
    в конце концов было найдено решение (с|:)спасибо @OlegM случайно наткнулся
    jArticle.php - joom-article-abstraction - A abstract class for Joomla)
    были взяты три функции и подпилиныдоделаны заточены для правильной работы
    собственно, пользуйтесь - не обляпайтесь B)
    Код (PHP):
    1. function _joomlaSefUrlFromRoute($link) {
    2.         require_once(JPATH_SITE . DS . 'components' . DS . 'com_content' . DS . 'helpers' . DS . 'route.php');
    3.         $siteURL = substr(JURI::root(), 0, -1);
    4.         if (JPATH_BASE == JPATH_ADMINISTRATOR) {
    5.             // In the back end we need to set the application to the site app instead
    6.             JFactory::$application = JApplication::getInstance('site');
    7.         }
    8.  
    9.         $isSh404SefExtensionEnabled = JComponentHelper::isEnabled('com_sh404sef', true);
    10.         if ($isSh404SefExtensionEnabled && JPATH_BASE == JPATH_ADMINISTRATOR) {
    11.             $this->_initSh404SefUrls();
    12.         }
    13.  
    14.         $productSlug = $link->productSlug;
    15.         $catSlug = $link->productCatSlug;
    16.  
    17. //        $articleRoute = JRoute::_(ContentHelperRoute::getArticleRoute($articleSlug, $catSlug));
    18.         $jhr = JoomlakassaHelperRoute::getProductRoute($productSlug, $catSlug); // сюда надо ставить роутер нужного компонента в моём случае это была JoomlaKassa
    19.         $linkRoute = JRoute::_($jhr); // получили почти готовую SEF ссылку
    20.  
    21.         $sefURI = str_replace(JURI::base(true), '', $linkRoute);
    22.         if (JPATH_BASE == JPATH_ADMINISTRATOR) {
    23.             $siteURL = str_replace($siteURL . DS . 'administrator', '', $siteURL);
    24.             JFactory::$application = JApplication::getInstance('administrator');
    25.         }
    26.         $sefURL = $siteURL . $sefURI;
    27.         return $sefURL;
    28.     }
    29.  
    30.     function _initSh404SefUrls() {
    31.         $app = JFactory::getApplication();
    32.         require_once(JPATH_ADMINISTRATOR . DS . 'components' . DS . 'com_sh404sef' . DS . 'sh404sef.class.php');
    33.  
    34.        // что бы $sefConfig не пересоздавался, определяем как STATIC
    35.         static $sefConfig;
    36.         if (!isset($sefConfig)) {
    37.             $sefConfig = Sh404sefFactory::getConfig();
    38.         }
    39.  
    40.         // hook to be able to install other SEF extension plugins
    41.         Sh404sefHelperExtplugins::loadInstallAdapters();
    42.  
    43.         // another hook to allow other SEF extensions language file to be loaded
    44.         Sh404sefHelperExtplugins::loadLanguageFiles();
    45.  
    46.         if (!$sefConfig->Enabled) {
    47.             // go away if not enabled
    48.             return;
    49.         }
    50.         $joomlaRouter = $app->getRouter();
    51.  
    52.        // что бы $pageInfo не пересоздавался, определяем как STATIC
    53.         static $pageInfo;
    54.         if (!isset($pageInfo)) {
    55.             $pageInfo = Sh404sefFactory::getPageInfo();
    56.             $pageInfo->router = new Sh404sefClassRouter();
    57.             $joomlaRouter->attachParseRule(array($pageInfo->router, 'parseRule'));
    58.             $joomlaRouter->attachBuildRule(array($pageInfo->router, 'buildRule'));
    59.         }
    60.     }
    61.  
    62.    /**
    63.     * объект с полями Slug категории и Slug материала/продукта или ещё чего либо
    64.     * $link->productSlug = $product->id . ':' . $product->alias;
    65.     * $link->productCatSlug = $product->catid . ':' . $product->category_alias;
    66.     */
    67.     function url($link) {
    68.         return $this->_joomlaSefUrlFromRoute($link);
    69.     }


    P.S. весь прикол в том что если не внести мои изменения к функцию _initSh404SefUrls получится, что только первое добавление правил роутинга (две последние строки функции) сработает и будет получатся правильная SEF ссылка, а остальные правила будут пустыми и будут затирать созданные ссылки первыми правилами

    P.P.S. данный вариант был разработал для вставки в CLASS, но если убрать $this перед вызовом функций то можно вставлять в безCLASSовые файлы

    за сим, позвольте откланятся J:{
     
  2.  

Поделиться этой страницей

Загрузка...