web-dev-qa-db-ja.com

プラグインコードを介して大きなHTML出力を処理する

私は最近、投稿にカスタムjquery画像ギャラリーを埋め込むためのショートコードを追加する私の最初のWPプラグインを書きました。初期化に必要なjavascriptと共に、主にHTMLのかなりの部分を投稿にダンプします。

しかし、私はPHPの文字列として手続き的にHTML出力を構築しなければなりませんでした。この種のタグスープはいつも私の気持ちを駆り立てます。私は、ヘルパー関数やHTMLを生成するための部分的なテンプレートのようなものを提供するMVCフレームワークを扱うことに慣れています。

動的に構築された大量のHTMLまたはJSを管理する必要があるプラグイン作成者のための一般的なアプローチは何ですか?

9
Bryan M.

@Byran M.私は他のWordPress開発者があまり頻繁に使用しているとは思わない2つの構成要素を使用する傾向があります。

1.)エレドックス

大きなブロックのテキストを heredocs stringのように格納することができます。これは、一重引用符と二重引用符の混在を心配することなく格納できます。

   $html=<<<HTML
<input type="{$type}" size="{$size}" id="{$id}" class="{$class}" value="{$value}" />
HTML;

変数は配列として関数に渡されてからextract()edされるか、他の方法で代入することができます。また、私は中括弧を使用していますが、これは必須ではありませんが、コードを読みやすくするためです。 (もちろん、the_content()のような関数がget_the_content()と実質的に異なる場合は、WordPressがこのスタイルのコーディングを容易にするわけではありません。)

さらに、あなたには関係ないかもしれませんが、私がHTML、SQLなどのようなheredoc名を使うならば、私のIDE PhpStorm はシンタックスインジェクションを行い、オートコンプリートとシンタックスカラーリングを与えます。主人公。

2.)配列を使った文字列の連結

私が使用したいもう1つのイディオムは、コンテンツを配列に集め、それからその配列をimplode()することです。私はこれをベンチマークしたことがないので、文字列が大きくなるにつれて文字列連結を繰り返すことは致命的であることを私が知っていると思うよりは役に立たないかもしれません。フィードバックを聞きたいです。

function my_get_form_and_fields($input_items) {
    $html = array();
    $html[] = '<form name="my_form" method="get">';
    foreach($input_items as $input_item) {
        extract($input_item);
        $html=<<<HTML
<input type="{$type}" size="{$size}" id="{$id}" class="{$class}" value="{$value}" />
HTML;
    $html[] = '</form>';
    return implode("\n",$html);         
}   
12
MikeSchinkel

PHP用のこの関数をチェックしてください。

http://php.net/manual/en/function.ob-start.php

HTMLコードを含むインクルードファイルをphp変数にバッファすることができます。これにより、メンテナンスが簡単になります。

だからあなたはこのようなものになってしまいます:

ob_start();
   include('path/to/my/html/file.php');
   $includedhtml = ob_get_contents();
ob_end_clean();

それから、必要な場所に$ includedhtmlを返すだけで、HTMLコンテンツをphp文字列の内側にエコーアウトする必要がなくなります。

5
Todd Perkins

私は実際にはこのフレームワークを使用していませんが、それが提供するテンプレートモデルはおそらく魅力的でしょう。あなたは作者がそれをどのように設定したかを見たいと思うかもしれません。

https://github.com/Emerson/Sanity-Wordpress-Plugin-Framework

テンプレート=========可能な限り、HTMLからPHPを分離する必要があります。 Wordpressでは、この2つが混乱することなく混在しているのがわかります。これはたいていの場合、「やさしい方法」ですが、「正しい方法」ということはほとんどありません。代わりに、この2つを分離して、論理を純粋に保ち、見解を鈍くする必要があります。この目的のために、$ this-> render( 'my-template')メソッドがあります。いくつかの例:

    // From within a method in our controller
    $this->data['message'] = 'Pass this on to the template please';
    $this->render('my-template');

    // Meanwhile, in the /plugin/views/my-template.php file
    <h2>The Separation of Logic and Views</h2>
    <p><?php echo $this->data['message'];?></p>
4
marfarma

それはHTMLとJSの種類によって異なります。

JavaScript

まず最初に、動的部分と静的部分をできるだけ分離します。その後、実行時に必要な動的変数をロードし、静的スクリプトをヘッダー(またはフッターなど)に入れます。しかしこのように、あなたのJSの大部分はあなたのPHPから分離されています。

HTML

これはPHPでコードをきれいに構築することの問題です。大量のHTMLが再利用される場合は、それらを別々の変数として格納してください。ショートコードが呼ばれたときにそれから物事をつなぎ合わせることは同じくらい簡単です:

echo $firstblock;
echo $shortcodecontent;
echo $lastblock;

手続き的に構築するのではなく、すべての異なるHTMLブロックを含むオブジェクトを構築し(はい、PHPはオブジェクトをサポートします)、使用するブロックと渡すデータを指定します。これはあなたに莫大な時間を節約するでしょう。

2
EAMann