2017-04-22 10 views
0

私はWordpressプロジェクト(PHP)で高度なカスタムフィールドと少しのPHPを使って作業しています。2つの関数を1つの呼び出しにまとめる方法

<section> 

<?php container_start(); ?> 

    Text goes here 

<?php container_end(); ?> 

</section> 

これには以下のコードを生成します:

<section> 

<div class="container"> 

    Text goes here 

</div> 

</section> 

これは素晴らしいです期待どおりに動作するように私はいくつかのテキストの周りのコンテナのdivを作成する2つの機能を作成しました。この2つの機能は、背後にあるものです:

function container_start() { 

$container = get_sub_field('container'); 

if ($container): 
echo '<div class="container">'; 
endif; 

} 

function container_end() { 

$container = get_sub_field('container'); 

if ($container): 
echo '</div>'; 
endif; 

} 

質問:これはどのようにして最適化する方法はありますか?私はそれがあまりにも実際に2つの関数を呼び出すだけで、divを追加して閉じなければならないことがわかります。これを1回の呼び出しにまとめる方法はありますか?

答えて

0

さて、あなたはまだ二つの機能を使用する必要がありますが、多分あなたはこのような何か行うことができます:

function container_start() { 
    ob_start(); 
} 
function container_end() { 
    $container = get_sub_field('container'); 

    if ($container) 
     echo '<div class="container">'; 
    echo ob_get_contents(); 
    ob_end_clean(); 
    if ($container) 
     echo '</div>'; 
} 

だから、何をするでしょう: をあなたがcontainer_startを呼び出すときに、のob_startが印刷されたすべてのものを維持するためにPHPを言います

その後、あなたはcontainer_endを呼び出すとき、あなたは、コンテナのことを行うと、あなたが印刷されたすべてのものを維持停止するためにPHPに言うままPHPのすべてを返しob_get_contents(とあなたがそれをエコー)とob_end_cleanを呼び出す

この方法ではまだ2つの機能がありますが、get_sub_field( 'container')は一度しか呼び出されません。

0

現在の設定の利点は、タグのバランスが取れていることです。 「タグ」を閉じる。これはタグのバランスを管理する必要がありますが、これは選択肢よりもクリーンであり、HTMLでの操作方法と一致します。この上に追加した追加の魔法(たぶんタグのスタックを追跡し、汎用目的のend()の機能を持つような)は複雑さを増し、可読性に影響する可能性があります。 WordPressはPHPの上でテンプレート言語を使用しないので、すでに持っているよりもはるかに良くなることはありません。つまり、閉じたタグを取り除く1つのオプションは、複数行の文字列を関数に渡すことです。私はこの方法では大したことではないが、それは利用可能であり、他の方法のための飛び降り点になるかもしれない。

<?php 

$var = 'foo'; 

function wrapper_function($inner) { 
    echo '<div class="container">'; 
    echo $inner; 
    echo '</div>'; 
} 

?> 

Something before. 

<?php wrapper_function(<<<EOF 
    This text goes inside. I can put <html> in here, plus 
    any $var since I'm using HEREDOC rather than NOWDOC. 

    http://php.net/manual/en/language.types.string.php#language.types.string.syntax.heredoc 
EOF 
); ?> 

Something after. 

出力:

Something before. 

<div class="container"> This text goes inside. I can put <html> in here, plus 
    any foo since I'm using HEREDOC rather than NOWDOC. 

    http://php.net/manual/en/language.types.string.php#language.types.string.syntax.heredoc</div> 
Something after. 

一つの欠点:あなたは入れ子にすることができず、このメソッドを使用して機能します。

関連する問題