2

ですから、私は「Web標準を使った設計」をたくさん読んで、本当に楽しんでいます。私はCakePhpの大ユーザーであり、CakeがFormHelperを使用して作成するさまざまなフォーム要素のソースを見ると、あらゆる種類の無関係なものがあります。

この本では、彼はセマンティックHTMLを推進し、マークアップを可能な限り単純/一般的に記述しています。

だから私の質問は、私はこれらの状況で自分のHTMLを書く方が良いですか?私は本当にXHTMLとCSSの標準に準拠して作業したいと思っています。自分で作成できるのであれば、Cakes HTMLのクリーンアップに同じくらいの時間を費やすようです(それ以上ではないにしても)。

考え?

psこれは、CakePhpがFormHelperを使用して生成するすぐに使用できるフォームの例です。

<form id="CompanyAddForm" method="post" action="/omni_cake/companies/add" accept-charset="utf-8"><div style="display:none;"><input type="hidden" name="_method" value="POST" /></div>       <div class="input text required"><label for="CompanyName">Name</label><input name="data[Company][name]" type="text" maxlength="50" id="CompanyName" /></div>        <div class="input text required"><label for="CompanyWebsite">Website</label><input name="data[Company][website]" type="text" maxlength="50" id="CompanyWebsite" /></div>        <div class="input textarea"><label for="CompanyNotes">Notes</label><textarea name="data[Company][notes]" cols="30" rows="6" id="CompanyNotes" ></textarea></div>        <div class="submit"><input type="submit" value="Submit" /></div></form>

編集: インデントされた形式(インデントは標準コンプライアンスの問題には影響しませんが、上記のワンライナースタイルを読み取ることはほぼ不可能です):

<form id="CompanyAddForm" method="post" action="/omni_cake/companies/add" accept-charset="utf-8">
    <div style="display:none;">
       <input type="hidden" name="_method" value="POST" />
    </div>
    <div class="input text required">
        <label for="CompanyName">Name</label>
        <input name="data[Company][name]" type="text" maxlength="50" id="CompanyName" />
    </div>
    <div class="input text required">
        <label for="CompanyWebsite">Website</label>
        <input name="data[Company][website]" type="text" maxlength="50" id="CompanyWebsite" />
    </div>
    <div class="input textarea">
        <label for="CompanyNotes">Notes</label>
        <textarea name="data[Company][notes]" cols="30" rows="6" id="CompanyNotes" ></textarea>
    </div>
    <div class="submit">
        <input type="submit" value="Submit" />
    </div>
</form>

上記では、インラインCSS "display:none"を持つもののように、不要と思われるいくつかのdivがあります。すべてのフィールドのクラスとIDを変更できることに気付きましたが、それぞれに対して変更を行う場合は、自分でHTMLを作成したほうがよいでしょう...

4

4 に答える 4

3

あなたの2つの質問に対する私の答えは次のとおりです。

HTMLやフォームなどを生成するとき、CakePhpは「標準に準拠」していますか?

はい。

[Web標準を使用した設計]では、彼はセマンティックHTMLを推進し、マークアップを可能な限り単純/一般的に記述しています。だから私の質問は、私はこれらの状況で自分のHTMLを書く方が良いですか?

良い時もあればそうでない時もあります。最小限のセマンティックマークアップを使用することが目標である場合は、ほとんどの場合、独自のHTMLを作成する方がよいでしょう。ただし、標準に準拠したHTMLを迅速に生成することが目標である場合は、Cakeを本来の目的(迅速な開発フレームワーク)にすることをお勧めします。

そうは言っても、不要だと思ったときにマークアップの一部を印刷しないようにCakeに指示することができます。たとえば、次のオプションdivでの値を使用して、フォーム入力をラップする要素を抑制することができます:http: //book.cakephp.org/view/1397/options-divfalse

于 2011-01-06T01:41:56.290 に答える
1

Cakeヘルパーによって出力されるマークアップは、いつでも確認できるように、確かに標準に準拠しています。おそらくそれもっと単純ですが、それほどではありません。入力フィールドが非表示になっているコンテナは不要かもしれませんが、これらのフィールドをうまくグループ化して邪魔にならないようにしています。SecurityComponentを使用している場合は、これらの必要な非表示フィールドがさらに多く表示されるため、ラッピングの不要さが少なくなります。それとは別に、私は本当に無関係なマークアップを見つけるのに苦労しています。<div style="display:none;"><div>

構造に満足できない場合は<div><label><input>[error]</div>、特殊$this->Form->label()なメソッドなどを使用して、入力要素のみを生成し、それらを独自のコンテナ要素でラップすることができます。$this->Form->error()どこかに同様に含めることを忘れないでください。

$this->Form->input()基本的な要素のグループを使用してアプリのプロトタイプを作成するのが最善の方法だと思います。多くの場合、これらは最終的なアプリでも完全にサービス可能です。開発中に、Cakeが提供するものとは異なるマークアップが必要であることに気付いた場合は、より多くのカスタムマークアップへの移行を開始できます。自分で要素を記述してはいけないことの1つは、 FormHelperメソッドを使用してそれらを生成する必要があります。これは、手作業で適切に再現するのが面倒な多くの詳細を処理するためです。<input>

FormHelperを除けば、CakeのHTMLマークアップには、残りのほとんどを自分で書いているので、不満はないと思います。

于 2011-01-06T01:44:00.417 に答える
0

CakePHPの本によると、生成されたHTMLは標準に準拠しています。

Helperクラスを拡張することにより、FormHelperメソッドからのデフォルトのHTML出力をオーバーライドできます。

詳細はこちら

于 2011-01-06T00:19:41.497 に答える
0

質問はすでに答えられていますが、これはどの標準とどのバージョンのCakePHPに依存するかを追加する価値があるかもしれません。

HTML5フォーム入力タイプは、たとえば1.2.xおよび1.3.xのFormHelperではサポートされていません。

echo $this->Form->input('User.email', array('type' => 'email'));

次のようなものを出力します

<div class="input textarea">
    <label for="UserEmail">Email</label>
    <textarea id="UserEmail" name="data[User][email]"></textarea>
</div>

どうやらこれは2.0.xで修正されるでしょう。

もう1つのエッジケースは、同じモデルのフォームがページに複数ある場合、HTML識別子が重複する可能性があることです。

于 2011-02-21T01:42:56.567 に答える