0

たとえば、さまざまなコンテンツを何度も挿入したい非常に特殊な書式設定のリストがあります。

だから私は関数を持っているかもしれません:

<?
function fancy_container (contents_array) {
  <?
    <ul>
      <? for($contents_array as $content) { ?>
        <li class='special'><? echo $content ?><div class='other-specials'></div></li>
      <? } ?>
    </ul>
  ?>
}
?>

それは機能しますが、次のように呼び出したいです:

<?
  fancy_container(array(?>
    <div class='whatever'>hi there</div>
    <div class='whatever'>hi there</div>
    <div class='whatever'>hi there</div>
  <?), ?>
    <div class='other-junk'>hiya</div>
    <div class='other-junk'>hiya</div>
    <div class='other-junk'>hiya</div>
  <?))
?>

ヒアドキュメントでこれを行う方法を見つけましたが、それはちょっと厄介なようです。私はこれについて間違った方法で進んでいますか?私は PHP の専門家ではないので、通常のやり方や制限についてはよく知りません。ruby yield を使用してこれを行う方法は知っていますが、php についてはわかりません。

html コンテンツをコンテナー (またはコンテナー) に挿入したいだけで、html をヒアドキュメント テキストではなく html にしたいのです。

ありがとう

4

2 に答える 2

0

php関数ではなく、divタグをそこに配置しないのはなぜですか?PHPの影響を受けるスタイルが必要な場合は、クラスを吐き出すPHP関数をお勧めします<div class="<?php echo getClass();?>">..content..</div>

于 2012-10-25T21:58:24.560 に答える
0

マーティン・ラインが言ったように、それは少し後ろ向きで、奇妙なやり方だと思います。おそらく、意図的に最終的な使用の全範囲を表示しないためです。これがあなたのコードをクリーンアップし、もう少し正気になるように作成したものです。構文エラーがあり、関数の呼び出し方法など、PHP で許可されていないものがあります。

<?php

function fancy_container ($contents_array) {

    if (!is_array($contents_array) || empty($contents_array)) {
        return '';
    }

    $output = '';
    $output .= '<ul>'.PHP_EOL;
    foreach ($contents_array as $content) {
        $output .= '<li class="special">'.$content.'<div class="other-specials"></div></li>'.PHP_EOL;
    }
    $output .= '</ul>'.PHP_EOL;

    return $output;

}

$contents = array();

ob_start();
?>

    <div class="whatever">hi there</div>
    <div class="whatever">hi there</div>
    <div class="whatever">hi there</div>

<?php

$contents[] = ob_get_contents();
ob_end_clean();
    ob_start();
?>

    <div class="other-junk">hiya</div>
    <div class="other-junk">hiya</div>
    <div class="other-junk">hiya</div>

<?php
$contents[] = ob_get_contents();

ob_end_clean();

echo fancy_container($contents);

?>

マークアップを出力します

<ul>
<li class="special">
    <div class="whatever">hi there</div>
    <div class="whatever">hi there</div>
    <div class="whatever">hi there</div>

<div class="other-specials"></div></li>
<li class="special">    
    <div class="other-junk">hiya</div>
    <div class="other-junk">hiya</div>
    <div class="other-junk">hiya</div>

<div class="other-specials"></div></li>
</ul>
于 2012-10-25T22:52:55.620 に答える