[英]How to combine multiple conditions into one if statement in PHP (for Joomla)
关于PHP,我有几个问题……请记住,我对PHP还是很陌生,只了解最基本的知识。
我想知道如何压缩一些内容(countModules是一个Joomla函数):
if($this->countModules('Top2A and Top2B and Top2C') == 0) $modRow2 = " hidden";
if($this->countModules('Top2A or Top2B or Top2C') >= 1) $modRow2 = "";
会是这样吗?
if($this->countModules('Top2A and Top2B and Top2C') == 0) {
$modRow2 = " hidden";
}else{
$modRow2 = "";
}
或就此而言,我可以合并(有可能的列,如果只显示两个,则需要$ modCellRow到=“ col2”):
if($this->countModules('Top1A and Top1B') >= 1) $modCellRow1 = "col2";
if($this->countModules('Top1B and Top1C') >= 1) $modCellRow1 = "col2";
if($this->countModules('Top1A and Top1C') >= 1) $modCellRow1 = "col2";
到这个:
if($this->countModules('Top1A and Top1B') >= 1) or ($this->countModules('Top1B and Top1C') >= 1) or ($this->countModules('Top1A and Top1C') >= 1) {
$modCellRow1 = "col2";
}
有什么建议吗? 我这样做对吗?
//////更新///////
这一切正确吗?
$topModCont1="";
$modRow1="";
$modCellRow1="";
$modRow2="";
$modCellRow2="";
$bottomModCont1="";
$modRow3="";
$modCellRow3="";
$modRow4="";
$modCellRow4="";
$modRowFooter="";
$modCellRowFooter="";
$countModsCont1=$this->countModules('Top1A + Top1B + Top1C + Top2A + Top2B + Top2C');
$countModsRow1=$this->countModules('Top1A + Top1B + Top1C');
$countModsRow2=$this->countModules('Top2A + Top2B + Top2C');
$countModsCont2=$this->countModules('Bottom1A + Bottom1B + Bottom1C + Bottom2A + Bottom2B + Bottom2C');
$countModsRow3=$this->countModules('Bottom1A + Bottom1B + Bottom1C');
$countModsRow4=$this->countModules('Bottom2A + Bottom2B + Bottom2C');
$countModsFooter=$this->countModules('Footer1A + Footer1B + Footer1C');
if($countModsCont1 == 0) { $topModCont1=" hidden"; }
if($countModsCont2 == 0) { $bottomModCont1=" hidden"; }
if($countModsRow1 == 0) { $modRow1=" hidden"; }
if($countModsRow1 == 1) { $modCellRow1="col1"; }
if($countModsRow1 == 2) { $modCellRow1="col2"; }
if($countModsRow1 == 3) { $modCellRow1="col3"; }
if($countModsRow2 == 0) { $modRow2=" hidden"; }
if($countModsRow2 == 1) { $modCellRow2="col1"; }
if($countModsRow2 == 2) { $modCellRow2="col2"; }
if($countModsRow2 == 3) { $modCellRow2="col3"; }
if($countModsRow3 == 0) { $modRow3=" hidden"; }
if($countModsRow3 == 1) { $modCellRow3="col1"; }
if($countModsRow3 == 2) { $modCellRow3="col2"; }
if($countModsRow3 == 3) { $modCellRow3="col3"; }
if($countModsRow4 == 0) { $modRow4=" hidden"; }
if($countModsRow4 == 1) { $modCellRow4="col1"; }
if($countModsRow4 == 2) { $modCellRow4="col2"; }
if($countModsRow4 == 3) { $modCellRow4="col3"; }
if($countModsFooter == 0) { $modRowFooter=" hidden"; }
if($countModsFooter == 1) { $modCellRowFooter="col1"; }
if($countModsFooter == 2) { $modCellRowFooter="col2"; }
if($countModsFooter == 3) { $modCellRowFooter="col3"; }
if($this->countModules('Top2A and Top2B and Top2C') == 0) $modRow2 = " hidden";
if($this->countModules('Top2A or Top2B or Top2C') >= 1) $modRow2 = "";
你也可以这样使用
$modRow2 = $this->countModules('Top2A and Top2B and Top2C') == 0 ? " hidden" : "";
您可以使用if($ this-> countModules('Top1A')> = 1 && $ this-> countModules('Top1B')> = 1)){做您想做的} else {}。
您可能需要将$this->countModules('Top2A and Top2B and Top2C')
分配给变量。
这只是为了提高可读性。 至于PHP或语句,我们使用双管道||
为此,不是单词“或”。
另外,请注意,在参数中使用'and'/'or'的$ this-> countModules()将返回true或false,而不是计数的模块数。 如果要计算模块总数,则应使用“ +”运算符。 (只需在http://docs.joomla.org/JDocumentHTML/countModules上阅读该内容,如果我错了,请纠正我:))
因此,在一天结束时...:
$modRow2=""; //give it an initial value, then you don't need an else branch to give it this value, only a single if-statement to change it.
$modCellRow1=""; //also initialize this, for the same reason
$countMods=$this->countModules('Top2A + Top2B + Top2C'); //count total modules
if($countMods == 0)
{
$modRow2 = " hidden";
}
if ($countMods==2)
{
$modCellRow1="col2";
}
这段代码可能更简洁,但我认为保留其简单性和可读性可能会更好。
希望这可以帮助! :)
编辑:
您的更新看起来不错(在快速阅读之后):)尽管只是重复的if语句的一个旁注,但您宁可使用开关代替它们-它们使代码更简洁。 例如:
代替
if($countModsRow1 == 0) { $modRow1=" hidden"; }
if($countModsRow1 == 1) { $modCellRow1="col1"; }
if($countModsRow1 == 2) { $modCellRow1="col2"; }
if($countModsRow1 == 3) { $modCellRow1="col3"; }
采用
switch($countModsRow1)
{
case 0:
$modRow1="hidden";
break;
case 1:
$modCellRow1="col1";
break;
case 2:
$modCellRow1="col2";
break;
case 3:
$modCellRow1="col3";
break;
default:
//do something if none of these cases are evalutated as being true
break;
}
它可能看起来像很多代码,但是如果您的if语句由于某种原因而增长,那么将来它们可能会变得难以管理。 如果您需要阅读有关交换机的一些资源,请参阅: PHP Switch
编辑:
然后,您是正确的初始帖子:要检查每个位置是否有模块(不必担心有多少模块),可以使用$this->countModules('Top2A and Top2B and Top2C')
。 如果该值为0(假),则在那些位置没有模块,否则在EACH位置至少有一个模块。
如果要检查其中一个或多个位置是否存在模块,可以使用$this->countModules('Top2A or Top2B or Top2C')
。 如果该结果为0(假),则这些位置均不包含模块,否则至少其中之一包含模块。
希望对您有所帮助,对于您的困惑,我们深表歉意。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.