artyom-beilis / cppcms

CppCMS Framework
Other
443 stars 107 forks source link

Set "active" class in navigation sidebar #75

Open Tectu opened 3 years ago

Tectu commented 3 years ago

I am implementing a simple portal using CppCMS. The master page has a simple sidebar for navigational purposes based on the W3C example.

My master template looks like this (mainly the sidebar template is of interest):

<% c++ #include "data/content.hpp" %>
<% skin defskin %>
<% view master uses content::master %>

<% template title() %>
    <%= title %>
<% end template %>

<% template page_content() %>
    Override  Me
<% end template %>

<% template sidebar() %>
    <div class="sidebar">
      <a class="active" href='<% url "/" %>'>Home</a>
      <a href='<% url "/news" %>'>News</a>
      <a href='<% url "/users" %>'>Users</a>
    </div>
<% end template %>

<% template render() %>
    <html>
        <head>
            <link rel="stylesheet" href="/css/style.css">
            <meta name="viewport" content="width=device-width, initial-scale=1.0">
            <title><% include title() %></title>
        </head>
    <body>

        <% include sidebar() %>

        <div class="content">
            <h1><% include title() %></h1>
            <% include page_content() %>
        </div>
    </body>
</html>
<% end template %>

<% end view %>
<% end skin %>

What is the appropriate/recommended way of setting the class="active" attribute for the URL of the current view/page? Is there a mechanism in the template engine that allows me to set the attribute on the appropriate menu item in the master template?