Как превратить эту строку в функцию? - PullRequest
1 голос
/ 17 февраля 2012

У меня есть навигация, в которой я выводю класс на основе переменной на странице.

<ul class="nav">
   <li class="<?php echo ($page == 'home' ? 'active' : 'inactive'); ?>" class="nav-active"><a href="/" title="Home Page">Home</a></li>
   <li class="<?php echo ($page == 'home' ? 'active' : 'inactive'); ?>" class="nav-active"><a href="/" title="Another Page Page">Another Page</a></li>

</ul>

Я новичок в PHP и пытаюсь выяснить, как бы я превратил это в функцию, чтобы я мог просто вызвать ее и добавить аргументы.

<li class="<php activeNav($page, $current); ?>">

Может кто-нибудь объяснить, как это сделать? И извините за то, что не дал очень описательное название, не знаю, как это назвать.

Ответы [ 3 ]

2 голосов
/ 17 февраля 2012

Я не понимаю, почему это улучшит ваш код, но вы можете попробовать это:

PHP:

function activeNav($page, $current) {
    return ($page == $current) ? "active" : "inactive";
}

HTML:

<li class="<?php echo activeNav($page, 'home'); ?>">
1 голос
/ 17 февраля 2012

Уровень 1

function activeClass( $page, $current = 'index') {
    if( $page == $current){
         return ' active';
    }
    return ' inactive';
}

Использование:

<ul class="nav">
   <li class="nav-active<?php echo activeNav( 'home', $page); ?>"><a href="/" title="Home Page">Home</a></li>
   <li class="nav-active<?php echo activeNav( 'another', $page); ?>"><a href="/" title="Another Page Page">Another Page</a></li>                  
</ul>

Уровень 2

function printNavigationElement( $page, $title, $current = 'index'){
    $title = htmlspecialchars( $title);
    return '<li class="nav-active' . activePage( $page, $current) . '"><a href="/' . htmlspecialchars($page) .
        '" title="' . $title . '">' . $title . '</a></li>';
}

Использование:

<ul class="nav">
   <?php
    echo printNavigationElement( 'home', 'Home page', $page);
    echo printNavigationElement( 'another', 'Another page', $page);
?>
</ul>

Уровень 3 - Упс

class NavigationItem {
    public $url;
    public $title;

    public function __construct( $url, $title){
        $this->url = $url;
        $this->title = $title;
    }
}

class Navigation {
    // You should use setters and getters with protected variables
    public $current = '';
    public $items = array()

    public function display() {
        echo '<ul class="nav">';
        foreach( $this->items as $item){
            printNavigationElement( $item->url, $item->title, $this->current);
        }
        echo '</ul>'
    }
}

Использование:

<?php

$navigation = new Navigation();
$navigation->current = $page;
$navigation->items[] = new NavigationItem( 'home', 'Home page');
$navigation->items[] = new NavigationItem( 'another', 'Another page');
$navigation->display();
0 голосов
/ 17 февраля 2012

Если $page является текущей страницей и $current типом страницы, с которой вы хотите проверить, вы можете сделать:

...