The autoActiveLink
configuration option allows the navbar helper to deduce the active link automatically and add an active
class to the
surrounding <li>
element.
The feature is enabled by default, you can enable or disable it by doing:
$this->Navbar->setConfig('autoActiveLink', false);
$this->Navbar->setConfig('autoActiveLink', true);
When the feature is disable, you can always specify the active
option to the NavbarHelper::link()
method:
echo $this->Navbar->link('Link', $url, ['active' => true]);
The active
option will always override the automatic value, even when autoActiveLink
is true
:
$this->Navbar->setConfig('autoActiveLink', true);
echo $this->Navbar->link('Link', $url);
// '<li class="active">...</li>
echo $this->Navbar->link('Link', $url, ['active' => false]);
// '<li>...</li>
The autoActiveLink
feature rely on the UrlComparerTrait::compareUrls()
method and do not compare URL strictly, it rather
check if the first URL is the root path of the second.
Below is a list of combinations to better understand the feature:
Link URL | Normalized | Current URL | Normalized | |
---|---|---|---|---|
|
/pages/display/faq |
/pages/faq |
/pages/display/faq |
|
/pages/credits |
/pages/display/credits |
|||
|
/users/edit |
/users/edit/1 |
/users/edit/1 |
|
/users/edit |
/users/edit |
|||
|
/users/index |
/users |
/users/index |
|
/users/edit |
/users/edit |
The query parameters (?
) and the anchor (#
) are never used for comparison.
When calling the link()
method, you can pass an array as the active
options to customize the way the comparison is made. This
array should contains which part of the URL you want to include in the left part of the comparison. Below is an example that removes
the passed parameters and the action:
echo $this->Navbar->link($name, $url, [
'active' => [
'action' => false,
'pass' => false
];
]);
Now:
Link URL | Normalized | Current URL | Normalized | |
---|---|---|---|---|
|
/users/index |
/users |
/users/index |
|
/users/edit |
/users/edit |
Notice that the /users
URL now matches the /users/edit
URL. The possible keys in the array are defined by the UrlComparerTrait::_parts
property:
public $_parts = ['plugin', 'prefix', 'controller', 'action', 'pass'];;