Наверх
Разработчик может самостоятельно определить дополнительные функции-обработчики и соответствующие им теги.
В библиотеке уже определены несколько дополнительных функций-обработчиков, которые охватывают наиболее часто встречающиеся ситуации:
- "fileInclude" - возвращает содержимое файла, считанное в строку по заданному имени файла;
- "makeRepeat" - применяет заданную функцию к каждому элементу заданного массива; результат работы функции поэлементно накапливается и возвращается в виде строки после обработки последнего элемента массива;
- "makeBool" - в зависимости от заданной переменной возвращает один из двух возможных результатов.
Чтобы воспользоваться этими функциями, необходимо подключить их в качестве дополнительных функций-обработчиков :
// список дополнительных функций-обработчиков
$new_pars = array('makeBool', 'makeRepeat', 'fileInclude');
// добавить дополнительные функции-обработчики
$GlobalParser->init($new_pars);
ПРИМЕЧАНИЕ: По умолчанию все эти уже функции подключены в файле "init.inc.php".
Каждой из описанных функций соответствует свой предопределенный callback-тег.
Рассмотрим каждую из них более подробно.
Функция "fileInclude" обрабатывает callback-тег вида (в квадратных скобках указаны необязательные атрибуты):
name=fileInclude
[ save=имя_глобальной_переменной ]
[ func=имя_функции ]
[ ffunc=имя_дополнительной_функции ]>
имя_файла
где содержимое тега определяет имя заданного файла, а атрибуты могут задавать дополнительные параметры обработки:
-
save=имя_глобальной_переменной
если этот атрибут указан, то в $GLOBALS [ имя_глобальной_переменной ] будет записан результат работы функции "fileInclude";
-
func=имя_функции
если этот атрибут указан, то к строке, в которую предварительно считано содержимое заданного файла, будет применена заданная этим атрибутом функция;
-
ffunc=имя_дополнительной_функции
если этот атрибут указан, то прежде чем начать работу с файлом, к имени файла будет применена заданная этим атрибутом функция.
Пример вызова функции "fileInclude" :
This is the demo how to call "fileInclude" function by "callback"-tag:
included_file.html
We came here by calling "fileInclude" function
Today date is F j, Y, g:i a
/* тестовый PHP-скрипт : test3.php */
// путь к файлам библиотеки,
define('INCLUDE_DIR', 'parse/');
// инициализация библиотеки
require_once(INCLUDE_DIR.'init.inc.php');
// инициализация исходной строки с помощью функции "parseFile"
$str = parseFile('main_file.html');
// вызов функции-обработчика "parseTag" в PHP-скрипте
echo parseTag($str);
?>
Результат работы функции "parseTag" :
This is the demo how to call "fileInclude" function by "callback"-tag:
We came here by calling "fileInclude" function
Today date is September 22, 2002, 11:53 pm
Как это работает?
С помощью функции "parseFile" мы считываем содержимое файла "main_file.html" в строку и сохраняем эту строку в переменной $str. Затем начинаем обрабатывать полученную строку с помощью фукнции "parseTag".
Как только функция "parseTag" встречает в тексте callback-тег
included_file.html
тут же вызывается функция "fileInclude", где
- included_file.html - имя заданного файла;
- parseTag - функция, которая будет применена к содержимому файла "included_file.html".
С помощью функции "fileInclude" содержимое файла "included_file.html" считывается в строку, и к этой строке применяется функция "parseTag". Строка, полученная в результате, подставляется вместо callback-тега.
Функция "makeRepeat" обрабатывает callback-тег вида (в квадратных скобках указаны необязательные атрибуты):
name=makeRepeat
var=имя_переменной
[ save=имя_глобальной_переменной ]
[ func=имя_функции ]
[ ffunc=имя_дополнительной_функции ]>
содержимое_тега
где содержимое тега определяет исходную строку, которая будет передаваться в качестве первого параметра в функцию, вызываемую для каждого элемента заданного массива, а атрибуты задают имя переменной, хранящей обрабатываемый массив и некоторые дополнительные параметры обработки:
-
var=имя_переменной (обязательный атрибут)
имя переменной-массива, который обрабатывается поэлементно;
-
save=имя_глобальной_переменной
если этот атрибут указан, то в $GLOBALS [ имя_глобальной_переменной ] будет записан результат работы функции "makeRepeat";
-
func=имя_функции
если этот атрибут указан, то к содержимому_тега будет применена функция, заданная этим атрибутом, столько раз, сколько элементов содержит массив;
-
ffunc=имя_дополнительной_функции
если этот атрибут указан, то по окончании обработки элементов массива к результирующей строке, в которую накапливались результаты обработки содержимого_тега, будет применена заданная этим атрибутом функция.
Пример вызова функции "makeRepeat" :
This is the demo how to call "makeRepeat" function by "callback"-tag:
/* тестовый PHP-скрипт : test4.php */
// путь к файлам библиотеки,
define('INCLUDE_DIR', 'parse/');
// инициализация библиотеки
require_once(INCLUDE_DIR.'init.inc.php');
// инициализация массива
$colors = array('red' => 'red', 'green' => 'green', 'blue' => 'blue', 'yellow' => '#ffdd00');
// инициализация исходной строки
$str = join('', file('testrepeat_file.html'));
// вызов функции-обработчика "parseTag" в PHP-скрипте
echo parseTag($str);
?>
Результат работы функции "parseTag" :
This is the demo how to call "makeRepeat" function by "callback"-tag:
This color is red
|
This color is green
|
This color is blue
|
This color is yellow
|
Как это работает? Как только функция "parseTag" встречает в тексте callback-тег
This is color
|
тут же вызывается функция "makeRepeat", где
- $colors - имя заданного массива;
- parseStr - функция, которая будет применяться к строке
This is color
|
столько раз, сколько элементов в массиве $colors; причем при каждом вызове функции "parseStr" в переменной $idx будет храниться индекс текущего обрабатываемого элемента массива, а в переменной $elem будет храниться значение текущего обрабатываемого элемента массива, и обе эти переменных можно использовать для замен или в обрабатываемом файле "testrepeat_file.html" (что, собственно, и происходит).
В начале функции "makeRepeat" определяется переменная возврата $res, которая сначала равна пустой строке, но на каждой итерации в эту переменную добавляется результат работы функции "parseStr" для текущего обработанного элемента массива.
- parseTag - функция, которая будет применена переменной возврата $res по окончании обработки массива.
Строка, полученная из переменной возврата $res, подставляется вместо callback-тега.
ПРИМЕЧАНИЕ. С помощью функции "makeRepeat" можно также обрабатывать двумерные массивы, как ассоциативные, так и нумерованные.
Функция "makeBool" обрабатывает callback-тег вида (в квадратных скобках указаны необязательные атрибуты):
name=makeBool
var=имя_переменной
[ delim=разделитель ]
[ type=invert ]
[ save=имя_глобальной_переменной ]
[ func=имя_функции ]>
true-часть
[ разделитель ]
[ false-часть ]
где содержимое тега представляет собой сложную конструкцию, состояющую из трех частей (в квадратных скобках указаны необязательные части), а атрибуты задают имя переменной, которая будет проверена на непустоту, и некоторые дополнительные параметры обработки:
-
var=имя_переменной (обязательный атрибут)
имя переменной, которая будет проверена на непустоту;
true-часть и false-часть - это две альтернативы; только одна из них будет обработана, в зависимости от того, установлен ли атрибут "type", и пуста ли заданная переменная;
true-часть обрабатывается, если:
- заданная переменная имеет ненулевое (непустое) значение и атрибут "type" не установлен;
- заданная переменная пуста, но type=invert;
в противном случае обрабатывается false-часть;
-
delim=разделитель
если этот атрибут указан, то он должен содержать в качестве разделителя строку; эта строка будет использоваться в качестве разделителя между true- и false-частью; если этот атрибут не установлен, будет использоваться разделитель по умолчанию ( );
-
type=invert
если этот атрибут указан и равен "invert", то вместо проверки на непустоту заданная переменная проверяется на пустоту.
-
save=имя_глобальной_переменной
если этот атрибут указан, то в $GLOBALS [ имя_глобальной_переменной ] будет записан результат работы функции "makeBool";
-
func=имя_функции
если этот атрибут указан, то к обрабатываемой части будет применена функция, заданная этим атрибутом.
ПРИМЕЧАНИЕ: Если разделитель не встречается внутри содержимого тега, то всё содержимое тега считается true-частью, а в качестве false-части принимается пустая строка.
Пример вызова функции "makeBool" :
This is the demo how to call "makeBool" function by "callback"-tag:
The color of the string below depends on $color value.
If $color is empty, then the string below is black.
Otherwise, the string has the same color that $color value.
name=makeBool
var=color
func=parseStr> black">
Test the color
/* тестовый PHP-скрипт : test5.php */
// путь к файлам библиотеки,
define('INCLUDE_DIR', 'parse/');
// инициализация библиотеки
require_once(INCLUDE_DIR.'init.inc.php');
// инициализация переменной $color
// попробуйте поменять значения этой переменной,
// чтобы увидеть, как изменится цвет тестовой строки
$color = 'magenta';
// инициализация исходной строки
$str = join('', file('testbool_file.html'));
// вызов функции-обработчика "parseTag" в PHP-скрипте
echo parseTag($str);
?>
Результат работы функции "parseTag" :
This is the demo how to call "makeBool" function by "callback"-tag:
The color of the string below depends on $color value.
If $color is empty, then the string below is black.
Otherwise, the string has the same color that $color value. Test the color
Как это работает? Как только функция "parseTag" встречает в тексте callback-тег
name=makeBool
var=color
func=parseStr> black
тут же вызывается функция "makeBool", где
· $color - имя проверяемой переменной;
· - true-часть;
· - разделитель;
· black - false-часть;
· parseStr - функция, которая будет применяться к выбранной части;
Поскольку в данном примере переменная $color непуста и атрибут "type" не установлен, то будет использоваться true-часть.
Строка, полученная в результате обработки true-части с помощью функции "parseStr", подставляется вместо callback-тега.
|