joomla_test/components/com_finder/router.php
2020-01-02 22:20:31 +07:00

111 lines
2.5 KiB
PHP

<?php
/**
* @package Joomla.Site
* @subpackage com_finder
*
* @copyright Copyright (C) 2005 - 2013 Open Source Matters, Inc. All rights reserved.
* @license GNU General Public License version 2 or later; see LICENSE
*/
defined('_JEXEC') or die;
/**
* Method to build a SEF route.
*
* @param array &$query An array of route variables.
*
* @return array An array of route segments.
*
* @since 2.5
*/
function FinderBuildRoute(&$query)
{
static $menu;
$segments = array();
// Load the menu if necessary.
if (!$menu)
{
$menu = JFactory::getApplication('site')->getMenu();
}
/*
* First, handle menu item routes first. When the menu system builds a
* route, it only provides the option and the menu item id. We don't have
* to do anything to these routes.
*/
if (count($query) === 2 && isset($query['Itemid']) && isset($query['option']))
{
return $segments;
}
/*
* Next, handle a route with a supplied menu item id. All system generated
* routes should fall into this group. We can assume that the menu item id
* is the best possible match for the query but we need to go through and
* see which variables we can eliminate from the route query string because
* they are present in the menu item route already.
*/
if (!empty($query['Itemid']))
{
// Get the menu item.
$item = $menu->getItem($query['Itemid']);
// Check if the view matches.
if ($item && @$item->query['view'] === @$query['view'])
{
unset($query['view']);
}
// Check if the search query filter matches.
if ($item && @$item->query['f'] === @$query['f'])
{
unset($query['f']);
}
// Check if the search query string matches.
if ($item && @$item->query['q'] === @$query['q'])
{
unset($query['q']);
}
return $segments;
}
/*
* Lastly, handle a route with no menu item id. Fortunately, we only need
* to deal with the view as the other route variables are supposed to stay
* in the query string.
*/
if (isset($query['view']))
{
// Add the view to the segments.
$segments[] = $query['view'];
unset($query['view']);
}
return $segments;
}
/**
* Method to parse a SEF route.
*
* @param array $segments An array of route segments.
*
* @return array An array of route variables.
*
* @since 2.5
*/
function FinderParseRoute($segments)
{
$vars = array();
// Check if the view segment is set and it equals search or advanced.
if (@$segments[0] === 'search' || @$segments[0] === 'advanced')
{
$vars['view'] = $segments[0];
}
return $vars;
}