0

这就是我想要完成的。我们 Magento 网店的 CMS 编辑器有一个用于插入<!-- pagebreak -->标签的按钮。我想用它来创建阅读更多功能。我想我会搜索/替换这个标签来做到这一点。

我想在<p>标签内部进行搜索,并且我希望人们能够随心所欲地使用这个标签。

假设这是我的原始 HTML:

<p>This is my example text, but<!-- pagebreak --> this should be readable after 'click more'<!-- pagebreak --> with even more click more possible</p>

我想把它转换成这样的东西。我认为第一个是最容易完成的,也许是在一个while循环中做一个preg_replace?第二个可能是更干净/更好的 html(嵌套更少)

<p>This is my example text, but <a href="#" onClick='#'>read more</a><div class='hiddenreadmore' id='hiddenreadmore-1'> this should be readable after 'click more'<a href="#" onClick='#'>read more</a><div class='hiddenreadmore' id='hiddenreadmore-2'> with even more click more possible</div></div></p>

或者

<p>This is my example text, but <a href="#" onClick='#'>read more</a><div class='hiddenreadmore' id='hiddenreadmore-1'> this should be readable after 'click more'<a href="#" onClick='#'>read more</a></div><div class='hiddenreadmore' id='hiddenreadmore-2'> with even more click more possible</div></p>

所以我想出了这个,但我认为应该有一种方法可以通过一次替换来做到这一点。

$pattern = '#\<p\>(.+?)\<\!-- pagebreak --\>(.+?)\<\/p\>#s';
$count = true;
while ($count) {
    $text = preg_replace($pattern, '<p>$1 <a href="#">read more</a><div class="hidden">$2</div></p>', $text, -1, $count);
}
4

2 回答 2

0

好吧,如果您不需要检查它是否在<p>标签中,则可以使用以下内容:

str_replace ( "<!-- pagebreak -->" , '<p>$1 <a href="#">read more</a><div class="hidden">$2</div></p>' , $text, $count );

这对系统来说要轻得多。

于 2012-04-10T13:00:34.797 回答
0

我想这可以完成这项工作:

$pattern = '#\<p>(.*?)\<!-- pagebreak -->(.*?)\</p>#s';
$text = "<p>some test <!-- pagebreak --> hidden content</p> second test <p>lolo <!-- pagebreak --> more hidden content</p>";

echo preg_replace($pattern, '<p>$1 <a href="#">read more</a><div class="hidden">$2</div></p>', $text, -1, $count);
于 2012-04-10T13:05:34.000 回答