Использование ЧПУ в своих компонентах, как?

0 Пользователей и 1 Гость просматривают эту тему.
  • 4 Ответов
  • 335 Просмотров
*

sesil

  • Осваиваюсь на форуме
  • ***
  • 41
  • 0
  • Учусь!
Добрый день, проблема заключается в следующем, есть сторонний компонент написанный мною, при открытии нужной страницы URL имеет следующий вид "index.php?option=com_characters&view=readmore&id=1", вопрос! как можно взаимодействовать со встроенным функционалом Joomla 3 и выше что бы URL был таким "index.php/characters/readmore/podrobnaya-informatsiya-ob-fishkakh"? Пробовал пользоваться гуглом но толкового не чего не нашел. может кто сталкивался с подобным вопрос или знает что нибудь.

*

robert

  • Профи
  • ********
  • 4006
  • 371
Если сами написали свой компонент, то вам не составит труда написать свой роутер.
  • Не будь паразитом, сделай что-нибудь самостоятельно!
  • В личке и по Skype не даю советов.

*

sesil

  • Осваиваюсь на форуме
  • ***
  • 41
  • 0
  • Учусь!
Собственно да. уже разобрался. Есть функция которая должна находится в роутере компонента.

Код: php
function CharacterschipsBuildRoute(&$query) {
    $segments = array();

    if (isset($query['task'])) {
        $segments[] = implode('/', explode('.', $query['task']));
        unset($query['task']);
    }
    if (isset($query['view'])) {
        $segments[] = $query['view'];
        unset($query['view']);
    }
    if (isset($query['id'])) {
        $segments[] = $query['id'];
        unset($query['id']);
    }

    return $segments;
}

*

sesil

  • Осваиваюсь на форуме
  • ***
  • 41
  • 0
  • Учусь!
Код: php
function CharacterschipsParseRoute($segments) {
    $vars = array();

    // view is always the first element of the array
    $vars['view'] = array_shift($segments);

    while (!empty($segments)) {
        $segment = array_pop($segments);
        if (is_numeric($segment)) {
            $vars['id'] = $segment;
        } else {
            $vars['task'] = $vars['view'] . '.' . $segment;
        }
    }

    return $vars;
}

*

b2z

  • Support Team
  • *****
  • 7452
  • 741
  • Разраблю понемногу
Если пишете под тройку, то роутер должен быть классом, который extends JComponentRouterBase:
Код: php
class CharacterschipsRouter extends JComponentRouterBase

В нем реализуете
Код: php
public function build(&$query)
public function parse(&$segments)

смотрите /components/com_content/router.php