2010-03-14 8 views
1

Ci-dessous mon exemple de script:instruction PHP if - sélectionne deux variables get différentes?

<li><a <?php if ($_GET['page']=='photos' && $_GET['view']!=="projects"||!=="forsale") { echo ("href=\"#\" class=\"active\""); } else { echo ("href=\"/?page=photos\""); } ?>>Photos</a></li> 
<li><a <?php if ($_GET['view']=='projects') { echo ("href=\"#\" class=\"active\""); } else { echo ("href=\"/?page=photos&view=projects\""); } ?>>Projects</a></li> 
<li><a <?php if ($_GET['view']=='forsale') { echo ("href=\"#\" class=\"active\""); } else { echo ("href=\"/?page=photos&view=forsale\""); } ?>>For Sale</a></li> 

Je veux que le PHP pour faire écho à la "href =" # » class = "active" seulement quand il est pas sur les deux pages:

? page = Photos & view = forsale

ou

? page = les photos & view = projets

J'ai aussi essayé et cela ne fonctionne pas:

<li><a <?php if ($_GET['page']=='photos' && ($_GET['view']!=='projects' || $_GET['view']!=='forsale')) { echo ("href=\"#\" class=\"active\""); } else { echo ("href=\"/?page=photos\""); } ?>>Photos</a></li> 

Répondre

2

En plus du problème a souligné que vous avez également un problème avec le precedence of the operators. & & a une priorité supérieure à ||. Par conséquent

if (
    $_GET['page']=='photos' 
    && $_GET['view']!=="projects" 
    || $_GET['view']!=="forsale" 
) 

équivaut à

if (
    ($_GET['page']=='photos' && $_GET['view']!=="projects") 
    || $_GET['view']!=="forsale" 
) 

Mais vous voulez évidemment

if (
    $_GET['page']=='photos' 
    && ($_GET['view']!=="projects" || $_GET['view']!=="forsale") 
) 

Peut-être pas pour deux alternatives, mais si vous avez plus d'options que vous voudrez peut-être envisager d'utiliser! in_array(). par exemple.

if (
    'photos'=$_GET['page'] 
    && !in_array($_GET['view'], array("projects","forsale")) 
) 
+0

L'in_array a fonctionné magnifiquement, merci! – arsoneffect

3

Vous ne pouvez pas faire:

if ($var !== 'a' || !== 'b') ... 

Vous devez faire:

if ($var !== 'a' || $var !== 'b') ... 

Si vous voulez nettoyer ce code, je suggère:

function active_view($content, $url, $view) { 
    if ($_GET['view'] == $view) { 
    return link($content, '#', 'active'); 
    } else { 
    return link($content, $url); 
    } 
} 

function active_page_view() { 
    $args = func_get_args(); 
    $content = array_shift($args); 
    $url = array_shift($args); 
    $page = array_shift($args); 
    if ($_GET['page'] == $page && !in_array($view, $args)) { 
    return link($content, '#', 'active'); 
    } else { 
    return link($content, $url); 
    } 
} 

function link($content, $href, $class) { 
    $ret = '<a href="' . $href . '"'; 
    if ($class) { 
    $ret .= ' class="' . $class . '"'; 
    } 
    $ret .= '>' . $content . '</a>'; 
    return $ret; 
} 

puis votre code devient:

<li><?php echo active_page_view('Photos', '/?page=photos', 'photos', 'projects', 'forsale'); ?></li> 
<li><?php echo active_view('Projects', '/?page=photos&view=projects', 'projects'); ?></li> 
<li><?php echo active_view('For Sale', '/?page=photos&view=forsale', 'project'); ?></li> 

Ce qui précède illustre plutôt que d'être complète et finale. Le point que j'essaie de faire comprendre est que vous voulez prendre l'habitude d'utiliser une sorte de mécanisme de gabarit même si vous n'utilisez pas une bibliothèque de templates (par exemple Smarty). Vous voulez rarement intégrer une logique complexe dans ce qui est essentiellement une vue. Si vous utilisez une bibliothèque de fonctions (ou d'objets) pour créer votre balisage, cela vous donne beaucoup de contrôle pour échapper des caractères spéciaux, mettre automatiquement des attributs, valider ce que vous mettez ou quoi que ce soit. Dans cet exemple, vous souhaitez probablement avoir une structure de données représentant la navigation de votre site dans laquelle vous entrez la page actuelle et la compare à toutes les entrées lors de la construction dynamique de la navigation et manipule automatiquement les liens.

0

<?php $ view = $ _GET ['view'];
if ($ _ GET [ 'page'] == 'photos' & & ($ view == 'projets de || $ Voir les == 'forsale')) {

echo' <li> < a href = " # " class = " actif " > Photos </a > </li > ';
}
autre
{
echo '<li> < a href = "/page = Photos " > Photos </a > </li >?;
}? >

0
if($_GET[ 'page' ] != "photos" && $_GET[ 'view' ] != "forsale") { 
    ... 
} 
else if($_GET[ 'page' ] != "photos" && $_GET[ 'view' ] != "projects") { 
    ... 
}