如您所知,Joomla组件使您能够通过将模板文件复制到站点模板中来覆盖其输出。Joomla组件通常使用无法覆盖的帮助程序文件。
我有一个包含字符串的助手.php文件:
$specific_fields_text = '<tr><td class="key">'.$specific_field_title.': </td><td class="kr_sidecol_subaddress">'.$specific_fields[$i]->text.' '.$specific_fields[$i]->description.'</td></tr>';
在我的模板覆盖中是代码:
<table border="0" cellpadding="2" cellspacing="0">
<?php echo koparentHTML::getHTMLSpecificFields($this->specific_fields); ?>
</table>
输出如下:
<table border="0" cellpadding="2" cellspacing="0">
<tr>
<td class="key">title</td>
<td class="kr_sidecol_subaddress">value</td>
</tr>
<tr>
<td class="key">title</td>
<td class="kr_sidecol_subaddress">value</td>
</tr>
//.....etc......//
</table>
基本上我想摆脱表并将其转换为定义列表,但我无法修改帮助程序.php文件。我认为答案与str_replace有关
我试过使用:
<dl>
<?php
$spec_fields = koparentHTML::getHTMLSpecificFields($this->specific_fields);
$spec_fields_dl = str_replace("<tr><td class='key'>'.$specific_field_title.': </td><td class='kr_sidecol_subaddress'>'.$specific_fields[$i]->text.' '.$specific_fields[$i]->description.'</td></tr>'", "<dt class='key'>'.$specific_field_title.': </dt><dd class='kr_sidecol_subaddress'>'.$specific_fields[$i]->text.' '.$specific_fields[$i]->description.'</dd>'", $spec_fields);
echo $spec_fields_dl;
?>
</dl>
这将返回所有文本,但没有 html 标记(没有 tr、td、dt 等)。
您可以使用 PHP 轻松解析表数据,如以下示例所示:
$doc = new DOMDocument();
$doc->loadHTML(koparentHTML::getHTMLSpecificFields($this->specific_fields));
$rows = $doc->getElementsByTagName('tr');
$data = array();
for ($i = 0; $i < $rows->length; $i++) {
$cols = $rows->item($i)->getElementsbyTagName("td");
$data[$cols->item(0)->nodeValue] = $data[$cols->item(1)->nodeValue];
}
var_dump $data;
这应该将您的表转换为 assoc 数组("标题"=>"值")。我希望它有所帮助。
我已经想通了。出于某种原因,PHP位例如'.$specific_field_title.'
阻止str_replace工作的地方。为了解决这个问题,我只是搜索了HTML元素并将它们放在一个数组中,如下所示:
echo str_replace(array('<tr><td class="key">', '</td><td class="kr_sidecol_subaddress">', '</td></tr>'),
array('<dt class="key">', '</dt><dd class="kr_sidecol_subaddress">', '</dd>'),
koparentHTML::getHTMLSpecificFields($this->specific_fields));
现在这完美地工作。感谢所有做出贡献的人。