3

PHPを使用して、次のようなHTMLテーブルをレンダリングしています。

--------------------------------------------------
| title    | description         | actions       |
-------------------------------------------------|
| title1   | desc1               | edit / delete |
| title2   | desc2               | edit / delete |
| title3   | desc3               | edit / delete |
| title4   | desc4               | edit / delete |
--------------------------------------------------

コードは次のように機能します(この例では、バージョンを削除しました!いいえtheadなどtbody):

<table>
  <?php foreach ( $tableData as $row ): ?>
  <tr>

    <!-- Render columns (title, description)
    <?php foreach ( $columnData as $column ): ?>
    <td>
      <?= $row[$column['name']]; ?>
    </td>
    <?php endforeach; ?>

    <!-- Render actions -->
    <?php foreach ( $actions as $action ): ?>
    <td>
      <?= include($action); // include the proper action button! ?>
    </td>
    <? endforeach; ?>

  </tr>
  <?php endforeach; ?>
</table>

これは私に望ましい結果を与えます。しかし、これには1つだけ問題があります。1000以上のレコードがあると、少し遅くなります。includeこれは、すべてのテーブル行に対してを実行しているためです。削除するとinclude、すべてが非常に高速に実行されます。

このincludedファイルには、いくつかのPHPロジックが含まれています。だから私はただすることはできませんfile_get_contents。ええと、できましたがeval()、コンテンツを解析するために使用する必要があります。しかし、私はむしろその関数をまったく使用したくありません。

だから今、私は含まれているファイルをどうにかしてキャッシュすることが可能かどうか疑問に思っていますか?PHPが実際のファイルを何度も何度も積極的に含める必要がなく、キャッシュから取得するようにするには?このようなことは可能ですか?

または、より良い選択肢はありますか?

4

5 に答える 5

1

すべてのアクション(関数)を1つのファイルに入れ、そのファイルを1回含めることができます。ループ内で、名前に応じてさまざまな関数を呼び出します。変数関数の例

于 2013-02-09T13:06:09.837 に答える
0

そのページに移動するときに編集または削除しているため、テーブルを再度開くたびにテーブルが(ほぼ...)変更される可能性が高いため、キャッシュは最適なオプションではない可能性があります。

別の方法は、ページ付けを使用して「すべて表示」ボタンを追加し、本当に必要な場合にのみ完全なテーブルが生成されるようにすることです。

于 2013-02-09T13:09:31.873 に答える
0

アクションレンダラーに問題があるようです。
別々のファイルに配置するほど大きくすることはできません。単純なハイパーリンクをレンダリングするには、テンプレートに1行のHTMLコードが必要です。
これらのレンダラーにロジックが多すぎる場合は、それをビジネスロジックの部分に移動する必要があります。

ページネーションも確かに役立ちます。本当のペ​​ージネーションとは、呼び出しごとに処理されるレコードが100個だけで、1000個すべてではなく、そのうち900個が非表示になることを意味します。

于 2013-02-09T13:21:54.623 に答える
0

1つのオプションは、「テンプレート」ルートを使用することです。ファイルからすべてのPHPを取り除き、データ部分を「タグ」に置き換えます。次に、ファイルを1回ロードし(file_get_contents)、タグをデータに置き換えます。

//template.html
Replace this template {variable} with {search} and {replace}.
{conditional_html}

//template.php
$tpl = file_get_contents('template.html');
$output = '';
foreach($record as $r) {
    $data = array('{variable}'=>$r['field1'], 
      '{search}'=>$r['field2'], 
      '{replace}'=>$r['field3'],
      '{contional_html}'=>($r['field4']='1A' ? 'Display Conditional' : '') };
    $output .= str_replace(array_keys($data), $data, $tpl);
}

これによりファイルアクセスが不要になりますが、独自のテンプレートマークアップ言語を作成しています。理想的には、ビジネスロジックは表示/レンダリングから分離されています。

于 2013-02-09T13:54:02.220 に答える
-1

include_once()はあなたが探しているものかもしれません。リンクは次のとおりです:http: //php.net/manual/en/function.include-once.php

于 2013-02-09T13:25:11.610 に答える