Пожалуйста, порекомендуйте умный, элегантный способ написать эти повторяющиеся утверждения «если» - PullRequest
0 голосов
/ 16 июля 2010

Я просто знаю, что делаю это очень плохо:

<?php } elseif ( is_single()) { 

    $url = wp_get_referer();
    $path_parts = pathinfo($url);
    $mycat = $path_parts['filename'];

    if ( $mycat == "animation"  ) {
        $_SESSION["theCategory"] = $mycat;?>
        <a href="<?php bloginfo('home')?>/category/<?php echo $_SESSION["theCategory"];?>"><?php echo $_SESSION["theCategory"];?></a>
<?php } elseif ($mycat == "direction"){     
        $_SESSION["theCategory"] = $mycat;?>
        <a href="<?php bloginfo('home')?>/category/<?php echo $_SESSION["theCategory"];?>"><?php echo $_SESSION["theCategory"];?></a>
<?php } elseif ($mycat == "grading"){   
        $_SESSION["theCategory"] = $mycat;?>
        <a href="<?php bloginfo('home')?>/category/<?php echo $_SESSION["theCategory"];?>"><?php echo $_SESSION["theCategory"];?></a>
<?php } elseif ($mycat == "online"){    
        $_SESSION["theCategory"] = $mycat;?>
        <a href="<?php bloginfo('home')?>/category/<?php echo $_SESSION["theCategory"];?>"><?php echo $_SESSION["theCategory"];?></a>
<?php } elseif ($mycat == "showcase"){  
        $_SESSION["theCategory"] = $mycat;?>
        <a href="<?php bloginfo('home')?>/category/<?php echo $_SESSION["theCategory"];?>"><?php echo $_SESSION["theCategory"];?></a>
<?php } elseif ($mycat == "showreel"){  
        $_SESSION["theCategory"] = $mycat;?>
        <a href="<?php bloginfo('home')?>/category/<?php echo $_SESSION["theCategory"];?>"><?php echo $_SESSION["theCategory"];?></a>
<?php } elseif ($mycat == "vfx"){   
        $_SESSION["theCategory"] = $mycat;?>
        <a href="<?php bloginfo('home')?>/category/<?php echo $_SESSION["theCategory"];?>"><?php echo $_SESSION["theCategory"];?></a>
<?php }else{ ?><a href="<?php bloginfo('home')?>/category/<?php echo $_SESSION["theCategory"];?>"><?php echo $_SESSION["theCategory"];?></a><?php };?>

<?php } //end if is_single ?>

Это работает. Но это грязно и повторяется. Я пытался идти по этому маршруту:

<?php if ($mycat == "animation" || "direction" || "grading"){

Но это не сработало вообще.

Ответы [ 6 ]

7 голосов
/ 16 июля 2010

Создайте массив, содержащий значения, затем проверьте, существует ли в массиве значение $mycat.Кроме того, вы повторяете ссылку, какой бы ни была $mycat, поэтому оператор else может быть полностью отброшен, а структура if еще более упрощена до следующего:

$categories = array(
    'animation', 
    'direction', 
    'grading', 
    'online', 
    'showcase', 
    'showreel', 
    'vfx'
);

if (in_array($mycat, $categories)) {
    $_SESSION["theCategory"] = $mycat;
}

?>
<a href="<?php bloginfo('home')?>/category/<?php echo $_SESSION["theCategory"];?>"><?php echo $_SESSION["theCategory"];?></a>

И, как говорили другие, не забудьтеизбежать вашего выхода.

5 голосов
/ 16 июля 2010

Как то так?

<?php
$cats = array(
    'animation',
    'direction',
    'grading',
    'online',
    'showcase',
    'showreel'
    'vfx',
);
if ( in_array($mycat, $cats) ) :
    $_SESSION['theCategory'] = $mycat; ?>
    <a href="<?php bloginfo('home')?>/category/<?php echo $mycat;?>"><?php echo $mycat;?></a>
<?php else: ?>
    <a href="<?php bloginfo('home')?>/category/<?php echo $_SESSION["theCategory"];?>"><?php echo $_SESSION["theCategory"];?></a>
<?php endif; ?>
4 голосов
/ 16 июля 2010

И используя оператор switch:

switch($mycat) {
    case 'animation':
    case 'direction':
    case 'grading':
    case 'online':
    case 'showcase':
    case 'showreel':
    case 'vfx':
        $_SESSION["theCategory"] = $mycat; 
    default:
        ?>
        <a href="<?php bloginfo('home')?>/category/<?php echo $_SESSION["theCategory"];?>"><?php echo $_SESSION["theCategory"];?></a>
        <?php
}

Обратите внимание на провал после операторов case. Вы можете сделать это или:

switch($mycat) {
    case 'animation':
    case 'direction':
    case 'grading':
    case 'online':
    case 'showcase':
    case 'showreel':
    case 'vfx':
        $_SESSION["theCategory"] = $mycat; 
}
?>
<a href="<?php bloginfo('home')?>/category/<?php echo $_SESSION["theCategory"];?>"><?php echo $_SESSION["theCategory"];?></a>
<?php
2 голосов
/ 16 июля 2010

Я не понимаю, зачем вам здесь нужно условие. Вы ничего не меняете внутри каждой условной возможности.

$_SESSION["theCategory"] = $mycat;
<a href="<?php bloginfo('home')?>/category/<?php echo $_SESSION["theCategory"];?>"><?php echo $_SESSION["theCategory"];?></a>
1 голос
/ 16 июля 2010

Путь 1:

<?php if ($mycat == "animation" || $mycat == "direction" || $mycat == "grading"){ 

Путь 2:

<?php if (in_array($mycat,array("animation","direction","grading"))) {
1 голос
/ 16 июля 2010

Используйте функцию in_array (), чтобы написать условие:

<?php if (in_array($mycat, array("animation", "direction", "grading")))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...