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 を使用してテーブル データを簡単に解析できます。

$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 に答える
0

私はこれを理解しました。'.$specific_field_title.'何らかの理由で、str_replace を停止する場所などの PHP ビットが機能しません。これを回避するために、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 に答える