Redirect 'Link to First Child' Pages
This is a community-contributed tutorial. This tutorial is over a year old and may not apply to your version of Concrete CMS.
May 9, 2016
On sites where the replace_link_with_first_in_nav
attribute is used,
it may be ideal to redirect a visitor to the correct page if they
manually enter the parent page's URL. This can be achieved with an
event listener in the application bootstrap.
Let's say you have the following tree
example.com/page-1
[replace_link_with_first_in_nav
attribute is set on this page]example.com/page-1/sub-page-1
example.com/page-1/sub-page-2
Typically all the navigation entries for /page-1
automatically point
to /page-1/sub-page-1
however if the user types in /page-1
for some
reason they will see whatever content has been added there (which
probably isn't any).
By adding the following snippet to your /application/bootstrap/app.php
they will automatically be redirected to the first child page with a
301 response.
use Concrete\Core\Routing\Redirect;
Events::addListener('on_page_view', function($event) {
$page = $event->getPageObject();
if ($page->getCollectionAttributeValue('replace_link_with_first_in_nav')) {
$sub = $page->getFirstChild();
if (is_object($sub)) {
Redirect::page($sub, 301)->send();
}
}
});