Работа с большим выходом HTML с помощью кода плагина

wordpress.stackexchange https://wordpress.stackexchange.com/questions/272

Вопрос

Недавно я написал свой первый плагин WP, который добавляет шорт -код для внедрения пользовательской галереи изображений JQuery в сообщения. В первую очередь он просто сбрасывает хорошую часть HTML в сообщение, а также JavaScript, необходимый для инициализации.

Тем не менее, мне пришлось построить процедурную процедуру HTML -вывода в качестве строки в PHP. Этот вид супа с меткой всегда сводит меня с ума, и я привык работать с каркасами MVC, которые предоставляют такие вещи, как вспомогательные функции и частичные шаблоны для генерации HTML.

Каков общий подход для авторов плагинов, которым необходимо управлять большими объемами динамически построенных HTML или JS?

Это было полезно?

Решение

@Byran M. Я склонен использовать две конструкции, которые я часто не вижу, чтобы другие разработчики WordPress используют часто, что меня удивляет, но они мне очень нравятся.

1.) наследники

Вы можете хранить большие блоки текста как Heredocs Строка, которая может выглядеть так, чтобы я мог хранить беспокойство о смешивании одиночных и двойных кавычек:

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

Обратите внимание, что переменные могут быть переданы функции в качестве массива, а затем extract()Эд или вы могли бы назначить их другими способами. Также обратите внимание, что я использую скобки не потому, что они всегда требуются, но они облегчают чтение кода. (Конечно с такими функциями, как the_content() существенно отличаться от get_the_content() WordPress не всегда облегчает этот стиль кодирования.)

Более того, хотя это может не соответствовать вам Phpstorm Синтаксис внедрит и даст мне автозаполнение и синтаксис раскраски в Heredoc.

2.) Строка конкатенация с использованием массива

Другая идиома, которую я люблю использовать, - это собрать контент в массив, а затем implode() массив. Хотя я никогда не сравнивал это, так что это могло быть менее полезным, чем я предполагаю, что знаю, что повторная конкатенация строки является убийцей, так как строки становятся больше (если кто -то знает, почему этот подход не лучше или если вы знаете лучший подход, я D Love услышать отзывы):

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

Другие советы

Оформить эту функцию для PHP:

http://php.net/manual/en/function.obstart.php

Вы можете буферировать включенный файл, который просто содержит в нем HTML -код, в переменную PHP. Это сделает его чище для поддержания.

Итак, вы получите что -то вроде этого:

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

Тогда вы можете просто вернуть $ inclucthtml, где вам это нужно, и он защищает ваш HTML -контент отдельным от необходимости повторять все это внутри струн PHP.

Я на самом деле не использовал эту структуру, но модель шаблона, которую он предлагает, вероятно, понравится. Возможно, вы захотите взглянуть на то, как автор это настроил.

https://github.com/emerson/sanity-wordpress-lugin-framework

Шаблоны ========= По возможности, мы должны отделить PHP от HTML. В WordPress вы увидите два смешанных без задержания. Хотя это часто «простой способ» делать дела, это почти никогда не «правильный путь». Вместо этого мы должны разделить их, тем самым сохраняя нашу логику чистой и наши взгляды глупыми. Для этой цели у нас есть метод $ this-> рендеринг ('my-template'). Несколько примеров:

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

Это зависит от типа HTML и JS.

JavaScript

Прежде всего, как можно больше отделить динамические части от статических частей. Затем загрузите любые динамические переменные, которые вам нужны во время выполнения, и в очереди ваши статические сценарии в заголовке (или нижний колонтитул, что угодно). Но таким образом, большая часть вашего JS отделена от вашего PHP.

HTML

Это вопрос чистого построения вашего кода в PHP. Если у вас есть огромные куски HTML, которые вы собираетесь повторно использовать, я бы хранил их в качестве отдельных переменных. Затем объединить вещи, когда называется шорткод, так же просто, как:

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

Вместо того, чтобы пытаться построить его процедурно, создать объект (да, PHP поддерживает объекты), который содержит все ваши различные блоки HTML, а затем инструктируйте его, какие из них использовать и какие данные передают обратно. Это сэкономит вам огромное количество времени.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с wordpress.stackexchange
scroll top