1

我正在尝试确定使用 PHP 分配选项卡式菜单项的类的最佳方式。

到目前为止,我在这里和其他地方所读到的关于这个主题的内容似乎只能确定非常简单的案例。当您在其页面上时,我需要为选项卡设置一个活动类,并且我还需要为无法访问该功能的帐户上的选项卡设置一个禁用类(基于会话标志)。

最初,我只是回应了这样的一切:

 <?php  
    echo '<li class="some-tab ';if($pageName === "somepage.php"){echo'active';}
            if(!$_SESSION['some_flag']){echo'disabled';
            echo'"><a href="">Link</a>';}
   ?>

但随后代码耻辱设置,我正试图真正开始使用 PHP 像模板引擎。也就是说,我不想使用实际的模板引擎。

对于 HTML 的任何其他部分,跳入和跳出 PHP 很容易且相对优雅,但在让类工作时,感觉很笨拙。它完全污染了标记,并在我的模板中留下了太多的逻辑。

像这样:

<li class="some-tab <? if($pageName === "somepage.php"){echo'active';} ?></li>

不可怕,但添加更多规则,它变得一团糟。

我的第一个想法是创建一个关联数组并回显它的内容:

<?  if(some condition){
       $class = array("sometab" => "sometab active disabled");
    }
    else{
       $class = array("sometab" => "sometab");
    }
 ?>
<li class="<?= $class['sometab'] ?>"> </li>

但我觉得它可能太聪明了

我想避免将信息存储在正文类中或某些人建议的 Javascript cookie 中,因为我不只是获取 URL。

有没有我错过的选项?

类数组是否合适?我没有经验知道这是否是一个可怕的想法。

4

2 回答 2

2

我想你自己回答了这个问题。

如果你想让它像模板引擎一样运行,你需要一个模板引擎

话虽如此,但您可能会觉得很简洁的是速记逻辑语句:

if($x > 10){echo 'BlahBlah';}else{ echo 'NahNah';}

变成:

echo ($x>10?'BlahBlah':'NahNah');

这些可以在您提到的逻辑门中派上用场

于 2012-11-20T18:32:52.097 回答
0

你的最后一个选择对我来说是最优雅的。无论如何,如果您可以将 MVC 模式与某些框架一起使用,我强烈推荐给您。

在任何情况下,如果您不想为每个 CSS 样式创建变量,您很可能必须在模板中的某个时间点处理这些内容。

于 2012-11-20T18:54:03.753 回答