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を行うことでしょうか?2番目のものはおそらくよりクリーンで優れた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>

だから私はこれを思いつきましたが、1つの交換でそれを行う方法があるはずだと思います.

$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 に答える