如您所知,Joomla组件使您可以通过将模板文件复制到网站模板来覆盖其输出。 Joomla组件通常使用无法覆盖的帮助程序文件。
我有一个包含字符串的helper.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>
基本上我想摆脱表并将其转换为定义列表,但我无法修改helper.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等)。
答案 0 :(得分:0)
您可以使用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;
这应该将您的表格转换为关联数组(&#39;标题&#39; =&gt;&#39;值&#39;)。 我希望它有所帮助。
答案 1 :(得分:0)
我已经弄明白了。由于某种原因,诸如'.$specific_field_title.'
之类的PHP位阻止了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));
现在这完美无缺。感谢所有贡献的人。