Добавлю, когда поправил малость код, всё заработало адекватно:
// Добавил ещё одну переменную.
$catid = (int) @$menu->query['catid'];
$id = (int) @$menu->query['id'];
// trace($menu);
if ($menu && ($menu->query['option'] != 'com_catalog' || $menu->query['view'] != 'record' || $id != $this->item->id)) {
// и тут её сравниваю.
while ($category && ($menu->query['option'] != 'com_catalog' || $menu->query['view'] == 'record' || $catid != $category->id) && $category->id > 1) { }
Перепробовал все возможные варианты, работает корректно. А вот при работе старого решения, категории в цепочке дублируются, например:
Home > First > Next
Если из категории First обратиться к ней ещё раз передав catid категории First, результат:
Home > First > First > Next
Это нормально?