0

您可能知道,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 等)。

4

2 回答 2

0

我已经想通了。出于某种原因,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));

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

于 2013-10-16T13:28:54.487 回答
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;

这应该将您的表格转换为关联数组('title' => 'value')。我希望它有所帮助。

于 2013-10-16T12:39:31.093 回答