用HTML重构PHP代码

时间:2012-11-28 18:44:31

标签: php html

如果这只是一个静态网站,我会有四个链接

<li><a href="javascript:void(0)">Action 1</a></li>
<li><a href="javascript:void(0)">Action 2</a></li>
<li><a href="javascript:void(0)">Action 3</a></li>
<li><a href="javascript:void(0)">Action 4</a></li>

但在这种情况下,链接需要执行不同的回调,输出消息和操作,具体取决于谁点击它们。现在,由于所有这些复杂性,我有一个非常凌乱的页面。我的代码是这样的;

<?php
 foreach ($var as $key) {
?>
  <div class="content">
     <li><a href="javascript:void(0)">Action 1</a></li>
     <li><a href="javascript:void(0)">Action 2</a></li>
       <?php
        if(session check){
             $var1 = the ouptut of some function
             $var2 = the output of another function
                  if(another check) {
           ?> 

                     <li><a href="javascript:void(0)">Action 3 type 1</a></li>

               <?php
                   } else{
                        if($var1 === something){
                  ?>
                            <li><a href="javascript:void(0)" onClick="somefunc()">Action 3 type 2</a></li>
                      <?php
                         } 
                         else {
                          ?>
                            <li><a href="javascript:void(0)" class ="colorlink" onClick="somefunc()">Action 3 type 3</a></li>
                        <?php
                            }
                         }
 /* we are done with action 3 and now moving to action 4. Nb: still in the same session check */
        if($var2 == something){
       ?>
           <li><a href="javascript:void(0)" onClick="somefunc()">Action 4 type 1</a></li>

      <?php
        }else{
       ?>
           <li><a href="javascript:void(0)" style ="colorit"onClick="somefunc()">Action 4 type 2</a></li>
     <?php 
          }
/* Now thats the end of everthing in the session check */
/* This else is for session not active */
 } else{
     <li><a href="javascript:void(0)">Action 3</a></li>
     <li><a href="javascript:void(0)">Action 4</a></li>
     }
    ?>

我真的很抱歉缩进是多么糟糕,我真的不知道如何在这里缩进。 我想知道是否有更好的方法来重构代码,当它被正确缩进时看起来并不那么糟糕。 我知道的选项是,首先,我将所有内容都包装在一个php标签中并回显出html,但问题是,它仍然看起来与所有nexted if语句一样糟糕。

第二个选项是if:,else:,endif;构造,但这并没有使它变得更好。 这是我需要你聪明才智的地方,我怎么能重组这个代码?

2 个答案:

答案 0 :(得分:1)

您可能需要查看PHP Templating Engine。我在很多项目中使用PHPTAL。我认为Twig(未列在那里)也很受欢迎,可能是因为Symfony很受欢迎。

目标是使PHP代码保持PHP代码并防止不断地进出php标记。

答案 1 :(得分:1)

如果我正确理解您的问题,您是否可以将PHP验证与HTML分开,并根据验证功能显示和隐藏操作按钮?

检查以下代码

HTML&amp; PHP

<?php
    $username = 'somename';

    function getmyclass(i,user){
       //return active or inactive according to the conditions
    }
?>
<div class="content">
     <li><a href="javascript:void(0)" class="<?php echo getmyclass(1,$username) ?>" onClick="somefunc1()">Action 1</a></li>
     <li><a href="javascript:void(0)" class="<?php echo getmyclass(2,$username) ?>" onClick="somefunc2()">Action 2</a></li>
     <li><a href="javascript:void(0)" class="<?php echo getmyclass(3.1,$username) ?>" onClick="somefunc3()">Action 3</a></li>
     <li><a href="javascript:void(0)" class="<?php echo getmyclass(3.2,$username) ?>" onClick="somefunc4()">Action 3</a></li>
     <li><a href="javascript:void(0)" class="<?php echo getmyclass(4.1,$username) ?>" onClick="somefunc5()">Action 4</a></li>
     <li><a href="javascript:void(0)" class="<?php echo getmyclass(4.2,$username) ?>" onClick="somefunc6()">Action 4</a></li>
</div>

get类函数可以将类返回为activeinactive,如果它处于非活动状态,则不会显示操作按钮。

<强> CSS

.active{
   display:block;
}

.inactive{
   display:none;
}