que trata con una salida HTML grande a través de un código de complemento

9

Hace poco escribí mi primer complemento de WP que agrega un shortcode para incrustar una galería de imágenes de jquery personalizada en las publicaciones. Principalmente, solo se descarga una buena parte de HTML en la publicación, junto con el javascript necesario para la inicialización.

Sin embargo, tuve que compilar la salida HTML de manera procesal, como una cadena en PHP. Este tipo de sopa de etiquetas siempre me vuelve loco, y estoy acostumbrado a trabajar con marcos MVC que proporcionan funciones como funciones de ayuda y plantillas parciales para generar HTML.

¿Cuál es el enfoque general para los autores de complementos que necesitan administrar grandes cantidades de HTML o JS creados dinámicamente?

    
pregunta Bryan M. 12.08.2010 - 23:23

4 respuestas

12

@Byran M. Tiendo a usar dos construcciones que no veo a menudo que otros desarrolladores de WordPress usan a menudo, lo que me sorprende, pero me gustan mucho.

1.) Heredocs

Puede almacenar grandes bloques de texto como < Una cadena fuerte> heredocs que podría tener este aspecto, por lo que puedo guardar la preocupación 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 pueden pasarse a una función como una matriz y luego extract() ed o puede asignarlas de otras maneras. También tenga en cuenta que utilizo las llaves no porque siempre son necesarias sino que hacen que el código sea más fácil de leer. (Por supuesto, las funciones como the_content() son sustancialmente diferentes de get_the_content() WordPress no siempre facilita este tipo de codificación).

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

2.) Concatenación de cadenas utilizando una matriz

El otro idioma que me gusta usar es recopilar el contenido en una matriz y luego implode() la matriz. Aunque nunca lo he evaluado, podría ser menos útil de lo que supongo. Sé que la concatenación de cadenas repetida es un factor asesino a medida que las cadenas se vuelven más grandes (si alguien sabe por qué este enfoque no es mejor o si conoce un método mejor) Me encantaría escuchar comentarios):

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);         
}   
    
respondido por el MikeSchinkel 13.08.2010 - 00:40
4

Compruebe esta función para PHP:

enlace

Puede almacenar un archivo incluido en el búfer que solo contendría el código html en una variable php. Esto lo hará más limpio de mantener.

Entonces terminas con algo como esto:

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

Luego puedes devolver $ includedhtml donde lo necesites y mantendrá tu contenido html separado de tener que hacer eco de todo dentro de las cadenas de PHP.

    
respondido por el Todd Perkins 13.08.2010 - 00:34
4

Realmente no he usado este marco, pero el modelo de plantilla que ofrece probablemente resultará atractivo. Es posible que desee echar un vistazo a cómo el autor configuró eso.

enlace

  

Plantillas   ========= Siempre que sea posible, debemos separar PHP de HTML. Dentro   Wordpress, verás los dos mezclados entre sí sin temor.   Si bien esta es a menudo una "manera fácil" de hacer las cosas, casi nunca es   la manera correcta." En cambio, deberíamos segregar los dos, manteniendo así   Nuestra lógica pura y nuestros puntos de vista mudos. Para ello contamos con la   Método de $ this- > render ('my-template'). Algunos 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>
    
respondido por el marfarma 30.09.2011 - 01:28
2

Eso depende del tipo de HTML y JS.

JavaScript

En primer lugar, separe las partes dinámicas de las partes estáticas tanto como sea posible. Luego, cargue las variables dinámicas que necesite en tiempo de ejecución y ponga en cola sus scripts estáticos en el encabezado (o pie de página, lo que sea). Pero de esta manera, la mayoría de su JS está separada de su PHP.

HTML

Esto es una cuestión de construir su código limpiamente en el PHP. Si tiene enormes trozos de HTML que va a reutilizar, los almacenaría como variables separadas. Luego, unir las cosas cuando se llama el código abreviado es tan simple como:

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

En lugar de tratar de construirlo de manera procesal, compile un objeto (sí, PHP soporta objetos) que contiene todos sus diferentes bloques de HTML, luego indíqueles cuáles usar y qué datos devolver. Esto te ahorrará enormes cantidades de tiempo.

    
respondido por el EAMann 13.08.2010 - 00:00

Lea otras preguntas en las etiquetas