Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.04.25;
Скачать: CL | DM;

Вниз

PageProducer на РHP   Найти похожие ветки 

 
Undert ©   (2004-03-25 23:45) [0]

Есть в Делфи такой компонент PageProducer, для тех кто ни разу не использовал - рендеринг текстов с тегами, т.е. есть текст какой-либо и в нем есть теги вида <#name param1=value1 paramN=valueN>, компонент находит теги и вызывает процедуру в параметрах которой передаются название тега и его параметры.

Вопрос, как такое же реализовать в PHP с такой же скоростью не используя StrPos и если есть где-нибудь пример, то где его можно посмотреть ?


 
Undert ©   (2004-03-26 10:28) [1]

Здесь что нету phpшников ? :)


 
blackman ©   (2004-03-26 10:41) [2]

Вот тут посмотри
http://blackman.wp-club.net/cfaq/index.php?catid=14
"Управление сайтом"
http://blackman.wp-club.net/cfaq/index.php?qid=2&catid=14
или
"Вперед", "Назад" и "Оглавление"
http://blackman.wp-club.net/cfaq/index.php?qid=23&catid=14
И что еще там было...


 
Undert ©   (2004-04-04 18:16) [3]


> blackman ©


У тебя там ничего про то что я имел в виду не сказано.

Может кто-нибудь всё же поможет ?  :)


 
DVM ©   (2004-04-04 18:19) [4]


> Вопрос, как такое же реализовать в PHP с такой же скоростью
> не используя StrPos

StrPos в PHP самое быстрое что есть. Регулярные выражения медленнее еще в десятки раз. Написать замену на C. В тысячи раз быстрее PHP будет.


 
Undert ©   (2004-04-04 18:23) [5]


> DVM ©  


Хмм.. раз так уж все дико, то есть ли хотя бы быстрый метод разбиения строки типа:
param1=value1 paramN=valueN
на ассоциативный массив ? или тоже "вручную"?


 
DVM ©   (2004-04-04 18:30) [6]

Explode() наверное.


 
Undert ©   (2004-04-04 18:43) [7]


$TagSpecial = "#";

function commentStr($str) {
 return "<!--// $str //-->";

}; //func

function ExecuteTag($tagName, $params) {
 $result = commentStr($tagname);

//if ($tagName="..") $result = ..

}; //func

function ExecuteProducer($page) {
 $_from = 0;
 $_rbtag = substr_count($page, "<$TagSpecial");
 $_rctag = substr_count($page, ">");
 while (strpos($page, "<$TagSpecial", $_from) === true) {
   $_btag = strpos($page, "<$TagSpecial", $_from);
   $_ctag = strpos($page, ">", $_btag);
   $_from = $_ctag + 1;
   $_tlen = $_ctag - $_btag - 2;
   $_rplc = substr($page, $_btag, $tlen + 2);
   $_tstr = trim(substr($page, $_btag+2, $_tlen));
   $_tarr = explode(" ", $_tstr);
   $params = array();
   for ($i=0;$i<count($_tarr);$i++) {
      if (strpos($_tarr[$i], "=") === true) {
        $_tmp = explode("=", $_tarr[$i]);
        $params[$_tmp[0]] = $_tmp[1];
      }; //if
   }; //for
   $page = str_replace($_rplc, ExecuteTag($_tarr[0], $params), $page);
 }; //while
if ($_rbtag!=$_rctag) {
 return "Произошла ошибка!";
} else {
 return "Сценарий выполнен!";
};
}; //func


А разве это не медленно ?


 
Undert ©   (2004-04-04 18:48) [8]

P.S. Написал за 5 минут, проверить негде, но принцип думаю ясен


 
DVM ©   (2004-04-04 18:51) [9]

Честно говоря, я бы сделал также скорее всего. Не сказать что быстро, но и не сильно медленно. Удовлетворительно.
Я не настолько знаю PHP чтобы утверждать, что другого способа нет, но кажется это так.


 
nikkie ©   (2004-04-04 18:56) [10]

не могу я врубиться зачем городить PageProducer на php, когда и так php-код можно размещать внутри html-страницы. PageProducer придуман из-за того, что такого сделать на дельфи нельзя.


 
DVM ©   (2004-04-04 18:59) [11]


> nikkie ©   (04.04.04 18:56) [10]

я думаю это надо для реализации так называемого шаблонизатора, кто знает что такое - поймет. Пример - лебедевский Parser.


 
Undert ©   (2004-04-04 19:00) [12]


> nikkie ©  


Дык создавать темплейты, где будут лежать свои теги ...

Проще ж сделать так: www.misite.ru/ru/forum/2/96/

И того получаем: index.php?lang=ru&template=forum&forumid=2&message=96, где читаем tpl/forum.htt и выводим согласно заданным в нем тегам, где файл index.php даже не знает что это файл форума!!


 
Undert ©   (2004-04-04 19:01) [13]

Вернее index.php?lang=ru&template=forum&p1=2&p2=96


 
Undert ©   (2004-04-04 19:02) [14]

А функции вызываемые темплейтов сами разберутся что есть p1 и p2



Страницы: 1 вся ветка

Текущий архив: 2004.04.25;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.024 c
1-1081155133
MegaVolt
2004-04-05 12:52
2004.04.25
Простенький архиватор.


1-1081367285
777666
2004-04-07 23:48
2004.04.25
Вертикальный разделитель в меню. Как?


14-1081174629
McSimm
2004-04-05 18:17
2004.04.25
Объявление


1-1081345884
besen-ok
2004-04-07 17:51
2004.04.25
Как сделать функцию получающую в виде параметра ссылку на структу


8-1074586575
eRoR_rrr
2004-01-20 11:16
2004.04.25
Как обеспечить плавный плавный переход