mysql — шорткоды в стиле WordPress в Ckeditor / Stack Overflow

Я создал собственную CMS. Недавно я добавил возможность динамически создавать страницы. Я использовал CKEditor для содержания этих страниц.
Я также хотел бы запустить некоторые функции PHP, которые могут быть включены в содержимое страницы, хранящейся в MySQL.
Я не хочу хранить реальный код PHP в базе данных, а скорее имена функций. Например, на странице, хранящейся в базе данных, я могу иметь.

<?php //begin output
hello world!
check out this latest news article.
news($type, $id);
//end output
?>

Каков наилучший способ найти и выполнить эту существующую функцию, не используя EVAL, если она найдена в выходных данных? Я думал в духе коротких кодов в стиле WordPress. Может быть, [[news (latest, 71]]]? Тогда есть функция для поиска и выполнения этих функций, если они существуют в моем файле functions.php. Не совсем уверен, что лучший способ это сделать.
Я не ищу ни одного кода ответов, но больше рекомендую подобный сценарий, особенно наиболее безопасный от возможных инъекций.

0

Решение

Я нашел решение покопаться и найти эту тему
Как создать функцию WordPress в стиле шорткода в PHP

Я могу передать такие короткие коды в CKEditor

[[utube 1 video_id]]

Затем на моей странице, которая отображает код:

print shortcodify($page_content);

используя эту функцию:

function shortcodify($string){
return preg_replace_callback('#\[\[(.*?)\]\]#', function ($matches) {
$whitespace_explode = explode(" ", $matches[1]);
$fnName = array_shift($whitespace_explode);
return function_exists($fnName) ? call_user_func_array($fnName,$whitespace_explode) : $matches[0];
}, $string);
}

Если имя функции существует (utube), она запустит функцию.
Единственная проблема, с которой я столкнулся на данный момент, не имеет значения, где я размещаю [[shortcode]] в моем редакторе, он всегда выполняется первым.
Например, в CKEditor я положил:

Hello world! Check out my latest video
[[utube 1 video_id]]

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

0

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector