Skip to content

Commit 183173c

Browse files
Hackwarwilsonge
authored andcommitted
Tag routing improvements. Fixes joomla#5105.
1 parent d63679b commit 183173c

File tree

1 file changed

+17
-28
lines changed

1 file changed

+17
-28
lines changed

components/com_tags/helpers/route.php

Lines changed: 17 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -88,14 +88,11 @@ public static function getTagRoute($id)
8888
}
8989
else
9090
{
91-
if (!empty($needles) && $item = self::_findItem($needles))
92-
{
93-
$link = 'index.php?Itemid=' . $item;
94-
}
95-
else
91+
$link = 'index.php?option=com_tags&view=tag&id=' . $id;
92+
93+
if ($item = self::_findItem($needles))
9694
{
97-
// Create the link
98-
$link = 'index.php?option=com_tags&view=tag&id=' . $id;
95+
$link .= '&Itemid=' . $item;
9996
}
10097
}
10198

@@ -131,32 +128,24 @@ protected static function _findItem($needles = null)
131128
{
132129
if (isset($item->query) && isset($item->query['view']))
133130
{
134-
$view = $item->query['view'];
131+
$lang = ($item->language != '' ? $item->language : '*');
135132

136-
if (!isset(self::$lookup[$view]))
133+
if (!isset(self::$lookup[$lang]))
137134
{
138-
self::$lookup[$view] = array();
135+
self::$lookup[$lang] = array();
139136
}
140137

141-
// Only match menu items that list one tag
142-
if (isset($item->query['id'][0]) && count($item->query['id']) == 1)
138+
$view = $item->query['view'];
139+
140+
if (!isset(self::$lookup[$lang][$view]))
143141
{
144-
/*
145-
* Here it will become a bit tricky
146-
* language != * can override existing entries
147-
* language == * cannot override existing entries
148-
*/
149-
if (!isset(self::$lookup[$language][$view][$item->query['id'][0]]) || $item->language != '*')
150-
{
151-
self::$lookup[$language][$view][$item->query['id'][0]] = $item->id;
152-
}
153-
154-
self::$lookup[$view][$item->query['id'][0]] = $item->id;
142+
self::$lookup[$lang][$view] = array();
155143
}
156144

157-
if (isset($item->query["tag_list_language_filter"]) && $item->query["tag_list_language_filter"] != '')
145+
// Only match menu items that list one tag
146+
if (isset($item->query['id'][0]) && count($item->query['id']) == 1)
158147
{
159-
$language = $item->query["tag_list_language_filter"];
148+
self::$lookup[$lang][$view][$item->query['id'][0]] = $item->id;
160149
}
161150
}
162151
}
@@ -167,13 +156,13 @@ protected static function _findItem($needles = null)
167156
{
168157
foreach ($needles as $view => $ids)
169158
{
170-
if (isset(self::$lookup[$view]))
159+
if (isset(self::$lookup[$language][$view]))
171160
{
172161
foreach ($ids as $id)
173162
{
174-
if (isset(self::$lookup[$view][(int) $id]))
163+
if (isset(self::$lookup[$language][$view][(int) $id]))
175164
{
176-
return self::$lookup[$view][(int) $id];
165+
return self::$lookup[$language][$view][(int) $id];
177166
}
178167
}
179168
}

0 commit comments

Comments
 (0)