purpletree
purpletree

Reputation: 1943

PHP to Smarty, unsure

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

Answers (2)

rodneyrehm
rodneyrehm

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

lorenzo-s
lorenzo-s

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

Related Questions