it-swarm-eu.dev

zabývající se velkým výstupem HTML prostřednictvím kódu pluginu

Nedávno jsem napsal svůj první WP plugin, který přidává krátký kód pro vložení vlastní galerie obrázků do příspěvků. Je to v první řadě jen vypíše dobrý kus HTML do postu, spolu s javascriptem nezbytným pro inicializaci.

Nicméně, musel jsem HTML výstup postavit procedurálně jako řetězec v PHP. Tento druh polévky s tagy mě vždy nutí a jsem zvyklý pracovat s MVC frameworky, které poskytují věci jako pomocné funkce a částečné šablony pro generování HTML.

Jaký je obecný přístup pro autory pluginů, kteří potřebují spravovat velké množství dynamicky vytvořeného HTML nebo JS?

9
Bryan M.

@Byran M. Mám tendenci používat dva konstrukty často nevidím jiné WordPress vývojáře, kteří často používají, což mě překvapuje, ale mám je hodně rád.

1.) Heredocs

Můžete ukládat velké bloky textu jako heredocs string, který by mohl vypadat takto, takže můžu uložit starosti o míchání jednoduchých a dvojitých uvozovek:

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

Všimněte si, že proměnné mohou být předány funkci jako pole a pak extract()ed nebo je můžete přiřadit jinými způsoby. Všimněte si také, že používám závorky ne proto, že jsou vždy nutné, ale usnadňují čtení kódu. (Samozřejmě s funkcemi jako the_content(), které se podstatně liší od get_the_content() WordPressu není tento styl kódování snadný.)

A co víc, i když to nemusí být pro vás důležité, pokud používám heredoc jména jako HTML, SQL, atd. Pak moje IDE PhpStorm dělá syntaxi injekce a dá mi autocomplete a syntaxi zbarvení uvnitř heredoc.

2.) Řetězec zřetězení pomocí pole

Dalším idiomem, který se mi líbí, je sbírat obsah do pole a pak implode() pole. I když jsem to nikdy neprovedl, takže by to mohlo být méně užitečné než předpokládám, že vím, že opakované zřetězení řetězců je vrah, protože struny se zvětšují (pokud někdo ví, proč tento přístup není o nic lepší, nebo pokud znáte lepší přístup I rád bych slyšel zpětnou vazbu):

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

Vyzkoušejte tuto funkci pro PHP:

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

Můžete do vyrovnávací paměti zahrnout soubor, který by v něm obsahoval pouze html kód, do proměnné php. To bude udržovat čistší.

Takže skončíte s něčím takovým:

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

Pak se můžete vrátit $ includedhtml tam, kde ho potřebujete, a udržuje váš obsah html odděleně od toho, aby bylo nutné, aby to bylo v e-mailu.

5
Todd Perkins

Ve skutečnosti jsem tento rámec nepoužil, ale model šablony, který nabízí, bude pravděpodobně přitažlivý. Možná se budete chtít podívat, jak to autor nastavil.

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

Šablony ======= Kdykoliv je to možné, měli bychom oddělit PHP od HTML. Uvnitř Wordpressu uvidíte dva smíšené dohromady bez obav. I když je to často "snadný způsob" dělat věci, je to téměř nikdy "správná cesta". Místo toho bychom měli tyto dva oddělit, a tak udržet naši logiku čistou a naše názory hloupé. Pro tento účel máme metodu $ this-> render ('my-template'). Několik příkladů:

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

To závisí na typu HTML a JS.

JavaScript

Nejdříve oddělte dynamické části od statických částí. Pak nahrajte jakékoli dynamické proměnné, které potřebujete za běhu, a fronty statických skriptů do záhlaví (nebo zápatí, cokoliv). Ale tímto způsobem je většina vašeho JS oddělena od PHP.

HTML

Jedná se o to, abyste si kód čistě vytvořili v PHP. Pokud máte obrovské kousky HTML, které budete znovu používat, uložil bych je jako samostatné proměnné. Poté, co se tento krátký kód nazývá, se spočítá věci tak jednoduché, jako:

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

Namísto toho, abychom se snažili o procesní proces, vytvořte objekt (ano, PHP podporuje objekty), který obsahuje všechny vaše různé bloky HTML, a pak jej poučte, které z nich mají použít a jaká data předat zpět. To vám ušetří obrovské množství času.

2
EAMann