2

同じ codeigniter コードベースに基づいて 2 つのアプリケーションを作成しています。これらのアプリケーションはどちらも言語ベースの XML ファイルを使用するため (ネイティブの CI lang lib は使用できません)、アプリケーションごとに言語ごとに 1 つの XML ファイルがあります。

これらの XML ファイル内にはテキストが含まれており、表示しているアプリケーションに応じて、出力時のフォーマットが異なります。(単純な XML で XML をロードし、必要な要素を名前で出力しています)

アプリ 1 の XML 抽出例は次のようになります。

<instructions>
    <instruction>**<strong>**Lorem ipsum dolor sit**</strong>** amet, consectetur adipisicing elit, sed doeiusmod tempor incididunt ut labore et dolore magna aliqua</instruction>
</instructions>

アプリ 2 の抽出例は次のようになります。

<instructions>
    <instruction>Lorem ipsum dolor sitamet, consectetur adipisicing elit, sed doeiusmod tempor incididunt ut labore et **<br /><br />**dolore magna aliqua</instruction>
</instructions>

基本的に、これらの XML ファイルは、PHP 内で出力されるときにフォーマットするために、さまざまなマークアップを含める必要があります。上記の両方の例は、$app->instructions->instruction としてエコーされます。

現在、CDATAプレースホルダーを使用してフォーマットのバリエーションを実現し、それをスプリントして置き換えています。ただし、これは、潜在的に多数のマークアップ要素になる可能性があるものを置き換えるために、sprintf 関数内に複数のパラメーターが必要であるという私の意見では十分に柔軟ではありません。これまでのところ、交換する必要があるのは最大で 6 個の CDATA トークンです。

読み込まれているアプリに基づいて sprintf を条件付きにする必要があったという事実によって、これがさらに複雑になります。不要な PHP で HTML を汚染しないように、コントローラーでこれを行うことを選択したという事実によって、さらに悪化しました。

私が達成したいことを追跡するには、次のとおりです。

  • XML を HTML マークアップから切り離す
  • HTML は PHP を排除するか、少なくとも使用を最小限に抑えます
  • コントローラー内にHTMLは絶対にありません

どのような方法で作業しようとしても、これらのいずれかを妥協しているようです。

4

1 に答える 1

0

あなたの質問はそれに答える境界線ですが、とにかく試します。次の 3 つの要件を策定しました。

  1. XML を HTML マークアップから切り離す
  2. HTML は PHP を排除するか、少なくとも使用を最小限に抑えます
  3. コントローラー内にHTMLは絶対にありません

XML を HTML マークアップから切り離すには、そこに HTML マークアップを入れないでください。または、そこに HTML を入れたい場合は、適切にエンコードします。CDATA または単に XML エンティティと同様に:

<instructions>
  <instruction>
    &lt;strong&gt;Lorem ipsum dolor sit&lt;/strong&gt; amet, consectetur 
    adipisicing elit, sed doeiusmod tempor incididunt ut labore et dolore magna
    aliqua
  </instruction>
</instructions>

XML はそれに関してまったく問題がなく、その値を取得するのにも問題はないはずです。そのため、1.)。

2.) 意味がわかりません。PHP を明確に保ちたい場合は、PHP を中に入れないでください。PHP を内部に配置する場合は、それも (HTML のように) エンコードする必要があることを理解する必要があります。それ以外の場合は、いわゆる処理命令 (pi) を作成します。問題が発生します。とにかく、これらの翻訳は静的データであるため、とにかくそこに PHP を入れるべきではありません。

その静的データを処理するロジックは、ほとんどの場合、ビューおよび/またはコントローラーに属します。

3.) コントローラー内に HTML を配置しないでください (Codeigniter の人々がビューと呼ぶものに配置します。これは、Codeigniter の HTML テンプレートのコンポーネントです)。

于 2013-03-05T13:24:26.283 に答える