asdf27
19.05.2014 - 19:23
Конец рабочего дня, голова уже не соображает. Прошу помочь.
<p>Первый абзац</p>
<p>Второй абзац</p>
<p>Третий абзац</p>
<p>Четвертый абзац</p>
<p>Пятый абзац</p>
Нужно засунуть блок между третьим и четвертым абзацем. Как правильнее это сделать?
1. Посчитать количество совпадений текста "</p>", вычислить длину строки до него и сделать вывод текста вида mb_substr($text,0,эта_длинна), потом сам блок и оставшуюся часть текста?
2. Заменить последний (третий) </p> на </p>_код_блока
Что еще? Голова не варит.
sergeiss
19.05.2014 - 20:01
Исходные абзацы откуда берутся - ты формируешь текст? Или это уже готовый код, получаемый откуда-то?
_____________
*
Хэлп по PHP*
Описалово по JavaScript *
Хэлп и СУБД для PostgreSQL*
Обучаю PHP, JS, вёрстке. Интерактивно и качественно. За разумные деньги. *
"накапливаю умение телепатии" (С) и "гуглю за ваш счет" (С)
asdf27
19.05.2014 - 20:03
Статьи лежат в базе. Добавляю через ckeditor, каждый абзац он обрамляет в параграфы. Хочу после третьего выводить контекстную рекламу.
Мне нужно считать длину до этого места, т.к. если статья короткая, реклама вставляться не будет.
Kopipaster
19.05.2014 - 20:30
Внимание ковнокод! Впечатлительным не смотреть!
$a = "<p>Первый абзац</p><p>Второй абзац</p><p>Третий абзац</p><p>Четвертый абзац</p><p>Пятый абзац</p>";
$b = "Внимание говнокод!";
preg_match_all ('|<p>(.*)</p>|isU', $a, $c, PREG_SET_ORDER);
$a = "<p>".$c['0']['1']."</p><p>".$c['1']['1']."</p><p>".$c['2']['1']."</p>".$b."<p>".$c['3']['1']."</p><p>".$c['4']['1']."</p>";
зато работает
;)
Да что со смайлами? :angry:
Kopipaster
19.05.2014 - 21:03
версия 1.1
$a = "<p>Первый абзац</p><p>Второй абзац</p><p>Третий абзац</p><p>Четвертый абзац</p><p>Пятый абзац</p>";
$b = "Внимание говнокод";
function pp($e){
$pp = "<p>".$e."</p>";
return $pp;
}
preg_match_all ('|<p>(.*)</p>|isU', $a, $c, PREG_SET_ORDER);
$a = pp($c['0']['1']).pp($c['1']['1']).pp($c['2']['1']).$b.pp($c['3']['1']).pp($c['4']['1']);
Игорь_Vasinsky
19.05.2014 - 21:50
а чем preg_replace() не подошёл сразу?
_____________
HTML, CSS (Bootstrap), JS(JQuery, ExtJS), PHP, MySQL, MSSql, Posgres, (TSql, BI OLAP, MDX), Mongo, Git, SVN, CodeIgnater, Symfony, Yii 2, JiRA, Redmine, Bitbucket, Composer, Rabbit MQ, Amazon (SQS, S3, Transcribe), Docker
Kopipaster
19.05.2014 - 22:00
Цитата (Игорь_Vasinsky @ 19.05.2014 - 21:50) |
а чем preg_replace() не подошёл сразу? |
Лучще бы показал как. Я вот не умею строить конструкцию: "после $n совпадений".
Игорь_Vasinsky
19.05.2014 - 22:02
а тут и не надо n совпадений - тут нужно найти вначале текста 3 группы тега обзаца и поставить после них свой код, потом дописать остальное.
_____________
HTML, CSS (Bootstrap), JS(JQuery, ExtJS), PHP, MySQL, MSSql, Posgres, (TSql, BI OLAP, MDX), Mongo, Git, SVN, CodeIgnater, Symfony, Yii 2, JiRA, Redmine, Bitbucket, Composer, Rabbit MQ, Amazon (SQS, S3, Transcribe), Docker
Kopipaster
19.05.2014 - 22:11
Цитата (Игорь_Vasinsky @ 19.05.2014 - 22:02) |
а тут и не надо n совпадений - тут нужно найти вначале текста 3 группы тега обзаца и поставить после них свой код, потом дописать остальное. |
Ну так покажи пример я не сильно силён в синтаксисе
3 группы это как
|<p>(.*)</p><p>(.*)</p><p>(.*)</p>|sn
или как то так
3*(|<p>(.*)</p>|)

?
Игорь_Vasinsky
19.05.2014 - 22:23
только намёком
$text = "<p>111111</p><p>22222</p><p>33333</p><p>444</p> ; ;<p>5555</p>";
$pattern = '#^((<p>(.[^<p>]*)</p>){3})#iUus';
$replacement = '$1<div>рекламный блок</div>';
echo preg_replace($pattern, $replacement, $text, -1, null);
ест-но mb_strlen() сначала подсчитает длину контента
_____________
HTML, CSS (Bootstrap), JS(JQuery, ExtJS), PHP, MySQL, MSSql, Posgres, (TSql, BI OLAP, MDX), Mongo, Git, SVN, CodeIgnater, Symfony, Yii 2, JiRA, Redmine, Bitbucket, Composer, Rabbit MQ, Amazon (SQS, S3, Transcribe), Docker
Kopipaster
19.05.2014 - 22:31
Цитата (Игорь_Vasinsky @ 19.05.2014 - 22:23) |
только намёком |
Не ну намёкам как то не работает. Я же уже признался что в синтаксисе не силён. Короче намёк видимо с синтаксической ошибкой.
Игорь_Vasinsky
19.05.2014 - 22:39
)) там же текст ошибки сам за себя говорит))
$text = "<p>111111</p><p>22222</p><p>33333</p><p>444</p> ; ; ; ;<p>5555</p>";
$pattern = '#^((<p>(.[^<p>]*)</p>){3})#iUus';
$replacement = '$1<div>content box</div>';
$count = null;
echo preg_replace($pattern, $replacement, $text, -1, $count);
_____________
HTML, CSS (Bootstrap), JS(JQuery, ExtJS), PHP, MySQL, MSSql, Posgres, (TSql, BI OLAP, MDX), Mongo, Git, SVN, CodeIgnater, Symfony, Yii 2, JiRA, Redmine, Bitbucket, Composer, Rabbit MQ, Amazon (SQS, S3, Transcribe), Docker
Kopipaster
19.05.2014 - 23:04
Цитата (Игорь_Vasinsky @ 19.05.2014 - 22:39) |
)) там же текст ошибки сам за себя говорит)) |
Ну вот зачем так делать?
Игорь_Vasinsky
19.05.2014 - 23:07
чтоб не расслобляться.
_____________
HTML, CSS (Bootstrap), JS(JQuery, ExtJS), PHP, MySQL, MSSql, Posgres, (TSql, BI OLAP, MDX), Mongo, Git, SVN, CodeIgnater, Symfony, Yii 2, JiRA, Redmine, Bitbucket, Composer, Rabbit MQ, Amazon (SQS, S3, Transcribe), Docker
Ещё как вариант, у меня получилось так:
$text= "<p>Первый абзац</p>
<p>Второй абзац</p>
<p>Третий абзац</p>
<p>Четвертый абзац</p>
<p>Пятый абзац</p>";
$matches = preg_split("#(?<=(</p>))#isu", $text);
$new_text = '';
foreach($matches as $key=>$item) {
if($key == 2) {
$new_text .= $item."\n";
$new_text .= "<p>extra block</p>";
} else {
$new_text .= $item;
}
}
Быстрый ответ:
Powered by dgreen
Здесь расположена полная версия этой страницы.