像往常一样,我很难写出一个好的正则表达式。
我正在尝试为 Joomla 制作一个插件,以向文章标题右侧的核心生成的可选打印、电子邮件和 PDF 按钮添加一个按钮。如果我成功了,我将根据 GPL 分发它。我发现的所有示例似乎都不起作用,我想创建一个仅限 php 的解决方案。
这个想法是为文章标题和按钮使用 Joomla 输出的独特模式,用于一个或多个正则表达式。一个正则表达式会通过查找一个具有“contentpaneopen”类的表(其中一个页面中有多个)并包含一个具有“contentheading”类的单元格来找到正确的表。第二个正则表达式可以检查该表中是否有一个带有“按钮标题”类的单元格。这些单元格的数量可以从零到三个,但如果第一个正则表达式返回多个匹配项,我可以使用此检查。有了这个,我想用同一个表替换这个表,但是用一个额外的单元格来保存我想要添加的按钮。我可以通过取下最后一行和表格结束标签并在再次添加这些结束标签之前插入我的按钮单元格来做到这一点。
正常的 Joomla 输出如下所示:
<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>
代码大致是这样的:
$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);
如果没有一个好的正则表达式,剩下的代码就没有意义了,所以我希望有人能帮忙!