IMHO.WS

IMHO.WS (http://www.imho.ws/index.php)
-   Веб-программирование (http://www.imho.ws/forumdisplay.php?f=29)
-   -   [PHP4] Помогите дописать скрипт-шаблонизатор (http://www.imho.ws/showthread.php?t=82646)

Psionic Vision 28.03.2005 06:05

[PHP4] Помогите дописать скрипт-шаблонизатор
 
Вообщем, пытаюсь я тут написать мини шаблонизатор.

main.php:

PHP код:

<?php
    $var1 
"this is var1";
    
$var2 "this is var2";

    
$filename "template.txt";

    
$handle fopen($filename"r");
    
$content fread($handlefilesize($filename));
    
fclose($handle);

    
$content preg_replace("/<%-([A-z0-9]*?)-%>/i""$\\1"$content);

    print(
$content);
?>


template.txt:

Код:

<%-var1-%><%-var2-%>
Проблематичное место - то, на что я заменяю. Выводит ошибку:
Notice: Undefined variable: \1 in /home/public_html/test.php on line 10

Не знаю, как вставить туда нужную переменную. Помогите, плииз. Заранее спасибо.

is_absent 28.03.2005 08:06

Бакс убери :)

Цитата:

Neo:
"$\\1"
вот тут

Psionic Vision 28.03.2005 08:21

Кто такой бакс и откуда его надо убрать??

Sensey 28.03.2005 09:56

бакс - это $

is_absent 28.03.2005 11:31

Есть вот это
Цитата:

Neo:
$content = preg_replace("/<%-([A-z0-9]*?)-%>/i", "$\\1", $content);
Надо вот так:
$content = preg_replace("/<%-([A-z0-9]*?)-%>/i", "\\1", $content);

Psionic Vision 28.03.2005 17:41

Ну, тогда ты мена не совсем понял.
Допустим, если нашлось сочетание var1, то мне нужно заменить его на переменную $var1, которая была определена чуть выше =((

is_absent 28.03.2005 19:18

тогда так:
$content = preg_replace("/<%-([A-z0-9]*?)-%>/ie", "\$\\1", $content);

Psionic Vision 28.03.2005 21:07

Хм.. Не работает.

Вообщем, я это уже реализовал чуть иначе:

PHP код:

        preg_match_all("/<%-([A-z0-9]*?)-%>/i"$template$output);

         foreach (
$output[1] as $value) {
            if (!isset($
$value)) {
                
$template str_replace("<%-$value-%>""<b>Invalid Variable '$value'</b>"$template);
            } else {
                
$template str_replace("<%-$value-%>", $$value$template);
            }
        } 

Только вот почему здесь preg match all возвращает пустой индекс 0, а не индекс 1?

Sheryld 28.03.2005 22:37

вроде там по-умолчанию вот этот флаг PREG_PATTERN_ORDER, в $output[0] тогда должно быть полное совпадение(т.е. набор совпадений полностью удовлетсворяющих шаблону), а его видимо нет.

PREG_SET_ORDER - а если указать вот этот флаг, то тогда в $output[0] первое найденное совпадение(точнее набор совпадений) вообще.

ну а дальше смотри по докам.

p.s. могу и ошибаться:)

Psionic Vision 28.03.2005 23:21

А что за набор полностью удовлетворяющий совпадению?
Если он не удовлетворяет полностью, значит он не удовлетворяет вообще... Или я чего-то не понимаю...

И еще - если я хочу вызвать фунцкию как замену - не получается...

PHP код:

$template preg_replace("/\[function=([A-z]*)\](.*)\[\/function\]/"doTag('\\1','\\2'), $template); 

В функцию передает неправильный параметр (\1 и \2)... =((

Psionic Vision 29.03.2005 04:32

Вот если бы я только знал как передать функции результаты работа регеха, то все проблемы были бы решены.. =((

Sheryld 29.03.2005 13:22

регулярное выражение — как матрешка.

Psionic Vision 29.03.2005 15:58

Sheryld
Рабочий пример, пожалуйста...
При чем здесь матрешка? =//

Psionic Vision 30.03.2005 05:13

Что, никто не может помочь?
Я тут заметил одну странную вещь:
Если один параметр, то все работает, если много - то передает только последний.

Т.е.:

$var = preg_replace($searchpattern, funcy('\\1'), $var)

работает, но

$var = preg_replace($searchpattern, funcy('\\1','\\2'), $var)

передает только \\2. А вместо значения \\1 оно передает строку "\1"... Что я делаю не так? Даже если я пишу

$var = preg_replace($searchpattern, funcy('\\2','\\2'), $var)

эффект тот же......

--------------------

Ага, кажется я окончательно понял:
регех передает строку "\1", я обрабатывает ее при получении. Но \1 является числом, и мне нужно чтобы функция-получатель обработала ее, а не строку \1... =((((

Psionic Vision 31.03.2005 05:25

В общем, я уже разобрался сам.
Всем спасибо за отсутствие помощи...

Sheryld 31.03.2005 09:15

и что тебе не понятно? уже и так разжевали все :p


Часовой пояс GMT +4, время: 09:44.

Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.