2015-03-09 4 views
0

В мои дни перед Laravel (5) У меня была система, которая заменила местозаполнитель скриптом PHP с тем же именем, что и заполнитель. Эти «плагины» должны были добавить функциональность, просто добавив в текст код плагина (отредактированный моей собственной CMS).Laravel 5 заменить [string] кодом (php)/include

Позвольте мне дать вам пример:

Пользователь поддерживает страницу в CMS. На каждой странице можно выбрать несколько изображений в поле «галерея» для этой страницы. Они не добавляются в текст, поле изображений отделено от содержимого. Эти текстовые поля содержат массив (объект json) с изображениями после сохранения.

Если он хочет использовать изображения на веб-странице, он должен добавить «плагин», чтобы показать изображения, добавив [галерею] в текст в желаемой позиции.

Когда страница показана [галерея] заменена скриптом PHP (gallery.plugin.php), который берет массив изображений и показывает их красиво отформатированные и настроенные с помощью сценария галереи лайтбоксов, чтобы просматривать их в большем размере ,

Пользователи не должны беспокоиться о макете и функциональности галереи и могут размещать их в любом месте, в котором они находятся.

То, как я сделал это по-старому: (Старый, никогда не обновленный код, работал безотказно)

public function decorateContent($content) 
{ 
    if ($_parts = preg_split('/(\[.*?\])/', $content, 0, PREG_SPLIT_DELIM_CAPTURE | PREG_SPLIT_NO_EMPTY)) 
    { 
     foreach ($_parts as $key => $value) 
     { 
      if (strstr($value, "[") and strstr($value, "]")) 
      { 
       $_plugin = explode(":", str_replace(array("[", "]"), "", $value)); 
       if (file_exists("templates/plugins/" . str_replace("_", "/", trim($_plugin[0])) . ".plugin.php")) 
       { 
        $cntnt .= $this->get_include_content("templates/plugins/" . str_replace("_", "/", trim($_plugin[0])) . ".plugin.php", $_plugin); 
       } 

      } 
      else 
       $cntnt .= trim($value); 
     } 
    } 
    else 
    { 
     $cntnt = trim($cntnt); 
    } 
    return $cntnt; 
} 



function get_include_content($filename, $_plugin) 
{ 
    global $db, $Website, $parameter; 

    if (is_file($filename)) 
    { 
     ob_start(); 
     include($filename); 
     $contents = ob_get_contents(); 
     ob_end_clean(); 
     return $contents; 
    } 
    return false; 
} 

С этим я легко мог бы добавить все функции я хотел, [галерея], [form_contact ] (_ преобразуется в косую черту для пути: form/contact.php) и т. д. Просто создайте скрипт в каталоге плагина с тем же именем, что и плагин-заполнитель в тексте.

Помимо ссылок на перевод строк некоторые плагины могут быть снабжены переменными, используя: в имени плагина, например. [intro: 3] В этом примере 3 - количество интроблоков (div с содержимым), которые показаны в этом конкретном скрипте.

Где начать в Laravel 5

Я хотел бы добавить эту функцию снова в моих Laravel 5 проектов, но я хотел бы сделать это правильно на этот раз. Есть ли какие-либо предпочтительные способы сделать это прилично?

+0

Этот вопрос слишком локализован по моему мнению. – itachi

+0

«Есть ли какие-нибудь предпочтительные способы сделать это прилично?» поставил бы ваш вопрос закрытым/удержанием –

ответ

0

Все, что связано с шаблоном или представлением, должно использовать шаблоны/частичные элементы. Вы можете вытащить шаблон из любого места, где вы хотите db/file.

Перед созданием представления во время процесса сборки вы должны подобрать шаблон, в котором есть функциональность внутри и/или отправить ему параметры, в вашем примере массива изображений, а затем заменить свой собственный синтаксис в сообщении CMS/содержимое страницы или что-либо другое с лезвием включает синтаксис. Наконец, Blade проанализирует весь шаблон с добавленным плагином.

Если у вас хорошая архитектура, вы можете добавить конкретный js/css в основной шаблон, а также фрагмент, который вам нужен, и потребовать эти активы в любой шаблон.

Я думаю, что ваш вопрос большой, потому что речь идет не только о функции, но и об архитектуре и функциональности, другими словами, о реализации, и именно так вы планируете и какие проблемы вы сталкиваетесь во время процесса сборки.

Надеюсь, что это поможет :)