Форум: "Потрепаться";
Текущий архив: 2004.04.25;
Скачать: [xml.tar.bz2];
Вниз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;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.035 c