2012-04-10 46 views
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> 

我想將其轉換爲這樣的事情。我覺得第一個是最容易實現,也許是在一段時間做一個的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); 
} 

回答

0

那麼如果你不需要檢查它是否在<p>標籤,你可以使用這樣的事情:

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

這是輕了很多系統。

+0

我必須檢查,否則我可能會無意中「隱藏」的頁面的其餘部分。這樣我就可以「強制」用戶只在段落內使用它。 – rolandow 2012-04-11 14:47:58

+0

恐怕如果你真的需要檢查針是否在一個段落中,你的選擇是我能想到的唯一的選擇。 – Manuel 2012-04-12 09:06:22

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

是的,但您在此假定在一個段落中只存在一個分頁符。我的問題是,用戶可能會在一個段落中放置兩個分頁符。 – rolandow 2012-04-11 14:50:50