
In this post I’ll show how to add a filter function to a Sage 9 project. A filter function is a good method for selectively hiding or showing certain functionality. The filter function I’ll be showing is for the sidebar, which for some reason doesn’t come shipped with a base Sage 9 project. My example also includes how to target a custom page template.
The below code goes into your app/filters.php file.
/**
* Display sidebar
*/
add_filter('sage/display_sidebar', function ($display) {
static $display;
isset($display) || $display = in_array(true, [
// The sidebar will be displayed if any of the following return true
is_home(),
is_single(),
is_search(),
is_archive()
]);
// example if you want to target a particular custom page template
if (basename(get_page_template()) == "template-full-width.blade.php")
$display = false;
return $display;
});
This below code goes into the app/helpers.php file.
/**
* Determine whether to show the sidebar
* @return bool
*/
function display_sidebar()
{
static $display;
isset($display) || $display = apply_filters('sage/display_sidebar', false);
return $display;
}
You may also want to add a class to the body for pages that have an active sidebar. The code below comes shipped with Sage 9 and adds a sidebar-primary class to the body.
/** Add class if sidebar is active */
if (display_sidebar()) {
$classes[] = 'sidebar-primary';
}
To actually use this, you would need to call the filter function. Sage 9 does it by default for the sidebar in resources/views/layout/app.blade.php.
@if (App\display_sidebar())
<main class="main col-md-8">
@yield('content')
</main>
<aside class="sidebar col-md-4">
@include('partials.sidebar')
</aside>
@endif
I’ve used filter functions in multiple scenarios. In one case, I had a secondary navigation for sub-pages that I didn’t want to show on a full-width template. In another case, I had post filtering that was supposed appear on the post page, but not on the home page.