Her zamanki gibi sorun iyi bir regex yazı var.
Ben Joomla makale başlıklarının sağında çekirdek tarafından üretilen isteğe bağlı yazdırma, e-posta ve PDF düğmeleri bir düğme eklemek için bir eklenti yapmaya çalışıyorum. Ben başarılı olursa ben GPL altında dağıtmak olacaktır. Ben buldum örneklerin hiçbiri işe görünüyor ve ben bir php-tek çözüm oluşturmak istiyorum.
Fikir, bir veya daha fazla regex için makale başlıkları ve düğmeler için Joomla çıkış benzersiz desen kullanmaktır. Bir regex class "contentpaneopen" ile bir tablo arıyorum (bir sayfada birkaç tane olan) ve sınıf ile bir hücreyi içeren "contentheading" tarafından doğru tabloyu bulur. Bu tablodaki class "buttonheading" ile bir hücre varsa ikinci bir regex kontrol edebilir. Bu hücrelerin sayısı üçe sıfırdan olabilir ama ilk regex birden fazla maç dönerse ben bu çeki kullanabilirsiniz. Bu grubu, ben aynı masada tarafından tabloyu değiştirmek istiyorum ama ekstra hücre düğmesini tutarak ben eklemek istiyorum. Ben son satırı ve tablo kapanış etiketleri kalktıktan ve tekrar bu kapanış etiketleri eklemeden önce benim düğme hücre takarak bunu yapabilir.
Normal Joomla çıktı şuna benzer:
<table class="contentpaneopen">
<tbody>
<tr>
<td width="100%" class="contentheading">
<a class="contentpagetitle" href="url">Title Here</a>
</td>
<td width="100%" align="right" class="buttonheading">
<a rel="nofollow" onclick="etc" title="PDF" href="url"><img alt="PDF" src="/templates/neutral/images/pdf_button.png"/></a>
</td>
<td width="100%" align="right" class="buttonheading">
<a rel="nofollow" onclick="etc" title="Print" href="url"><img alt="Print" src="/templates/neutral/images/printButton.png" ></a>
</td>
</tr>
</tbody>
</table>
Kod çok kabaca böyle bir şey olacaktır:
$subject = $article;
$pattern1 = '[regex1]'; //<table class="contentpaneopen">etc</table>
preg_match($pattern, $subject, $match);
$pattern2 = '[regex2]'; //</tr></tbody></table>
$replacement = [mybutton];
echo preg_replace($pattern2, $replacement, $match);
İyi bir regex olmadan orada kod kalanını yapıyor küçük nokta, bu yüzden birisi bu yardımcı olur umarım!