I have the following problem:
I set a URL with JRoute like this:
JRoute::_('index.php?option=com_gallery&view=gallery');
This gives me example.site/gallery
, which is correct, however, if I want to display this same link, in a different view - example - view finishing, it does not show this same link, but it shows the link of the view "finishing" instead.
So, in short, if I'm displaying this JRoute::_('index.php?option=com_gallery&view=gallery')
in the view "finishing", instead of displaying example.site/gallery
, it displays example.site/finishing
Actually it happens with any link; if I do this: echo JRoute::_('index.php')
it gives me example.site/finishing
UPDATE:
My Router File:
<?php
defined('_JEXEC') or die;
class GalleryRouter implements JComponentRouterInterface
{
public function build(&$query)
{
$segments = array();
if (isset($query['id']))
{
$db = JFactory::getDbo();
$qry = $db->getQuery(true);
$qry->select('alias');
$qry->from('#__gallery_images');
$qry->where('id = ' . $db->quote($query['id']));
$db->setQuery($qry);
$alias = $db->loadResult();
$segments[] = $alias;
unset($query['id']);
}
unset($query['view']);
return $segments;
}
public function parse(&$segments)
{
$vars = array();
$db = JFactory::getDbo();
$qry = $db->getQuery(true);
$qry->select('id');
$qry->from('#__gallery_images');
$qry->where('alias = ' . $db->quote($segments[0]));
$db->setQuery($qry);
$id = $db->loadResult();
if(!empty($id))
{
$vars['id'] = $id;
$vars['view'] = 'gallery';
}
return $vars;
}
public function preprocess($query)
{
return $query;
}
}
Hidden menu links:
index.php?option=com_gallery&view=gallery
which gives me: example.site/gallery
index.php?option=com_gallery&view=finising
which gives me example.site/finishing
If I do an echo JRoute::_('index.php?option=com_gallery&view=gallery')
in the view "finishing", instead of giving me example.site/gallery
it displays example.site/finishing
.
I'm not sure how JRoute works but as far as I know, it should display example.site/gallery
regardless of the view it is being dispayed on, but pelase, correct if I am wrong.