0

私が取り組んでいる PHP ページは、いくつかの状態で読み込むことができます。デフォルトの状態では、1 つの DIV レイヤーを表示し、別の DIV レイヤーを非表示にする必要があります。逆もまた同様です。スクリプトには同じことを行うための JavaScript バックアップがありますが、JavaScript を無効にしてページを表示する人のために CSS が機能する必要があります。

最初の DIV のコードは正常に動作します。

<pre><</pre>div name="MoreDiv" ID="MoreDiv" style="position: absolute;top: 10px; left: 15px;  width: 95%; font-size:1.3em; 
<?php
if(isset($_GET['page']))
{
$ipi = getenv("REMOTE_ADDR");
$u = getenv ("HTTP_REFERER");
$httpagenti = getenv ("HTTP_USER_AGENT");

$page = $_GET['page'];
switch($page)
{
case 404:
{echo '';
break;}

default:
{ ?>

<?php }

break;}
} 
else { //
?>visibility:none; display:none;<?php }
?>">

... したがって、他の DIV については、URL に ?page 変数が設定されているときに非表示にする必要があると思います。「visibility:none; display:none;」PHP出力のデフォルト内の属性は機能します-次のように少し:

div name="PhotoText" ID="PhotoText" style="position: absolute;top: 15px; left: 15px; width: 400px; font-size:1.3em; background: rgb(0, 0, 0); background: rgba(0, 0, 0, 0.7); padding:10px; -webkit-border-radius: 10px;  -moz-border-radius: 10px; border-radius: 10px; -khtml-border-radius: 10px; <?php
if(isset($_GET['page']))
{$page = $_GET['page'];
switch($page)
{
case "test":
{?>
visibility:none; display:none;

<?php
break;}

default:
{ ?>
visibility:none; display:none;

<?php }

break;}
}   

else { //
?><?php }
?>">

それでも、いくつかの奇妙で本当に奇妙な理由で、DIV はまだ表示されます!...そして、ページが完全に読み込まれ、「body onload」タグ内の JavaScript が開始されて非表示になるまで、表示されたままになります。コンテンツをロードするためにそこにある必要があるJavaScriptリンクがあるため、PHPを使用してデフォルトのURL変数のDIVレイヤーを空白のままにすることはできません....そのため、このレイヤーを非JSの方法で隠す必要があります。しかし、JSを使用して再び表示できるようにする方法で!!

4

1 に答える 1

2

これを実現するには、実にいくつかの方法があります。まず第一に、あなたの質問にあるように、決して属性の値内にロジックのタイプを補間しないでください。レシピ、出会いの災い。ifswitch

visibility対の質問ではdisplay、このQAは実際にそれをかなりよく表しています:

http://webdesign.about.com/od/css/f/blfaqhidden.htm

多かれ少なかれ、visibilityドキュメントの流れに「スペース」を維持しますが、フローにdisplay影響を与えます(完全に削除することを含む)。混同しやすい、まったく異なる概念。

これはdemoで、ソース マークアップと CSS です。

<div id="wrapper">
    <div id="novisibility" class="test">
        <p>Visiblity<br>Will you see me?<br>Will I still be "there"?</p>
    </div>
    <div id="nodisplay" class="test">
        <p>Block<br>Will you see me?<br>Will I disappear?</p>
    </div>
    <p id="buttons">
        <button type="button" id="visibility">Toggle Visibility</button>
        <button type="button" id="display">Toggle Display</button>
    </p>
</div>

#wrapper.hide #nodisplay {
    display: none;
}
#wrapper.invisible #novisibility {
    visibility: hidden;
}

Javascript は.hideとの.novisibilityクラスを切り替えてい#wrapperます。

マークアップ/表示レイヤーからロジックを分離するテンプレート パターンをお勧めします。例えば:

page.php

<?php

// ... other stuff

if (isset($_GET['page'])) {
    $page = $_GET['page'];

    switch($page) {
        case "test":
           $cls = " NoDisplay";
        break;
        default:
           $cls = " Highlight";
        break;
    }
}

// ... other stuff

?>

これが CSS で定義されている場所 (styleできれば属性ではありません):

/assets/css/site.css

.PhototextContent.NoDisplay {
    display: none;
}
.PhototextContent.Highlight {
    background: yellow;
    display: block;
}

docPagePhotoInline.tpl

<!-- Other photo stuff, I presume. -->
<div id="PhotoText" class="PhotoTextContent<?php echo $cls; ?>">Your content</div>

idまた、その値を再利用しているかどうかも疑問です。ページごとに 1 つだけ固有idにする必要があります(できます) 。複数の要素をカバーするものが必要な場合は、class名前を使用して要素をクラス別にグループ化します。また、nameindivはまだ有効だと思いますが、誰も使用することはめったにありません。id要素を一意に識別するために使用します。

では、どちらが読みやすいと思いますか?私がここで何をしようとしているのかを理解するのは難しくないと思いますが、あなたが持っているものを再確認してから、頭を悩ませてください. コードは意図を表現する必要があります。手入れが行き届いていて、見ていて正しいと感じられるコードは、常に優れたコードとは限りませんが、洗練されていないむち打ちの書式設定は、多くの場合、コードに問題がある可能性を示しています。庭のようなものだと考えてください。手入れの行き届いた整然とした庭は、そうでない庭よりもはるかに魅力的です。

したがって、少なくとも基本的なテンプレート アプローチを実装します。このようないくつかのまともなチュートリアルがあります。PHP 用の Mustache をすぐに試してみたいのですが、他にもSmartyFlexyTwigDwooなどがあります。PHP 自体がテンプレート システムとして使用される可能性があり、ほとんどのテンプレート システムはテンプレートを PHP またはバイトコードにコンパイルすることに注意してください。ロジックをビューまたは表示レイヤーから分離するように注意する必要があります。

ただし、それらをアプローチと組み合わせる必要があるため、MVC パターンを使用したフレームワークをお勧めします。CodeIgniterTinyMVCKohanaCakeなど、たくさんあります。これは合理的に見えます。

http://phpsavant.com/

ただし、あまり一人でぶらぶらしないようにしてください。

于 2012-09-19T02:50:12.000 に答える