Frage

Ich habe kürzlich mein erstes WP -Plugin geschrieben, das einen Shortcode zum Einbetten einer benutzerdefinierten JQuery -Bildergalerie in Beiträge hinzufügt. Es gibt hauptsächlich nur einen guten Stück HTML in den Posten, zusammen mit JavaScript, die für die Initialisierung erforderlich sind.

Ich musste jedoch die HTML -Ausgabe prozedural als Zeichenfolge in PHP erstellen. Diese Art von Tag -Suppe treibt mich immer verrückt an, und ich bin es gewohnt, mit MVC -Frameworks zu arbeiten, die Dinge wie Helferfunktionen und Teilvorlagen für die Erzeugung von HTML bieten.

Was ist der allgemeine Ansatz für Plugin -Autoren, die große Mengen von dynamisch erstellten HTML oder JS verwalten müssen?

War es hilfreich?

Lösung

@Byran M. Ich neige dazu, zwei Konstrukte zu verwenden. Ich sehe andere WordPress -Entwickler oft nicht oft, was mich überrascht, aber ich mag sie sehr.

1.) Heredocs

Sie können große Textblöcke als speichern als Heredocs Zeichenfolge, die so aussehen könnte, damit ich mir Sorgen über das Mischen von Einzel- und Doppelzitaten speichern kann:

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

Beachten Sie, dass die Variablen an eine Funktion als Array und dann an eine Funktion übergeben werden könnten extract()Ed oder Sie könnten sie auf andere Weise zuweisen. Beachten Sie auch, dass ich die Zahnspangen nicht verwende, nicht weil sie immer benötigt werden, aber der Code leichter zu lesen ist. (Natürlich mit Funktionen wie the_content() wesentlich anders sein von get_the_content() WordPress erleichtert diese Art der Codierung nicht immer.)

Außerdem ist es mehr, obwohl es für Sie möglicherweise nicht relevant ist, wenn ich Erkernamen wie HTML, SQL usw. verwende, dann meine IDE Phpstorming Hat Syntax -Injektion und gibt mir Autoperete und Syntaxfärben innerhalb des Heredoc.

2.) String -Verkettung mit einem Array

Die andere Idiom, die ich gerne verwende implode() das Array. Obwohl ich dies nie mit dem Benchmarking verankert habe, könnte es weniger hilfreich sein, als ich davon ausgehe, dass ich weiß, dass eine wiederholte String -Verkettung ein Killer ist, wenn die Saiten größer werden (wenn jemand weiß, warum dieser Ansatz nicht besser ist oder wenn Sie einen besseren Ansatz kennen, Ich liebe es, Feedback zu hören):

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);         
}   

Andere Tipps

Überprüfen Sie diese Funktion für PHP:

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

Sie können eine mitgelieferte Datei puffern, die nur HTML -Code darin enthalten würde, in eine PHP -Variable. Dies macht es sauberer zu pflegen.

Sie haben also so etwas:

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

Dann können Sie einfach $ includeHtml zurückgeben, wo Sie es benötigen, und es hält Ihren HTML -Inhalt davon trennen, alles in den PHP -Zeichenfolgen wiederzugeben.

Ich habe dieses Framework nicht verwendet, aber das Vorlagenmodell, das es bietet, wird wahrscheinlich ansprechen. Vielleicht möchten Sie einen Blick darauf werfen, wie der Autor das eingerichtet hat.

https://github.com/emerson/sanity-wordpress-plugin-framework

Vorlagen ========= Wenn möglich, sollten wir PHP von HTML trennen. In WordPress sehen Sie die beiden ohne Besorgnis zusammen. Dies ist zwar oft ein "einfacher Weg", Dinge zu tun, aber es ist fast nie der "richtige Weg". Stattdessen sollten wir die beiden trennen und so unsere Logik rein und unsere Ansichten dumm halten. Zu diesem Zweck haben wir die Methode $ this-> Render ('My-Template'). Ein paar Beispiele:

    // 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>

Das hängt von der Art von HTML und JS ab.

JavaScript

Trennen Sie zunächst die dynamischen Teile so weit wie möglich von den statischen Teilen. Laden Sie dann alle dynamischen Variablen, die Sie zur Laufzeit benötigen, und stellen Sie Ihre statischen Skripte im Header (oder Fußzeile, was auch immer) an. Aber auf diese Weise ist der Großteil Ihres JS von Ihrem PHP getrennt.

Html

Dies geht darum, Ihren Code sauber im PHP zu bauen. Wenn Sie riesige HTML-Teile haben, die Sie wiederverwenden werden, würde ich diese als separate Variablen speichern. Dann ist es so einfach, Dinge zusammenzusetzen, wenn der Shortcode aufgerufen wird:

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

Anstatt zu versuchen, es prozedural auszubauen, erstellen Sie ein Objekt (ja, PHP unterstützt Objekte), das alle Ihre verschiedenen HTML -Blöcke enthält, und wies es an, welche zu verwenden und welche Daten zurückgeben werden sollen. Dies spart Ihnen enorme Zeit.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit wordpress.stackexchange
scroll top