ФорумПрограммированиеPHP для идиотов → Снова парсер шаблонов

Снова парсер шаблонов

  • phpdude

    Сообщения: 26646 Репутация: N Группа: в ухо

    Spritz 23 февраля 2009 г. 18:10, спустя 27 минут 25 секунд

    слушай, почему бы тебе не вынести его в класс и не сделать обработку вот таким образом?

    $text = preg_replace_callback("#{\s*(.*?)\s*}#ismu",array($this,"_process"),$text);
    Сапожник без сапог
  • artoodetoo

    Сообщения: 5147 Репутация: N Группа: в ухо

    Spritz 23 февраля 2009 г. 18:20, спустя 9 минут 25 секунд

    ну да, callback — это вариант. надо будет поиграть с этим.
    спасибо!
    ιιlllιlllι унц-унц
  • phpdude

    Сообщения: 26646 Репутация: N Группа: в ухо

    Spritz 23 февраля 2009 г. 18:25, спустя 5 минут 27 секунд


    ну да, callback — это вариант. надо будет поиграть с этим.
    спасибо!
    жжешь))

    я просто сразу спалил что preg_split это кастыль какой то.
    давай я угадаю твою задачу/проблему

    тебе надо было вычленить все <!– –>, зная где они, иметь возможность заменить их на чтото. ты решил разбить весь шаблон в массив - куски кода разделенные этими элементами, заменить эти элементы, а потом слить вместе? зы: код не смотрел, могу в корне ошибаться :)
    Сапожник без сапог
  • Trej Gun

    Сообщения: 5305 Репутация: N Группа: в ухо

    Spritz 23 февраля 2009 г. 18:29, спустя 4 минуты 23 секунды

    phpdude, я от этой мысли проблевался…


    ЗЫ PHP не «объектно ориентированный», он «объектно способный».
  • phpdude

    Сообщения: 26646 Репутация: N Группа: в ухо

    Spritz 23 февраля 2009 г. 18:31, спустя 1 минуту 43 секунды

    CTAPbIu_MABP, предложи свой вариант, ты от обоих мыслей жуе проблевался :)
    Сапожник без сапог
  • artoodetoo

    Сообщения: 5147 Репутация: N Группа: в ухо

    Spritz 23 февраля 2009 г. 18:47, спустя 16 минут 10 секунд

    ты верно ухватил суть. остальное - детали.
    вместо split можно сделать с preg callback. побочный эффект — еще одна функция — логично объединить их в одном классе.
    по мне так если можно обойтись без класса, обойдись :) это в PHP. в "десктопных" языках я не парюсь.

    пожалуй сделаю два варианта: в одной функции со split и в классе с preg callback
    ιιlllιlllι унц-унц
  • Lirck

    Сообщения: 1658 Репутация: N Группа: Джедаи

    Spritz 23 февраля 2009 г. 18:55, спустя 8 минут 4 секунды

    я уже этих шаблонизаторов наштамповал штук 5…
  • phpdude

    Сообщения: 26646 Репутация: N Группа: в ухо

    Spritz 23 февраля 2009 г. 18:56, спустя 46 секунд


    я уже этих шаблонизаторов наштамповал штук 5…
    и все гавно?

    дуд жжет
    Сапожник без сапог
  • Lirck

    Сообщения: 1658 Репутация: N Группа: Джедаи

    Spritz 23 февраля 2009 г. 18:56, спустя 13 секунд



    я уже этих шаблонизаторов наштамповал штук 5…
    и все гавно?

    дуд жжет

    ты угадал
    ща юзаю шаблонизатор сапа .. ыыы мне пох
  • phpdude

    Сообщения: 26646 Репутация: N Группа: в ухо

    Spritz 23 февраля 2009 г. 19:04, спустя 7 минут 55 секунд




    я уже этих шаблонизаторов наштамповал штук 5…
    и все гавно?

    дуд жжет

    ты угадал
    ща юзаю шаблонизатор сапа .. ыыы мне пох
    как дурно кончил …
    Сапожник без сапог
  • Lirck

    Сообщения: 1658 Репутация: N Группа: Джедаи

    Spritz 23 февраля 2009 г. 19:09, спустя 5 минут 8 секунд

    бле, ну а че юзать???????????? я еще не кончил
  • artoodetoo

    Сообщения: 5147 Репутация: N Группа: в ухо

    Spritz 23 февраля 2009 г. 19:39, спустя 29 минут 22 секунды

    aivee, а ты мой поюзай :) потом скажешь что понравилось, а что нет.
    ιιlllιlllι унц-унц
  • Lirck

    Сообщения: 1658 Репутация: N Группа: Джедаи

    Spritz 23 февраля 2009 г. 19:42, спустя 3 минуты 32 секунды

    мне влом писать <!– –>. супершаблонизатор
    class Template
    {
    protected $tpl = '';
    protected $vars = array();

    public function __construct($tpl)
    {
    $dir = Core::instance()->registry('configs/template/dir');

    if (is_readable($dir . $tpl . '.php'))
    {
    $this->tpl = $dir . $tpl . '.php';
    }
    else
    {
    return false;
    }
    }

    public function assign($arr)
    {
    if (is_array($arr))
    {
    $this->vars = $arr;
    return true;
    }

    return false;
    }

    public function __set($var, $val)
    {
    $this->vars[$var] = $val;
    }

    public function __get($var)
    {
    if (isset($this->vars[$var]))
    {
    return $this->vars[$var];
    }

    return false;
    }

    public function get()
    {
    ob_start();
    include_once $this->tpl;
    $content = ob_get_contents();
    ob_end_clean();
    return $content;
    }

    public function display($exit = false)
    {
    echo $this->get();

    if ($exit)
    {
    exit();
    }

    return true;
    }
    }
  • Lirck

    Сообщения: 1658 Репутация: N Группа: Джедаи

    Spritz 23 февраля 2009 г. 19:45, спустя 3 минуты 7 секунд

    [font size=100500]achtung!!!! баг на пыхе!!! внизу маего камента ip пыхи[/font]
    а жжаль
  • artoodetoo

    Сообщения: 5147 Репутация: N Группа: в ухо

    Spritz 23 февраля 2009 г. 19:52, спустя 6 минут 9 секунд

    вот чиста для тебя переделал на {var}
    даже компактнее чем нативный код

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

    <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ru" lang="ru" dir="ltr">
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>{title}</title>
    <style>
    TD {border: 1px solid red; padding: 1em;}
    </style>
    </head>

    <body>

    {include header}

    <p>Message: {message}</p>

    <p>Code: {code}</p>

    <p>Escaped code: {@code}</p>

    Array access:
    <ul>
    <li>xarr['a']: "{xarr:a}" - element</li>
    <li>esc(xarr['a']): "{@xarr:a}" - escaped element</li>
    <li>xarr['b']['r']: "{xarrbr}" - multidimentional</li>
    <li>xarr['b'][12]: "{xarrb12}" - multidimentional, int key</li>
    <li>xarr['c'][8]: "{xarr:c:x}" - (wrong index)</li>
    <li>xarr['d'][1]: "{xarr:d:1}" - array d is reference</li>
    </ul>

    </body>
    </html>


    {xarr:d:1} в php-эквиваленте будет <?= $data['xarr']['d'][1] ?>
    {@xarr:a} в php-эквиваленте будет <?= htmlescape($data['xarr']['a']) ?>
    выбирай :)))
    ιιlllιlllι унц-унц

Пожалуйста, авторизуйтесь, чтобы написать комментарий!