以下是我的示例脚本:
<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>
我希望PHP只在不在两个页面上时回显“href =”#“class =”active“:
?page = photos&amp; view = forsale
或
页=相片和?视图=项目
我也试过这个并且它不起作用:
<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>
答案 0 :(得分:3)
你做不到:
if ($var !== 'a' || !== 'b') ...
你必须这样做:
if ($var !== 'a' || $var !== 'b') ...
如果您想清理该代码,我建议:
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;
}
然后您的代码变为:
<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>
以上是说明性的,而不是最终和完整的。我想要了解的一点是你想养成使用某种模板机制的习惯,即使你不使用模板库(例如Smarty)。您很少想将复杂的逻辑嵌入到基本上是视图中。如果您使用函数库(或对象)来创建标记,它会为您提供大量控制以逃避特殊字符,自动放入属性,验证您放入的内容或其他内容。
在此示例中,您可能希望拥有一个表示您的网站导航的数据结构,您可以在其中输入当前页面的内容,并在动态构建导航并自动操作链接时将其与所有条目进行比较。
答案 1 :(得分:2)
除了问题,克莱图斯指出你还有precedence of the operators的问题。 &安培;&安培;优先级高于||。因此
if (
$_GET['page']=='photos'
&& $_GET['view']!=="projects"
|| $_GET['view']!=="forsale"
)
相当于
if (
( $_GET['page']=='photos' && $_GET['view']!=="projects" )
|| $_GET['view']!=="forsale"
)
但你显然想要
if (
$_GET['page']=='photos'
&& ( $_GET['view']!=="projects" || $_GET['view']!=="forsale" )
)
也许不是两种选择,但如果你有更多的选择,你可能要考虑使用!in_array()。 e.g。
if (
'photos'=$_GET['page']
&& !in_array($_GET['view'], array("projects","forsale"))
)
答案 2 :(得分:0)
&lt;?php $ view = $ _GET ['view'];
if($ _ GET ['page'] =='photos'&amp;&amp;($ view =='projects'|| $ view =='forsale'))
{
echo'&lt; li&gt;&lt; a href =“#”class =“active”&gt;照片&lt; / a&gt;&lt; / li&gt;';
}
否则
{
echo'&lt; li&gt;&lt; a href =“/?page = photos”&gt;照片&lt; / a&gt;&lt; / li&gt;';
}?&gt;
答案 3 :(得分:0)
if( $_GET[ 'page' ] != "photos" && $_GET[ 'view' ] != "forsale") {
...
}
else if( $_GET[ 'page' ] != "photos" && $_GET[ 'view' ] != "projects") {
...
}