Как выдернуть текст в переменную, который написан между 2 тегами

deseper

Новичок
Как выдернуть текст в переменную, который написан между 2 тегами

Ну к примеру есть у меня хтмл-код, который записан в переменную $html_code:
PHP:
<html>
<head>
<title>United Document</title>
</head>
<body>
<table>
<tr><td>первая ячейка</td></tr>
<tr><td>первая ячейка</td></tr>
</table>
</body>
</html>
Мне нужно в перменную $varible выдернуть код, который идет от тега <body> до </body>. Тоесть переменная $varible будет иметь значение:
PHP:
<table>
<tr><td>первая ячейка</td></tr>
<tr><td>первая ячейка</td></tr>
</table>
Всё искал такую функцию, но чего-то так и не нашел. Она вообще есть? Или регулярками только такое делается?
Между тегами <body></body> может быть любой текст, как его выдернуть?
 

[da_smag]

Новичок
Можешь вызвать функцию, которая возвращает часть строки с и до. В качестве "с" указать функцию, которая ищет первое вхождение тега <body> + длина тега, а в качестве "до" - функцию, которая ищет первое (ну или последнее - тут как тебе удобнее) вхождение тега </body> + длина тега =)

Названия функций ищи сам :ДД
 

deseper

Новичок
[da_smag]
спасибо, названия функций знаю =) stripos и substr
Но, честно говоря думал что в пхп такая нужная функция предусмотрена. Удивительно даже...

Или существует? знает кто?

-~{}~ 06.02.10 04:03:

можно ещё с помощью strstr
 

HraKK

Мудак
Команда форума
Все молчат или я тему закрываю и удаляю.


Зачем тебе получать текст от боди до боди? Откуда он берется и зачем сохранять?
 

deseper

Новичок
HraKK, ну подожди, не закрывай. Хотя я ответ получил, но может есть другие способы получше? Мне всетаки кажется существует одна функция, думаю не может такой функции не существовать, хотя по 3-ему разу перечитываю их, не нахожу. Ну, может способ кто ещё какой подскажет...
Хотя если что - свою функцию напишу и разработчикам PHP отправлю чтоб добавили функционал...

Зачем мне нужно? Let Me Show You =)
В общем на блогТуре (blogtur.com - бесплатный блог-хостинг) мне очень нравится как шаблоны устроены, что-то типа:

PHP:
<html>
<head>
<title>United Document</title>
</head>
<body>
%Comment%
<table>
<tr><td>%CommentAuthor%</td></tr>
<tr><td>%CommentBody%</td></tr>
</table>
%Comment%
</body>
</html>
Тоесть шаблон комментария в главном шаблоне, это очень мне нравится. Можно конечно и файл создать Comment.tpl, но мне нравится больше так. Наверное сейчас "кое-кто" будет говорить что это плохая система, но мне вполне нравится и наврятли меня кто-то отговорит от использования такой системы, лучше варианта пока не видел. Вот зачем это нужно :)

-~{}~ 06.02.10 05:34:

Альтернатива этому, можно шаблон коммента в главном шаблоне писать, но с PHP-циклом... А мне так не нравится. Шаблон какой там не помню, но суть передал в сообщении, т.е. вам теперь понятно что мне нужно :)

-~{}~ 06.02.10 05:42:

HraKK, я заметил вы всегда такие наводящие вопросы задаете, типа зачем нужно ) Не волнуйтесь, контент ни у кого переть не собираюсь, если б пер бы - то регуляркой бы всё делал. А в шаблоне - обработка регуляркой будет тормозно работать, поэтому и ищу как сделать это одной функцией
 

baev

‹°°¬•
Команда форума
deseper, похоже, Вы не понимаете, как шаблоны работают.
Или — намеренно в заблуждение вводите.

В главном шаблоне ставится метка типа «%Comment%», а скрипт, компилирующий шаблон, на место этой метки вставляет дочерний шаблон.
И никакой «замены от body и до /body»

Так что на вопрос HraKK'а Вы так и не ответили: зачем содержимое hnml-файла «выдёргивать в переменную»?
 

deseper

Новичок
baev, сейчас обьясню, летмишоую...
Я выдергиваю шаблон коммента из главного шаблона, т.е. он между %Comment% %Comment% и получаю его в переменную $comment.
Теперь переменную $comment обрабатываю и вывожу в цикле:
$comment=str_replace('%Author%','$comment_author,$comment);
$comment=str_replace('%Date%','$comment_date,$comment);
$comment=str_replace('%body%','$comment_body,$comment);
echo($comment);

-~{}~ 06.02.10 06:04:

Сейчас с блогтура шаблон достану, покажу... А вы подскажите как так сделать

-~{}~ 06.02.10 06:13:

Вот урезаный шаблон с блогТура. Там один шаблон всего, в нем шаблон записи(Entry), а в шаблоне записи шаблон коммента. Есть предположения как на сервере обрабатываются такие шаблоны?
P.S. Я всё вырезал, привел только шаблон записи и шаблон коммента, который находится в шаблоне записи.
А шаблон записи находится в главном шаблоне(шаблоне страницы).
PHP:
<body>
<IfEntryPage>
<Entry>
<a href="<%EntryURL%>"><%EntryTitle%></a>
<IfCategoriesAllowed>Category: <%EntryCategory%></IfCategoriesAllowed>
Date: <%EntryDate%><br>
<%EntryBody%>
<IfCommentsAllowed>
<Comment>
<b><%CommentAuthor%></b>, <%CommentDate%> <%CommentTime%>
<b><%CommentTitle%></b><br>
<%CommentBody%>
</Comment>
</IfCommentsAllowed>
</Entry>
</IfEntryPage>
</body>
-~{}~ 06.02.10 06:15:

Просто если всё регулярками обрабатывать - то тормозно будет и запутанно... Просто давайте теорию обработки подобных шаблонов разберем :) Думаю многим пригодится, кто CMS пишет
 

baev

‹°°¬•
Команда форума
Я выдергиваю шаблон коммента из главного шаблона, т.е. он между %Comment% %Comment% и получаю его в переменную $comment.
Теперь переменную $comment обрабатываю и вывожу в цикле
— бред.
Зачем вообще шаблон коммента в главный шаблон записывать?
Чтобы потом его оттуда выдёргивать?
Вы сами не видите, что двойная работа делается?

Есть предположения как на сервере обрабатываются такие шаблоны?
— я Вам выше уже написал:
Автор оригинала: baev
В главном шаблоне ставится метка типа «%Comment%», а скрипт, компилирующий шаблон, на место этой метки вставляет дочерний шаблон.
Могу только добавить, что вставляется уже откомпилированный шаблон — с уже вставленными значениями переменных.
И переменные вставляются без всяких регулярок — простой заменой меток на значения переменных.

Я только вчера тут пример шаблона показывал:
http://phpclub.ru/talk/showthread.php?postid=888177#post888177
 

deseper

Новичок
— бред.
Зачем вообще шаблон коммента в главный шаблон записывать?
Ну говорю ж, приспичило :) Просто нравится система шаблонов, как на БлогТуре. И никто не отговорит меня. Помогите разобраться с такой системой, мне оч. интересно как это сделано.

— я Вам выше уже написал:
Автор оригинала: baev
В главном шаблоне ставится метка типа «%Comment%», а скрипт, компилирующий шаблон, на место этой метки вставляет дочерний шаблон.
Ну там не так, ты ведь про str_replace? Ну это я знаю, я так шаблоны и делаю, мне интересно как тут сделано что все шаблоны в главном шаблоне =) Это действительно удобно. А вот как на ВордПрессе сделано - меня вообще тошнит. Ужас как там шаблоны поделены на кучу файлов, ужос... А на блогТуре очень удобно, сам шаблон под него делал, оч. удобно было :)
Ссылку на свой сайт бы сюда кинул, но он адалт-тематики. Так что если кому интересно - в личку скину.

Могу только добавить, что вставляется уже откомпилированный шаблон — с уже вставленными значениями переменных.
И переменные вставляются без всяких регулярок — простой заменой меток на значения переменных.[/qoute]
Ну это я знаю =)
Просто если в главном шаблоне будет шаблон коммента - то комментов ведь может быть и 1 и 30 и 50 и 100 и больше, поэтому я считаю что нужно выдернуть шаблон коммента в переменную, обработать её, т.е. заменить значения %author%, %body%, %date% и т.д. - и всё это сделать в цикле и вывести...

При этом я не хочу PHP-цикл в шаблон писать, т.к. не хочу мешать PHP с хтмл, хочу свой шаблонный мини-язык сделать, вот и всё =) Примерно также, как у тебя в шаблоне...
_____________________________________________________

А теперь я свою теорию выдвину, как сделано на блогТуре:
выдергивается шаблон коммента, который между тегами "%Comment%" и заменяются переменные в нем... И выводится столько раз, сколько записей в нем есть...

Только всеравно не понимаю до конца... Я хочу создавать код постепенно и записывать его в переменную $html и только в конце вывести, именно поэтому я и не пихаю в ХТМЛ ПХП...
 

Фанат

oncle terrible
Команда форума
В этих многословных объяснениях я так и не увидел, зачем вырезать от <body> до </body>

-~{}~ 06.02.10 08:13:

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

deseper

Новичок
Ф@нат
С добрым утром :) Ну как зачем вырезать? Чтобы файл в отдельный шаблон не выносить. Ну, посмотри ещё раз шаблон БлогТура, который выше написан. Как там 10 комментов из базы добавить по шаблону коммента, который находится в главном шаблоне, при этом не вырезая шаблон в переменную?

Если знаешь как без вырезания шаблона в переменную это сделать, то расскажи. Мне это очень интересно.
И ещё интересна твоя теория, как это устроено на блогТуре.
а если страница с комментами одна, то наоборот, комменту самое место в шаблоне
Во-во! я о том-же. Т.к. Что мне нужно будет в отдельный файл вынести - вынесу. А записи и комменты я точно буду в главном шаблоне делать, т.к. при создании дизайна сайта это удобно.
А вот в ВордПрессе шаблоны гавно(ИМХО), разделены шапка, футер, меню и всё остальное. дизайн совершенно неудобно делать и верстать. На БлогТуре система шаблона рулит. Тоже имхо.

И никто не отговорит меня
— ну, тогда диалог бессмысленен.
Это почему бессмысленен? Как мне нравится, так и буду делать, я ж тут прошу не чтоб меня отговорили, а чтобы помогли разобраться, как научить скрипт разбирать такой шаблон. Просто мне очень понравилась такая система шаблонизирования, очень интересная. :)
 

Фанат

oncle terrible
Команда форума
Я не понимаю, зачем вырезать от боди до боди, чтобы вставить шаблон коммента
 

baev

‹°°¬•
Команда форума
а если страница с комментами одна, то наоборот, комменту самое место в шаблоне
— если коммент один, то да.
Но это — врядли…
Да и ТС уже не раз подчеркнул, что комменты будет в цикле выводить.

А потом ещё возникнет вопрос: что делать если комментов «ну очень много»?
И — «как туда пейджинг прицепить»?..

А потом захочется после комментов ещё что-то вывести…

И, да — рекомендую зайти посмотреть, что из себя blogtur.com представляет.
У меня ну очень большие подозрения, что ТС именно что собирается парсить «эдалт-блоги».
 

Фанат

oncle terrible
Команда форума
Как мне нравится, так и буду делать, я ж тут прошу не чтоб меня отговорили, а чтобы помогли разобраться, как научить скрипт разбирать такой шаблон.
Эта позиция неконструктивна. Так можно разговаривать в ресторане или в магазине. "я плачу деньги и не надо меня учить, что покупать".
Но здесь не магазин. Ты свободен в своем выборе делать, как тебе хочется. Но при этом требовать что-то от окружающих - несколько странно.

-~{}~ 06.02.10 08:42:

— если коммент один, то да.
Но это — врядли…
Да и ТС уже не раз подчеркнул, что комменты будет в цикле выводить.
Да нет же. Как раз о многи и речь.
Обычный же шалабон с блоками. или чего я не вижу?
У меня ну очень большие подозрения, что ТС именно что собирается парсить «эдалт-блоги».
А вот это уже ближе к истине :)
 

baev

‹°°¬•
Команда форума
Да нет же. Как раз о многи и речь.
Обычный же шалабон с блоками. или чего я не вижу?
Лично я вижу один коммент, а не «блок с комментами»:
<IfCommentsAllowed>
<Comment>
<b><%CommentAuthor%></b>, <%CommentDate%> <%CommentTime%>
<b><%CommentTitle%></b><br>
<%CommentBody%>
</Comment>
</IfCommentsAllowed>
P.S. Есть ещё вариант, что ТС что-то недопонял.
Типа увидел что-то вроде вот этого примера:
http://phpclub.ru/paste/index.php?show=2397
— и подумал, что всё должно быть в одном файле
 

deseper

Новичок
Я не понимаю, зачем вырезать от боди до боди, чтобы вставить шаблон коммента
Ф@нат, Чтобы несколько комментов вывести, как baev сказал. Поэтому мне нужно запихнуть шаблон, который написан между %Comment% и %/Comment% (не боди и боди, я просто в первом посте такой пример привел, а потом попросили рассказать для чего это нужно и я рассказал, что например для комментов и записей и всего такого...)
Я просто не представляю как сделать по-другому. Ты знаешь? Если да - то мне как раз это и интересно узнать.

[qoute]А потом ещё возникнет вопрос: что делать если комментов «ну очень много»?
И — «как туда пейджинг прицепить»?..[/QUOTE]
пейджинг не знаю что такое...
А если комментов ну очень много, не вижу проблемы, я ведь в цикле вывожу, а в переменной у меня шаблон коммента. Я могу на одной странице 10 раз его вывести, а также сделать такую конструкцию:
PHP:
<%If_Comment_Pages%>
<%Comment_pages%>
Тут шаблон вывода страниц комментариев
<%/Comment_pages%>
<%/If_Comment_Pages%>
А потом захочется после комментов ещё что-то вывести…
А в чем тут проблема? как комменты в $html записал, дальше пишу:
PHP:
$html.='что-то ещё...';
И это выводится. Не вижу проблемы... Может просто не вижу?...
И, да — рекомендую зайти посмотреть, что из себя blogtur.com представляет.
У меня ну очень большие подозрения, что ТС именно что собирается парсить «эдалт-блоги».
Да, зайдите посмотрите. Система шаблонизирования хорошая, ИМХО. Парсить я не собираюсь, да и не пойму зачем их парсить?
На свой блог ссылку могу кинуть, но сюда наверное нельзя, поэтому в личку без проблем кину, увидите что никакой контент не сперт. Дески написаны самостоятельно, а адалт-контент из адалт-партнерок.

Ф@нат, ну, может неправильно написал или меня неправильно поняли. Я ведь написал что прошу о помощи, а не требую чтобы мне рассказали. Я просто написал что отговаривать меня не надо, мне нравится эта система шаблона(как на БлогТуре) и попросил обьяснить как такое можно сделать. Если кого-то обидел или что-то в этом роде - то прошу прощения.

===============================================

И всё-же. Как сделать-то? :)
Мне нужна только теория теперь... Програмить на любительском уровне я умею... Мне бы понять принцип, как система разбирает этот шаблон.

Ф@нат, ты говоришь что не понимаешь зачем минишаблон выцеплять в переменную. Как это можно по-другому сделать, по-твоему?
Т.е. вывести несколько комментов без выцепления шаблона в переменную...
 

Фанат

oncle terrible
Команда форума
теория, как раз, у тебя есть. своя собственная
ты хочешь, чтобы тебе написали код, который его разбирает.
но код ты тоже можешь написать, просто тебе кажется, что можно написать лучше.
можно. всегда можно. это бесконечный процесс. рекомендую остановиться на том, что есть, и не прыгать через ступеньки.

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

baev

‹°°¬•
Команда форума
deseper, Вы образец шаблона где взяли?
 

C_TIGER

Новичок
рационально делается это так
PHP:
<?
// in comments.php
$comments=array(
array("name"=>"Auchor1","text"=>"text1"),
array("name"=>"Auchor2","text"=>"text2"),
array("name"=>"Auchor3","text"=>"text3"),
);
include "comments.tpl";
// in comments tpl
?>

Comments Page<br>
<?for($i=0,$c=count($comments);$i<$c;$i++){?>
<table> 
<tr><td><?=$comments[$i]['name'];?></td></tr> 
<tr><td><?=$comments[$i]['text'];?></td></tr> 
</table><br>
<?}?>
 
Сверху