Pregunta

Hace poco escribí mi primer plugin WP que añade un código corto para incrustar una galería de imágenes jQuery personalizados en mensajes. Está principalmente simplemente vuelca un buen trozo de HTML en el puesto, junto con javascript necesario para la inicialización.

Sin embargo, tenía que construir la salida HTML de procedimiento, como una cadena en PHP. Este tipo de sopa etiqueta siempre me conduce nueces, y estoy acostumbrado a trabajar con marcos MVC que proporcionan cosas como funciones de ayuda y plantillas parciales para la generación de HTML.

¿Cuál es el enfoque general para los autores de plugins que necesitan manejar grandes cantidades de HTML o de forma dinámica JS?

¿Fue útil?

Solución

@Byran M. tiendo a utilizar dos construcciones no suelo ver otros desarrolladores de WordPress usando a menudo, lo que me sorprende, pero me gustan mucho.

1.) Sintaxis heredoc

Puede almacenar grandes bloques de texto como < strong> heredocs string que podría tener este aspecto para que pueda almacenar preocuparse de mezclar comillas simples y dobles:

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

Tenga en cuenta que las variables podrían ser pasados ??a una función como una matriz y luego extract()ed o se puede asignarlos de otras maneras. También tenga en cuenta que yo uso las llaves no porque siempre se requieren pero hacen que el código sea más fácil de leer. (Por supuesto, con funciones como the_content() ser materialmente diferentes de WordPress get_the_content() no siempre hace que este estilo de codificación fácil.)

Lo que es más, aunque puede que no sea importante para usted es si utilizo nombres heredoc como HTML, SQL, etc. entonces mi IDE PhpStorm hace la inyección sintaxis y me dará Autocompletar y colores de sintaxis dentro del heredoc.

2.) Concatenación de cadenas utilizando una matriz

El otro idioma me gusta usar es recoger el contenido en una matriz y luego implode() la matriz. Aunque nunca he Benchmarked esto por lo que podría ser menos útil que supongo que sí sé que repite la concatenación de cadenas es un asesino como cadenas se hacen más grandes (si alguien sabe por qué este enfoque no es mejor o si conoce un mejor enfoque que 'd amor a la retroalimentación oyen):

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

Otros consejos

Pedido esta función para PHP:

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

Se puede proteger un archivo incluido que sólo contienen código html en ella, en una variable php. Esto hará que sea más limpia de mantener.

Así que terminan con algo como esto:

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

A continuación, sólo puede volver $ includedhtml donde lo necesite y que mantiene su contenido html separada de tener que repetir todo dentro de las cadenas de php.

No he utilizado realmente este marco, pero el modelo de plantilla que ofrece probablemente será de interés. Es posible que desee echar un vistazo a cómo el autor establece que hasta.

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

Plantillas ========= Siempre que sea posible, hay que separar PHP desde HTML. Dentro Wordpress, verá los dos juntos mixta sin aprensión. Si bien esto es a menudo una "salida fácil" de hacer las cosas, es casi nunca la direccion correcta." En cambio, debemos separar los dos, lo que mantiene nuestra lógica pura y nuestros puntos de vista mudo. Para ello contamos con la $ This-> render ( 'mi-plantilla') método. Unos pocos ejemplos:

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

Eso depende del tipo de HTML y JS.

JavaScript

En primer lugar, separar las partes dinámicas de las partes estáticas tanto como sea posible. A continuación, la carga lo que necesita variables dinámicas en tiempo de ejecución y las secuencias de comandos en cola estáticos en el encabezado (o pie de página, lo que sea). Pero de esta manera, la mayor parte de su JS está separado de su PHP.

HTML

Esto es una cuestión de la construcción de su código de forma limpia en el PHP. Si tiene enormes trozos de HTML que se va a reutilización, me gustaría almacenar los como variables independientes. Luego armando cosas juntos cuando el código corto se llama es tan simple como:

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

En lugar de tratar de construir fuera de procedimiento, construir un objeto (Sí, compatible con PHP objetos) que contiene todos los diferentes bloques de HTML, entonces instruyen cuáles usar y los datos que se pasan de vuelta. Esto le ahorrará enormes cantidades de tiempo.

Licenciado bajo: CC-BY-SA con atribución
scroll top