источник этой проблемы в том, что я размещаю рекламу на своем веб-сайте, мой контент в основном хранится в базе данных в формате HTML, поэтому я решил разместить "объявления в тексте", которые не находятся в фиксированной зоне.
Мое решение заключалось в explode
содержании по абзацам и размещении текстового объявления в середине тегов p
, которые работали довольно круто, поскольку я использую CKEditor для генерации контента, я думал, изображения, блок-цитаты, и другие теги будут вложены в теги p
(обманывают меня). Теперь я понимаю, что изображения и блок-цитаты исчезли из моих сообщений. Что мне делать дальше?Я изменил свой код на explode
, используя *
вместо взрыва по тегу p
, я спел победу слишком рано, потому что теперь я получаю много дублирующегося контента, например, если у меня есть одно изображение, я получаю то же самоеimage 4 раза, как и все остальные теги, я не уверен в источнике этих дубликатов, но я думаю, что это как-то связано с вложенным HTML, я искал решение в течение нескольких часов, и теперь я спрашиваю, можно ликто-то может помочь мне решить эту головную боль
Вот мой код:
//In a helper file
function splitByHTMLTagName(string $string, string $tagName = 'p')
{
$text = <<<TEXT
$string
TEXT;
libxml_use_internal_errors(true);
$dom = new DOMDocument();
$nodes = [];
$dom->loadHTML('<?xml encoding="utf-8" ?>' . $text);
foreach ($dom->getElementsByTagName($tagName) as $node) {
array_push($nodes, $dom->saveHTML($node));
}
libxml_clear_errors();
return $nodes;
}
//In my view
$text = nl2br($database['content']);
$nodes = splitByHTMLTagName($text, '*');
//Using var_dump($nodes); here shows the duplicates are here already.
$nodes_count = count($nodes);
$show_ad_at = -1;
$was_added = false;
if($nodes_count % 2 == 0 ){
$show_ad_at = $nodes_count /2;
}else if ($nodes_count == 1 || $nodes_count < 3){
$show_ad_at = -1; //add later
}else if ($nodes_count > 3 && $nodes_count % 2 != 0){
$show_ad_at = ceil($nodes_count/2);
}
for($i = 0; $i<count($nodes); $i++){
if(!$was_added && $i == $show_ad_at){
$was_added = true;
?>
<div>
<script></script><!--This script is provided to me, it adds the ad where it is placed, I don't show the full script, It has nothing to do with the duplicates problem-->
</div>
<?php
}
echo $nodes[$i]; //print the node that comes from $nodes array where the duplicates already exist
}
if(!$was_added){
$was_added = true;
?>
<div>
<script></script><!--This script is provided to me, it adds the ad where it is placed, I don't show the full script, It has nothing to do with the duplicates problem-->
</div>
<?php
}
Что я могу сделать?Заранее спасибо.
Постданные # 1: я использую codeigniter в качестве PHP Framework
Постданные # 2: Мой поставщик рекламы не реализует "объявления в тексте" как такую функцию, как Google.