Бывает так – есть сайт на CMS c множеством статей и нужно вставить в каждую статью баннер, лучше в её центр т.к. в таком месте у баннера будет лучшая эффективность. Но не вставлять же в админке код баннера в каждую статью отдельно.
Решение:
В шаблоне вывода статей сделать замену текста. Данный код не нарушает верстку, исключает встраивание в ячейки таблиц и маркированных списков.
$article = 'Текст статьи';
$banner = 'Код баннера';
$text = $article;
$text = str_replace('<p> </p>', '', $text);
$text = preg_replace('/<table[^>]*?>.*?</table>/si', '', $text);
preg_match_all('/(<p|<ul|<ol|<div|<h2|<h3|<h4|<h5|<h6)+(.*)/i', $text, $res);
foreach ($res[0] as $row) {
if (!empty($row)) {
$bl[] = $row;
}
}
$c = ceil(count(@$bl) / 3);
if (isset($bl[$c])) {
$article = str_replace($bl[$c], $banner . $bl[$c], $article);
}
echo $article;