0

最近、大量の表形式データを使用していることに気付きました。生のhtmlを書くのは快適ですが、次のようなhtmlタグを書く時間を短縮するのに役立つより簡単な方法(または実装する価値のあるライブラリ)があるかどうか疑問に思っています。

<tr><td></td></tr>

私は独自のカスタム関数を作成しましたが、最終的には必ずしも役立つとは限らず、スクリプトの速度が低下する可能性があると思います。現在、プロジェクトは小さいので、それに対処できる可能性があります。例:

echo '<tr class="test_class">
    <td>' . $content . '</td>
    <td>' . $second_content . '</td>
<tr/>';

これが私の現在の関数の例です:

tr("test_class");
   td(); echo $content; escape(td);
   td(); echo $second_content; escape(td);
escape(tr);

人々の考えを聞くのを楽しみにしています。

4

4 に答える 4

2

有効にしている場合short_open_tags(必要に応じて有効にできると仮定した場合)、次のようなテンプレート構文を使用できます。

<table>
    <?php foreach($myList as $key => $value): ?>
    <tr>
        <td><?= $value["key1"] ?></td>
        <td><?= $value["key2"] ?></td>
        ...
    </tr>
    <?php endforeach; ?>
</table>

これにより、表形式のデータを作成するという点で、仕事が楽になるかもしれません。

于 2012-10-09T13:43:52.833 に答える
2

これを行うには複数の方法があります...

  1. データ ソースに基づいて html 要素を生成できるクラスを含む、独自の html ヘルパー ライブラリを記述します。たとえば、次のように呼び出すことができます。

    <?php
       HtmlHelper::Table("someArrayOfValues", "idOfTable", "styleOfTable");
    ?>
    

    このアイデアを適切に実装すれば、これは再利用可能な優れたソリューションです。私は数日前にこれで遊んでいましたが、本当に簡単です。

  2. 1.難しい場合は、アイデアを分割できます...ただし、示したほど深くはありませんが、代わりに行全体を生成します。

    <?php
        foreach ($myArray as $key => $value)
        {
             echo HtmlHelper::Row(...);
        }
    ?>
    
  3. この機能を提供するライブラリを見つけてください。恐れ入りますが、これについてはお力になれません。生成されたマークアップを制御したい。

アイデアが得られることを願っています。

于 2012-10-09T13:46:40.510 に答える
1

Web 開発における PHP の最大の強みは、少ない呼び出しでどれだけ処理できるかということです。特にこの場合、言語の制約を処理する必要なくコンテンツをエコーすることができます。したがって、一般的には、本当に正当な理由がない限り、エコーを使用して html を直接記述することが、PHP を最大限に活用する最も簡単なソリューションであり、シンプルであることは常に良いことです。

そうは言っても、複雑なテーブル生成が多い場合は、http://pear.php.net/package/HTML_Table/のようなライブラリを使用すると、コードが読みやすくなります。さらに、オブジェクトをテーブル表示にシリアライズするようなことをしようとしている場合は、そのために作成されたシリアライザーを作成することが、機能に最も適したソリューションになります。

上記のコードでは、透過的なユーティリティ関数が害を及ぼすことはないと思います。ただし、一貫して同じ数の列がある場合の方向ではなく、表のセル区切りマークアップ (一度に行を生成する関数) と結合された配列を使用できます。

于 2012-10-09T13:46:20.293 に答える
0

いくつかのテンプレート エンジンを使用する方が快適です。twigまたはsmartyを試してください

于 2012-10-09T13:43:31.550 に答える