2012-04-10 5 views
0

Hier ist, was ich versuche zu erreichen. Der CMS-Editor unseres Magento-Webshops verfügt über eine Schaltfläche zum Einfügen eines <!-- pagebreak --> Tags. Ich möchte dies verwenden, um eine mehr Funktionalität zu erstellen. Ich dachte, ich würde nach diesem Tag suchen/ersetzen, um dies zu tun.Replace pagebreak Tag mit regulärem Ausdruck

Ich möchte innerhalb <p> Tags suchen, und ich möchte, dass Menschen in der Lage sein, dieses Tag so oft zu verwenden, wie sie möchten.

Angenommen, dies ist mein Original-HTML ist:

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

Ich möchte es so etwas konvertieren .. Ich denke, die erste ist die einfachste, vielleicht zu erreichen, indem sie ein preg_replace in eine Weile zu tun Schleife? Das zweite ist wahrscheinlich sauberer/besser html (weniger Verschachtelung)

<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> 

oder

<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> 

So kam ich mit diesem, aber ich denke, es sollte eine Art und Weise, es zu tun mit einem ersetzen.

$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); 
} 

Antwort

0

Nun, wenn es nicht Sie müssen überprüfen, ob es in einem <p> Tag ist Sie so etwas wie diese verwenden:

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

Auf dem System viel leichter ist.

+0

Ich habe das zu überprüfen, da sonst „verstecken“ der Rest der Seite accidently ich kann. Auf diese Weise kann ich den Benutzer zwingen, dies nur in einem Absatz zu verwenden. – rolandow

+0

Ich fürchte, wenn Sie wirklich die Nadel in einem Absatz überprüfen müssen, ist Ihre Option die einzige, die ich mir vorstellen kann. – Manuel

0

Ich denke, dies ist die Arbeit machen würde:

$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); 
+0

Ja, aber Sie gehen hier davon aus, dass nur ein Seitenumbruch in einem Absatz existiert. Mein Problem besteht darin, dass ein Benutzer zwei Seitenumbrüche in einen Absatz einfügen könnte. – rolandow

Verwandte Themen