fenom ereplace что не так?
Доброго дня всем! Есть фрагмент подлежащий удалению из кода контента при отдаче в RSS
Пример кода баннера:
А при использовании ereplace с тем же выражением ни чего не вырезается ( в чанке test_banner_del приведенный выше код баннера)
Вопрос решен.
Т.к. регулярка не затрагивает ни чего кроме вырезаемого баннера, то поступил так:
Пример кода баннера:
<hr>
<script async src="//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script>
<!-- inarticles1 -->
<ins class="adsbygoogle"
style="display:block"
data-ad-client="ca-pub-999999999999999999999"
data-ad-slot="222222222222222"
data-ad-format="auto"></ins>
<script>
(adsbygoogle = window.adsbygoogle || []).push({});
</script>
<hr>
Тут www.phpliveregex.com/ опробовал сладующее регулярное выражениеpreg_replace("/<ins.*?\<\/ins\>|<script.*?\<\/script\>|<hr>|<!--.*?-->/is", "", $input_lines);
оно работает — удаляет код без остаткаА при использовании ereplace с тем же выражением ни чего не вырезается ( в чанке test_banner_del приведенный выше код баннера)
{include 'test_banner_del'| ereplace : '/<ins.*?\<\/ins\>|<script.*?\<\/script\>|<hr>|<!--.*?-->/is':' '}
Может кто подскажет, что я делаю не так.Вопрос решен.
Т.к. регулярка не затрагивает ни чего кроме вырезаемого баннера, то поступил так:
{set $alltoRSS = $_modx->runSnippet('pdoResources', [
....
])}
{$alltoRSS | ereplace : '/<ins.*?\<\/ins\>|<script.*?\<\/script\>|<hr>|<!--.*?-->/is':' ' }
На самом деле это продолжение мысли высказанной Володей. Комментарии: 5
сразу через include не получится.
сначала забейте переменную и потом к ней применяйте модификатор
сначала забейте переменную и потом к ней применяйте модификатор
{var $tmp}
{include 'test_banner_del'}
{/var}
{$tmp| ereplace : '/<ins.*?\<\/ins\>|<script.*?\<\/script\>|<hr>|<!--.*?-->/is':' '}
Спасибо, Володя! Да, так работает в случае с чанком.
Но тогда почему-то в другом чанке
Но тогда почему-то в другом чанке
<item>
<title>{$pagetitle | strip_tags}</title>
<link>[[+link]]</link>
<description>[[+introtext:absURL:cdata]]</description>
<pubDate>[[!ShowDate_en? &val=`[[+publishedon]]`]] +0300</pubDate>
<guid>[[+link]]</guid>
<yandex:full-text>
{$introtext | strip_tags}
{$content | ereplace : '/<ins.*?\<\/ins\>|<script.*?\<\/script\>|<hr>|<!--.*?-->/is':' '| strip_tags}
</yandex:full-text>
</item>
тоже самое ни как не хочет
PS
по аналогии, отдельный документ, где баннер в тексте
Опять же, тут www.phpliveregex.com из текста указанная регулярка все нормально вырезает
по аналогии, отдельный документ, где баннер в тексте
{var $tmp2}
{5318 | resource : 'content'}
{/var}
{$tmp2| ereplace : '/<ins.*?\<\/ins\>|<script.*?\<\/script\>|<hr>|<!--.*?-->/is':' ' | strip_tags}
так strip_tags отрабатывает, а регулярка нет…Опять же, тут www.phpliveregex.com из текста указанная регулярка все нормально вырезает
Итого, если код баннера вместе с обтекающим текстом запихнуть в ресурс и вызвать
Ибо проблема не в регулярке, а в том, что на рабочем проекте баннеры вставляются полями ContentBlocks, в полях чанки. Т.е. если из ContentBlocks, то чанк еще не успевает отрабатывать, а регулярка по всему контенту уже прошлась.
Пляшу с бубном, буду с плагинами играть, пробовал вот так :
{5375 | resource : 'content' | ereplace : '/<ins.*?\<\/ins\>|<script.*?\<\/script\>|<hr>|<!--.*?-->/is':' '| strip_tags}
— все нормально))Ибо проблема не в регулярке, а в том, что на рабочем проекте баннеры вставляются полями ContentBlocks, в полях чанки. Т.е. если из ContentBlocks, то чанк еще не успевает отрабатывать, а регулярка по всему контенту уже прошлась.
Пляшу с бубном, буду с плагинами играть, пробовал вот так :
<item>
<title>{$pagetitle | strip_tags}</title>
<link>[[+link]]</link>
<description>[[+introtext:absURL:cdata]]</description>
<pubDate>[[!ShowDate_en? &val=`[[+publishedon]]`]] +0300</pubDate>
<guid>[[+link]]</guid>
<yandex:full-text>
{var $allcontent}
{$introtext ~~ $content}
{/var}
{$allcontent | ereplace : '/<ins.*?\<\/ins\>|<script.*?\<\/script\>|<hr>|<!--.*?-->/is':' '| strip_tags}
</yandex:full-text>
</item>
чуда не произошло.
Решено.
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.