Question

J'ai écrit récemment mon premier plugin WP qui ajoute un shortcode pour l'intégration d'une galerie d'images jquery personnalisé dans les messages. Il est principalement simplement dépotoirs une bonne partie de HTML dans le poste, ainsi que le javascript nécessaire pour l'initialisation.

Cependant, je devais construire la sortie HTML de la procédure, comme une chaîne en PHP. Ce genre de soupe tag me pousse toujours les noix, et je suis habitué à travailler avec les cadres MVC qui fournissent des choses comme des fonctions d'aide et des modèles partiels pour générer HTML.

Quelle est l'approche générale pour les auteurs de plugins qui ont besoin de gérer de grandes quantités de HTML ou JS dynamique construit?

Était-ce utile?

La solution

@Byran M. Je tends à utiliser deux constructions, je ne vois pas souvent d'autres développeurs de WordPress en utilisant souvent, ce qui me surprend, mais je comme eux beaucoup.

1.) Heredoc

Vous pouvez stocker de gros blocs de texte comme < strong> heredocs chaîne qui pourrait ressembler à ceci afin que je puisse stocker se soucier de mélange guillemets simples et doubles:

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

Notez que les variables peuvent être transmises à une fonction comme un tableau, puis extract()ed ou vous pouvez les affecter à d'autres égards. Notez également que j'utiliser les accolades non pas parce qu'ils sont toujours nécessaires, mais ils font plus facile à lire le code. (Bien sûr, avec des fonctions comme the_content() étant sensiblement différents de get_the_content() WordPress ne fait pas toujours ce style de codage facile.)

De plus, bien qu'il ne peut pas être pertinent pour vous est si j'utilise des noms Heredoc comme HTML, SQL, etc. puis mon IDE PhpStorm injection-t syntaxe et me donnera la coloration syntaxique et saisie semi-automatique dans le heredoc.

2.) Concaténation de chaîne à l'aide d'un tableau

L'autre idiome que je aime utiliser est de collecter le contenu dans un tableau, puis implode() le tableau. Bien que je ne l'ai jamais benchmarkée ce donc il pourrait être moins utile que je suppose que je ne sais que concaténation de chaîne répétée est un tueur en tant que chaînes deviennent plus grandes (si quelqu'un sait pourquoi cette approche n'est pas mieux ou si vous connaissez une meilleure approche que je « amour d aux commentaires des hEAR):

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

Autres conseils

Commander cette fonction pour PHP:

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

Vous pouvez tamponner un fichier inclus qui contient simplement le code html en elle, dans une variable php. Cela rendra plus propre à maintenir.

Alors, vous vous retrouvez avec quelque chose comme ceci:

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

Ensuite, vous pouvez simplement revenir $ includedhtml où vous en avez besoin et il maintient votre contenu html séparé d'avoir à l'écho tout à l'intérieur des chaînes php.

Je n'ai pas réellement utilisé ce cadre, mais le modèle de modèle il offre sera probablement appel. Vous voudrez peut-être jeter un oeil à la façon dont l'auteur mettre cela sur pied.

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

  

Modèles   ========= Autant que possible, nous devons séparer PHP de HTML. Dans   Wordpress, vous verrez les deux ensemble mixte sans appréhension.   Bien que ce soit souvent un « moyen facile » de faire les choses, il est presque jamais   le droit chemin." , Nous devrions plutôt séparer les deux, gardant ainsi   notre logique pure et notre point de vue muet. A cet effet, nous avons la   méthode $ this-> render ( 'my-modèle'). Quelques exemples:

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

Cela dépend du type de HTML et JS.

JavaScript

Tout d'abord, séparer les parties dynamiques des pièces statiques, autant que possible. Ensuite, charge quel que soit les variables dynamiques dont vous avez besoin lors de l'exécution et file d'attente vos scripts statiques dans l'en-tête (ou pied de page, peu importe). Mais cette façon, la majorité de votre JS est séparé de votre PHP.

HTML

Ceci est une question de construire votre code proprement dans le PHP. Si vous avez d'énormes morceaux de HTML que vous allez réutiliser, j'enregistrer en utilisant des variables distinctes. assemblant ensuite des choses ensemble lorsque le shortcode est appelé est aussi simple que:

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

Plutôt que d'essayer de le construire sur la procédure, construire un objet (oui, les objets PHP supports) qui contient tous vos différents blocs HTML, puis le charger ceux à utiliser et les données de retraverser. Cela vous permettra d'économiser énormément de temps.

Licencié sous: CC-BY-SA avec attribution
Non affilié à wordpress.stackexchange
scroll top