Back to NomenuRules class

Method build

public void
build
(mixed &$query, mixed &$segments)
Build a menu-less URL
Parameters
  • array & $query The vars that should be converted
  • array & $segments The URL segments to create
Returns
  • void
Since
  • 3.4
Class: NomenuRules
Project: Joomla

Method build - Source code

/**
 * Build a menu-less URL
 *
 * @param   array  &$query     The vars that should be converted
 * @param   array  &$segments  The URL segments to create
 *
 * @return  void
 *
 * @since   3.4
 */
public function build(&$query, &$segments)
{
    $menu_found = false;
    if (isset($query['Itemid'])) {
        $item = $this->router->menu->getItem($query['Itemid']);
        if (!isset($query['option']) || $item && isset($item->query['option']) && $item->query['option'] === $query['option']) {
            $menu_found = true;
        }
    }
    if (!$menu_found && isset($query['view'])) {
        $views = $this->router->getViews();
        if (isset($views[$query['view']])) {
            $view = $views[$query['view']];
            $segments[] = $query['view'];
            if ($view->key && isset($query[$view->key])) {
                if (\is_callable(array($this->router, 'get' . ucfirst($view->name) . 'Segment'))) {
                    $result = \call_user_func_array(array($this->router, 'get' . ucfirst($view->name) . 'Segment'), array($query[$view->key], $query));
                    if ($view->nestable) {
                        array_pop($result);
                        while (count($result)) {
                            $segments[] = str_replace(':', '-', array_pop($result));
                        }
                    } else {
                        $segments[] = str_replace(':', '-', array_pop($result));
                    }
                } else {
                    $segments[] = str_replace(':', '-', $query[$view->key]);
                }
                unset($query[$views[$query['view']]->key]);
            }
            unset($query['view']);
        }
    }
}