Ссылки в компоненте UserContent

Автор: anon
01.11.2009 12:46

Как-то понадобился компонент для Joomla, что выводит список всех материалов, написанных конкретным пользователем. Подходящий был обнаружен на joomlaforum, написал его SmokerMan, за что ему спасибо. К сожалению он требовал небольшой доработки - ссылки на материалы, им генерируемые были несколько неполными.
Выглядели они примерно так: http://example.com/component/content/article/58 (при включенном htaccess и SEO), когда истинный адрес статьи http://example.com/component/content/article/4-category-name/58-article-name или же вообще другой (если статья определена в каком-либо меню Joomla.
Для того чтобы ссылки выглядели нормально пришлось внести несколько исправлений (возможно SmokerMan включит их в официальную версию)

  • В файле models/usercontent.php заменить строчки:
    $query = ' SELECT a.*, s.title as sectiontitle, c.title as cattitle, ' .
             ' u.name AS author, u.usertype, g.name AS groups, u.email as author_email '.    
             ' FROM #__content AS a ' .
             ' LEFT JOIN #__sections AS s ON s.id = a.sectionid' .
             ' LEFT JOIN #__categories AS c ON c.id = a.catid' .
             ' LEFT JOIN #__users AS u ON u.id = a.created_by' .
             ' LEFT JOIN #__groups AS g ON a.access = g.id'.
             $where. 
             $orderby;
    на
    $query = ' SELECT a.*, s.title as sectiontitle, c.title as cattitle, ' .
             ' u.name AS author, u.usertype, g.name AS groups, u.email as author_email, '.
             ' CASE WHEN CHAR_LENGTH(a.alias) THEN CONCAT_WS(":", a.id, a.alias) ELSE a.id END as slug, '.
             ' CASE WHEN CHAR_LENGTH(c.alias) THEN CONCAT_WS(":", c.id, c.alias) ELSE c.id END as catslug '.
             ' FROM #__content AS a ' .
             ' LEFT JOIN #__sections AS s ON s.id = a.sectionid' .
             ' LEFT JOIN #__categories AS c ON c.id = a.catid' .
             ' LEFT JOIN #__users AS u ON u.id = a.created_by' .
             ' LEFT JOIN #__groups AS g ON a.access = g.id'.
             $where. 
             $orderby;
  • В файле views/usercontent/view.html.php: заменить
    JRoute::_(ContentHelperRoute::getArticleRoute($item->id, $item->catid, $item->sectionid));
    на
    JRoute::_(ContentHelperRoute::getArticleRoute($item->slug, $item->catslug, $item->sectionid));
    во всех местах где это встречается (на всякий случай;)

Как оно получилось можете посмотреть на примере Codesex'а: вот список статей, написанных мной, как видите выглядит он вполне замечательно и ссылки красивые. И статьи просто отличные, да.

Tags:

Обновлено 01.11.2009 13:29

 

Добавить комментарий


Защитный код
Обновить