我有几个关于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"; }
答案 0 :(得分:0)
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" : "";
答案 1 :(得分:0)
您可以使用if($ this-> countModules(' Top1A')> = 1&& $ this-> countModules(' Top1B')> = 1)){做你想做的事}} {}。
答案 2 :(得分:0)
您可能希望将$this->countModules('Top2A and Top2B and Top2C')
分配给变量。
这只是为了一些可读性。至于PHP或语句,我们使用双管||
,而不是单词"或"。
另外,请注意$ 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(false),那么这些位置中没有模块,否则每个位置至少有一个模块。
如果要检查一个或多个位置是否有模块,可以使用$this->countModules('Top2A or Top2B or Top2C')
。如果计算结果为0(假),那么这些位置都不包含模块,否则至少有一个模块。
我希望这会有所帮助,对不起有困难