Reputation: 1943
I have a nav.php which determines what the current page is and applies a class to the li element. This is the code:
<?php
$page = basename($_SERVER['PHP_SELF']);
$page = substr($page, 0, -4);
//echo $page;
?>
<ul>
<?php if($page == 'dash'){echo '<li class="current"><a href="dash.php">Dashboard</a></li>'; } else {echo '<li><a href="dash.php">Dashboard</a></li>';} ?>
<?php if($page == 'boot'){echo '<li class="current"><a href="boot.php">Boot</a></li>'; } else {echo '<li><a href="boot.php">Boot</a></li>';} ?>
<?php if($page == 'account'){echo '<li class="current"><a href="account.php">Account</a></li>'; } else {echo '<li><a href="account.php">Account</a></li>';} ?>
<?php if($page == 'tools'){echo '<li class="current"><a href="tools.php">Tools</a></li>'; } else {echo '<li><a href="tools.php">Tools</a></li>';} ?>
<?php if($page == 'news'){echo '<li class="current"><a href="bews.php">News</a></li>'; } else {echo '<li><a href="news.php">News</a></li>';} ?>
<?php if($page == 'contact'){echo '<li class="current"><a href="contact.php">Contact</a></li>'; } else {echo '<li><a href="contact.php">Contact</a></li>';} ?>
<?php if($page == 'logout'){echo '<li class="current"><a href="logout.php">Logout</a></li>'; } else {echo '<li><a href="logout.php">Logout</a></li>';} ?>
</ul>
Need to convert it to Smarty - appreciate any help.
Solved, me just being silly!
<ul>
<li class="{if $page == 'dash'}current{else}nav{/if}"><a href="dash.php">Dash</a></li>
<li class="{if $page == 'boot'}current{else}nav{/if}"><a href="boot.php">Boot</a></li>
<li class="{if $page == 'account'}current{else}nav{/if}"><a href="account.php">Account</a></li>
<li class="{if $page == 'tools'}current{else}nav{/if}"><a href="tools.php">Tools</a></li>
<li class="{if $page == 'news'}current{else}nav{/if}"><a href="news.php">News</a></li>
<li class="{if $page == 'contact'}current{else}nav{/if}"><a href="contact.php">Contact</a></li>
<li class="{if $page == 'logout'}current{else}nav{/if}"><a href="logout.php">Logout</a></li>
</ul>
Upvotes: 0
Views: 415
Reputation: 13557
Have you heard of the DRY principle?
In Smarty3 you could do the following:
{$_pages = [
'dash' => 'Dash',
'boot' => 'Boot',
'account' => 'Acccount',
'tools' => 'Tools',
'news' => 'News',
'contact' => 'Contact',
'logout' => 'Logout'
]}
<ul>
{foreach $_pages as $key => $name}
<li class="{if $page == $key}current{else}nav{/if}"><a href="{$key}.php">{$name}</a></li>
{/foreach}
</ul>
or, if the structure allows it, even:
{$_pages = [ 'Dash', 'Boot', 'Acccount', 'Tools', 'News', 'Contact', 'Logout' ]}
<ul>
{foreach $_pages as $name}
{$key = {$name|lower}}
<li class="{if $page == $key}current{else}nav{/if}"><a href="{$key}.php">{$name}</a></li>
{/foreach}
</ul>
Upvotes: 0
Reputation: 17010
Simply, PHP file:
<?php
$page = basename($_SERVER['PHP_SELF']);
$page = substr($page, 0, -4);
$smarty->assign('page', $page);
?>
Template TPL file:
<ul>
<li {if ($page == 'dash')}class="current"{/if}><a href="dash.php">Dashboard</a></li>
<li {if ($page == 'boot')}class="current"{/if}><a href="boot.php">Boot</a></li>
etc...
</ul>
What were your doubts?
Upvotes: 1