[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Вставка после третьего абзаца
Страницы: 1, 2
asdf27
Конец рабочего дня, голова уже не соображает. Прошу помочь.

<p>Первый абзац</p>
<p>
Второй абзац</p>
<p>
Третий абзац</p>
<p>
Четвертый абзац</p>
<p>
Пятый абзац</p>


Нужно засунуть блок между третьим и четвертым абзацем. Как правильнее это сделать?

1. Посчитать количество совпадений текста "</p>", вычислить длину строки до него и сделать вывод текста вида mb_substr($text,0,эта_длинна), потом сам блок и оставшуюся часть текста?

2. Заменить последний (третий) </p> на </p>_код_блока

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

_____________
* Хэлп по PHP
* Описалово по JavaScript
* Хэлп и СУБД для PostgreSQL

* Обучаю PHP, JS, вёрстке. Интерактивно и качественно. За разумные деньги.

* "накапливаю умение телепатии" (С) и "гуглю за ваш счет" (С)

user posted image
asdf27
Статьи лежат в базе. Добавляю через ckeditor, каждый абзац он обрамляет в параграфы. Хочу после третьего выводить контекстную рекламу.

Мне нужно считать длину до этого места, т.к. если статья короткая, реклама вставляться не будет.
Kopipaster
Внимание ковнокод! Впечатлительным не смотреть!
Свернутый текст
$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
версия 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
а чем 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
Цитата (Игорь_Vasinsky @ 19.05.2014 - 21:50)
а чем preg_replace() не подошёл сразу?

Лучще бы показал как. Я вот не умею строить конструкцию: "после $n совпадений".
Игорь_Vasinsky
а тут и не надо 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
Цитата (Игорь_Vasinsky @ 19.05.2014 - 22:02)
а тут и не надо n совпадений - тут нужно найти вначале текста 3 группы тега обзаца и поставить после них свой код, потом дописать остальное.

Ну так покажи пример я не сильно силён в синтаксисе
3 группы это как
|<p>(.*)</p><p>(.*)</p><p>(.*)</p>|sn
или как то так
3*(|<p>(.*)</p>|) biggrin.gif ?
Игорь_Vasinsky
только намёком

$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
Цитата (Игорь_Vasinsky @ 19.05.2014 - 22:23)
только намёком

Не ну намёкам как то не работает. Я же уже признался что в синтаксисе не силён. Короче намёк видимо с синтаксической ошибкой.
Игорь_Vasinsky
)) там же текст ошибки сам за себя говорит))

$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
Цитата (Игорь_Vasinsky @ 19.05.2014 - 22:39)
)) там же текст ошибки сам за себя говорит))

Ну вот зачем так делать? biggrin.gif
Игорь_Vasinsky
чтоб не расслобляться.

_____________
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
OleKh
Ещё как вариант, у меня получилось так:

$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;
}
}

Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2025 Invision Power Services, Inc.