让PHP str_replace与Joomla一起使用

时间:2013-10-16 10:34:59

标签: php joomla str-replace

如您所知,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等)。

2 个答案:

答案 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));

现在这完美无缺。感谢所有贡献的人。