2011-10-21 16 views
4

私のコントローラで$ this-> layout = 'ajax'を宣言すると、私のcss dosntが動作するようです。

私のview1.ctpで、私はjqueryを使用してダイアログボックスを作成しました。コンテンツはview2.ctpからjquery.ajax()を介して取得されます。私はhtmlのクラス、idとview1.ctpに似たものを作成しました。

内容を受信して​​も問題ありません。問題は、view2.ctp内で宣言されたIDとクラスが動作していないことです。要するに、空のダイアログデザインを取得しています。

これを解決する方法はありますか?前もって感謝します。乾杯!私view1.ctpで

:ここ

<div id="thisDialog"> 
    <div id="content"> 
    </div> 
</div> 

<script> 
    jQuery('.test_box').live('click',function(){ 
     jQuery('#content').empty(); 
     jQuery.ajax({ 
      async:false, 
      url: '/controller1/view2/'+id //url pointing to my 1controller.php 
      success:function(data){ 
       jQuery('#content').append(data); 

      } 
     }); 


     jQuery('#thisDialog').dialog('open'); 
    }); 

</script> 

はcontroller1.phpある

ここ
function view2($id) 
    { 
    $this->layout = 'ajax'; 
    $query = $this->Model->find('all') //somequery here 
} 

はview2.ctp

<div class='box'> 
    <div class='title'> 
      <h5>Title here</h5> 
    </div> 
    <div class='contents'> 
     <table> 
      <tr> 
      <td class='head'></td> 
       <td class='head'></td> 
       </tr> 
       <tr> 
       <td class='alt'>Field content1 here</td> 
       <td>Fields content2 here</td> 
       </tr> 
     </table> 
    </div> 
</div> 
+0

default.ctpとajaxを追加することもできます。 ctp? – Rifat

答えて

4

AJAXレイアウトは、単純な空のファイルであります出力するHTML(または他のコンテンツ)スクラップのみが含まれています。スタイル情報は、コンテンツを挿入するページから来る必要があるため、スタイルシートは含まれません。呼び出しページのIDとクラスのスタイルを定義することで、問題を解決できます。

+0

layout.ctpには、view1.ctpがusign $ contents_for_layoutと呼ばれていますが、layout.ctpのタグにすべてのスタイルシートが含まれています。layout.ctpで宣言したスタイルシートはappですview1.ctpに嘘をついた。あなたが私のview2.ctpで利用できるように私のview1.ctpでスタイルシートを再宣言しなければならないと説明しようとしていますか? ^^ – unknown

+0

それは異なります。あなたのAJAX呼び出しの内容がlayout.ctpのDOMに挿入されている場合は、何も再宣言する必要はありません。それ以外の場合は、独自のCSSを持つliteboxやダイアログを使用している場合は、再宣言する必要があります。 Firebugを使ってDOMを見ると、何が起きているのかを簡単に知ることができます。 – JohnP

+0

ダイアログボックスはレイアウトのDOMの中にあり、私はview1.ctpの中で自分のスタイルシートを再宣言しようとしました。まだ動かない。応答のためにthansl。 – unknown

0

「AJAX」のレイアウトはケーキ/ libsに/ビュー/レイアウト/ ajax.ctpで見つけることができ、それは内容があります:

<?php echo $content_for_layout; ?> 

これは本質的に任意の周囲のHTMLせずに、ビューを出力する(そうなしCSSまたはJS)。

+0

返事をありがとう。 $ this-> layout = 'ajax'を使用していない場合、cssまたはjsを使用してビューをカスタマイズする方法はありません。 – unknown

+1

生データをajax呼び出し(JSONオブジェクトまたはHTMLスニペット)に送信する場合にのみ、このビューを使用してください。あなたのページがiframeのajax経由でロードされている場合(いくつかのモーダルプラグインはこれを行います)、含まれているページスタイルがiframeの内容に適用されないので、デフォルトのレイアウトを使用する必要があります。 –

0

「ajax」レイアウトにCSSが必要なのはなぜですか?とにかく:

は、それが一般的なHTMLのものなしだbefor言ったように、レイアウトは(/cake/libs/view/layout/ajax.ctpで見つけることができ
  1. 、ちょうどコントローラから出力したデータをエコー
  2. あなたがコピーすることができます。このファイル(またはdefault.ctp)を/app/views/layouts/ajax.ctpに追加して、ケーキのコアファイルの代わりに使用するようにしてください。