Как создать функцию шорткода для запуска скрипта на странице? - PullRequest
0 голосов
/ 14 мая 2018

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

{print gallery[1]}
{run gallery.php[1]}
{do gallery.php[1,2,3]}
{gallery.php?id=1&opt=3}  // preferred

, и он конвертирует код для печати вывода скрипта галереи., gallery.php, с предоставленными опциями.На странице отображения, если я делаю что-то вроде:

$text = str_replace ("{","<?php",$text);
$text = str_replace ("}","?>",$text);

, это разрывает страницу.Использование str_replace отлично работает для простых подстановок, возможно, для форматирования, но не здесь, как есть.

Примечания добавлены: 2018-05-17

Я использовал preg_match как предложено, и это приближает меня к пригодности для использованиярешение.Я добавил следующий текст в поле textarea, называемое introtext, как администратор:

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus mollis convallis justo, vitae pretium libero condimentum et. {simple-gallery.php 1 3} Morbi nibh nibh, blandit sit amet sodales ullamcorper, ultricies vel nulla. {simple-gallery.php 2 3} Quisque cursus erat eu felis vulputate, scelerisque tempor libero egestas. Inte ger vitae dignissim odio, eget congue mauris. Suspendisse mattis efficitur sem, ut sagittis magna sodales eu.

В моем скрипте я использовал preg_match, а затем разделил результат и получил:

text_to_be_replaced: simple-gallery.php 1 3
Match found and text extrapolated:
script: simple-gallery.php
arg1: 1
arg2: 3

Яможет успешно включать файл simple-gallery.php и отображать первое слайд-шоу с помощью include.В это время, когда я распечатываю текстовую область, она печатает текст в квадратных скобках.Я могу решить эту проблему, выполнив str_replace и вычеркнув текст, по крайней мере, для первого появления.

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

preg_match_all("/\{(.+?)\}/", $introtext,$results);
$array1 = $results[1];
$text_to_be_replaced1 = "$array1[0]";
$split1 = explode(' ',$text_to_be_replaced1);
$script1 = $split1[0];
$arg1 = $split1[1]; // if needed
$arg2 = $split1[2]; // if needed

echo $introtext; // returns everything including the bracketed text
include ("$script1");

Примечания добавлены 2018-05-20

Я пересмотрел код;он работает над добавлением параметризованной галереи или видео-скрипта, но несколько непоследователен в дополнение к выводу 1 (число 1) в текстовой области, которой принадлежит код галереи.Пересмотренный код:

preg_match_all("/\{(.+?)\}/", $introtext,$results);

foreach($results[1] as $gallery){
  $split = explode(' ',$gallery);
  $arg1 = isset($split[0]) ? $split[0] : -1;
  $arg2 = isset($split[1]) ? $split[1] : -1;
  $arg3 = isset($split[2]) ? $split[2] : -1;
  $html = include ("$arg1");
  $introtext = preg_replace("/\{" . $gallery . "\}/", $html, $introtext);
}

echo $introtext;

Отображается как:

gallery #1
gallery #2
gallery/video #3

text
1
text
1
text
1

См. Демонстрацию по адресу: http://www.dottedi.biz/demo/code/public/shortcode/shortcode.php

Ответы [ 2 ]

0 голосов
/ 27 мая 2018
want to improve above answer:

preg_match_all("/\{(.+?)\}/", $introtext, $results);
foreach ($results[1] as $gallery) {
    $split = explode(' ', $gallery);
    $arg1 = isset($split[0]) ? $split[0] : -1;
    $arg2 = isset($split[1]) ? $split[1] : -1;
    $arg3 = isset($split[2]) ? $split[2] : -1;

    ob_start();
    include "$arg1";
    $html = ob_get_contents();
    ob_end_clean();
    $introtext = preg_replace("/\{" . $gallery . "\}/", $html, $introtext);
}
echo $introtext;
---------------
0 голосов
/ 18 мая 2018

После использования регулярного выражения: preg_match_all("/\{(.+?)\}/", $introtext,$results);

Вы можете сделать что-то вроде этого:

foreach($results[1] as $gallery){
    $split = explode(' ',$gallery);
    $arg1 = isset($split1[0]) ? $split1[0] : -1; // if needed && check if the parameter exists before trying to access it
    $arg2 = isset($split1[1]) ? $split1[1] : -1; // if needed && check if the parameter exists before trying to access it
    $html = 'your code for the gallery';
    $introtext = preg_replace("/\{" . $gallery . "\}/", $html, $introtext);
}

Что заменит экземпляр {gallery.php 1 2} вашим реальным кодом галереи. А затем перейдите к следующему совпадению и повторите то же самое, где вам просто нужно будет передать свои аргументы в код галереи.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...