繁体   English   中英

如何在PHP中将多个条件组合为一个if语句(适用于Joomla)

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM