lidando com grande saída HTML via código do plugin

9

Recentemente, escrevi meu primeiro plug-in WP que adiciona um shortcode para incorporar uma galeria de imagens jquery personalizada em posts. É basicamente apenas despeja um bom pedaço de HTML no post, juntamente com o javascript necessário para a inicialização.

No entanto, eu tive que construir a saída HTML processualmente, como uma string no PHP. Esse tipo de tag soup sempre me deixa louco, e estou acostumado a trabalhar com frameworks MVC que fornecem coisas como funções auxiliares e modelos parciais para gerar HTML.

Qual é a abordagem geral para os autores de plug-ins que precisam gerenciar grandes quantidades de HTML ou JS construídos dinamicamente?

    
por Bryan M. 12.08.2010 / 23:23

4 respostas

12

@Byran M. Eu costumo usar duas construções que muitas vezes não vejo outros desenvolvedores do WordPress usando, o que me surpreende, mas eu gosto muito delas.

1.) Heredocs

Você pode armazenar grandes blocos de texto como < strong> heredocs string que pode se parecer com isso para que eu possa armazenar a preocupação de misturar aspas simples e duplas:

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

Observe que as variáveis podem ser passadas para uma função como uma matriz e, em seguida, extract() ed, ou você pode atribuí-las de outras maneiras. Observe também que eu uso as chaves não porque elas são sempre necessárias, mas facilitam a leitura do código. (É claro que com funções como the_content() sendo materialmente diferentes de get_the_content() , o WordPress nem sempre facilita esse estilo de codificação.)

Além do mais, embora possa não ser relevante para você é se eu usar nomes heredoc como HTML, SQL, etc., então meu IDE PhpStorm faz a injeção de sintaxe e me dará autocomplete e coloração de sintaxe dentro do heredoc.

2.) Concatenação de String usando uma Matriz

O outro idioma que eu gosto de usar é coletar o conteúdo em uma matriz e, em seguida, implode() da matriz. Embora eu nunca tenha comparado isso, então poderia ser menos útil do que eu supor que eu sei que a concatenação de string repetida é um assassino à medida que as strings aumentam (se alguém souber por que essa abordagem não é melhor ou se você conhece uma abordagem melhor eu adoraria ouvir feedback):

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

Checkout esta função para PHP:

enlace

Você pode armazenar em buffer um arquivo incluído que conteria apenas o código html, em uma variável php. Isso tornará mais limpo para manter.

Então você acaba com algo assim:

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

Então você pode simplesmente retornar $ includedhtml onde você precisa e ele mantém seu conteúdo html separado de ter que ecoar tudo dentro de strings php.

    
por Todd Perkins 13.08.2010 / 00:34
4

Na verdade, não usei esse framework, mas o modelo de modelo que ele oferece provavelmente será atraente. Você pode querer dar uma olhada em como o autor configurou isso.

enlace

  

Modelos   ========= Sempre que possível, devemos separar o PHP do HTML. Dentro   Wordpress, você verá os dois misturados sem receio.   Enquanto isso muitas vezes é um "caminho fácil" de fazer as coisas, é quase nunca   o "caminho certo". Em vez disso, devemos separar os dois, mantendo assim   nossa lógica pura e nossas visões mudas. Para este efeito, temos o   $ this- > render ('meu-modelo'). Alguns exemplos:

    // 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>
    
por marfarma 30.09.2011 / 01:28
2

Isso depende do tipo de HTML e JS.

JavaScript

Antes de mais nada, separe as partes dinâmicas das partes estáticas o máximo possível. Em seguida, carregue quaisquer variáveis dinâmicas que você precisar em tempo de execução e enfileire seus scripts estáticos no cabeçalho (ou rodapé, qualquer que seja). Mas desta forma, a maioria do seu JS é separada do seu PHP.

HTML

Esta é uma questão de construir seu código de forma limpa no PHP. Se você tiver grandes blocos de HTML que você vai reutilizar, eu os armazenaria como variáveis separadas. Em seguida, juntando as coisas quando o shortcode é chamado é tão simples como:

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

Em vez de tentar construí-lo proceduralmente, construa um objeto (sim, o PHP suporta objetos) que contenha todos os seus diferentes blocos de HTML, então instrua quais deles usar e quais dados devem ser transmitidos. Isso vai economizar muito tempo.

    
por EAMann 13.08.2010 / 00:00