Вывод рекламы внутри поста.

R34-zevs
На сайте с 15.07.2006
Offline
238
824

Столкнулись с проблемой. Ниже представлено регулярное выражение, суть его в том, что оно отмеряет заданное кол-во символов (переменная $len_one=1400) и ровно после 1400 символа вставляет фрагмент рекламы. Но у данного метода есть 2 недостатка.

Первый: он разрывает слова. Идея была в том, чтоб он отмерял до 1400 символа + до первой точки

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


preg_replace('@([^^]{'.$len_one.'}.*?)(\r?\n\r?\n|)@', "\\1".$rek6."\\2", trim($content), 1);

Подскажите, как исправить эту ошибку

Агентство недвижимости Фабрика Жилья (http://xn--80aacvicll3bzbzgqb.xn--p1ai/)
Koleman
На сайте с 26.10.2010
Offline
46
#1

Как вариант:

Скачать таблицу с контентом, открыть в notepad++

Использовать замену

(.{1400}.*?[\.|!|\?])

На

\1Ваш код

UPD:

Регулярку нужно будет немного подправить под Вашу таблицу. Если что, обращайтесь в ЛС.

Изготовление сайтов под ключ, верстка (/ru/forum/811897) - отзывы
H
На сайте с 09.10.2012
Offline
11
#2

а что, если сделать так?

1. Найти в тексте точку после 1400 символа, запомнить её позицию, взять 2 подстроки (до и после точки) вставить внутрь рекламу.

примерная реализация(не тестировал) :

$offset = 1400;

$dot = strpos($text, '.', $offset);

$reklama = "blablabla";

$result_str = substr($text,0,$dot).$reklama.substr($text,$dot);

siv1987
На сайте с 02.04.2009
Offline
427
#3

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

hedint:
1. Найти в тексте точку после 1400 символа, запомнить её позицию, взять 2

Это не спасет, если в этом месте окажется какой-нибудь тег, например a или img.

Но в идее что-то есть.

TF-Studio
На сайте с 17.08.2010
Offline
334
#4

резать надо по точке, которая идет ПОСЛЕ 1400 символа.

тогда после предложения будет.

красиво и лаконично.

$text = substr ($text, 0, MAX_WIDTH_NEWS - strlen (strrchr (substr ($text, 0, MAX_WIDTH_NEWS), ' ')));

это можно доработать

Всё ещё лучший способ заработка для белых сайтов: GoGetLinks (https://www.gogetlinks.net/?inv=fahbn8).
IL
На сайте с 20.04.2007
Offline
435
#5

Найти точку после 1400 символа.

Найти открывающий < и закрывающий > символы тэга, и если закрывающий раньше - вставлять после него (точка ведь может быть в title=".ююю.Эю" :)

siv1987:
Это не спасет, если в этом месте окажется какой-нибудь тег

p.s. Но и это не спасает в некоторых случаях, например, если одиночные символы >< не преобразованы в сущности и тд

... :) Облачные серверы от RegRu - промокод 3F85-3D10-806D-7224 ( http://levik.info/regru )
O
На сайте с 01.04.2011
Offline
14
#6

Я бы вставлял после окончания абзаца, т.е. сначала сразу отматываем 1000 символов, потом ищем </p> и после него вставлям рекламный блок. Если тексты оформлены нормальным html, то практически всегда должно выглядеть прилично.

Ну а еще лучше свой псевдотег вставлять в текст статьи, который будет заменяться на рекламу, тогда наиболее аккуратно и управляемо будет.

Seo мл.н.с. Прописан по адресу exp-seo.ru (http://exp-seo.ru).
R34-zevs
На сайте с 15.07.2006
Offline
238
#7

К сожалению эти решения, которые я и сам понимаю, но всё равно спасибо за ответы. Нам нужна готовая реализация или доработка того кода.

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий