如何将多个条件组合成PHP中的一个if语句(对于Joomla)

时间:2014-05-08 05:29:30

标签: php 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"; }

3 个答案:

答案 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" : "";

Ternary Operator

答案 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(假),那么这些位置都不包含模块,否则至少有一个模块。

我希望这会有所帮助,对不起有困难