0

これが単なる静的なWebサイトである場合、4つのリンクがあります

<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をエコーアウトすることですが、問題は、次のすべてのifステートメントでまだ見栄えが悪いことです。

2番目のオプションはif:、else:、endif;です。構築しますが、それはそれをより良くしません。これは私があなたに素晴らしい心を必要とするところです、他にどのように私はこのコードを再構築することができますか?

4

2 に答える 2

1

PHPテンプレートエンジンを調べることをお勧めします。私は多くのプロジェクトでPHPTALを使用しています。Twig(そこにはリストされていません)も人気があると思います。おそらくSymfonyが人気があるからでしょう。

目標は、PHPコードをPHPコードと一緒に保持し、phpタグへの絶え間ない侵入と脱出を防ぐことです。

于 2012-11-28T18:47:53.507 に答える
1

問題を正しく理解した場合、PHP検証をHTMLから分離し、検証関数に従ってアクションボタンを表示および非表示にできませんか?

以下のコードを確認してください

HTMLと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 class関数は、クラスをactiveまたはinactiveとして返す場合があり、非アクティブの場合、アクションボタンは表示されません。

CSS

.active{
   display:block;
}

.inactive{
   display:none;
}
于 2012-11-28T19:04:58.043 に答える