2012-03-22 13 views
1

私はClistViewを使用してデータプロバイダのコンテンツを表示しています。Yii - CListViewによって生成されたhtmlの修正

ClistViewは部分的なビューを呼び出すと仮定され、各モデルに対してループします。

最初のモデルの前に何か(つまりタグ)を表示したいと思います。ページ設定の最後のモデルの後に何か(つまり、a)を表示したいとします。

は、私はビュー(index.phpを)を持っていると仮定します。_view.phpで

$this->widget('zii.widgets.CListView', array(
        'dataProvider'=>$localDataProvider, 
        'itemView'=>'_view', // refers to the partial view named '_post' 
        'summaryText'=>'Sono visualizzati i record da {start} a {end} su un totale di {count} libri', 
        'pager' => Array(
        'header' => 'Vai alla pagina', 
        'prevPageLabel' => 'Indietro', 
        'nextPageLabel' => 'Avanti', 
        ), 
        )); 

私はテーブルのちょうど細胞を持っています。

テーブルヘッダーをレンダリングするhtmlとテーブルフッタをレンダリングするhtmlの直後に、div内にそのページャーのhtmlがあるとします。

_view.phpでヘッダーとフッターを直接シフトする方法はありますか?あなたがテーブルを生成しようとしているので

おかげ

答えて

2

:それは

$pre_html = '<table><thead><th>Codice Account</th><th>Nome</th></thead><tbody>'; 
$post_html = '</tbody></table>'; 

$this->widget('zii.widgets.PlainCListView', array(
        'dataProvider'=>$dataProvider, 
        'itemView'=>'_view', 
        'preItemsTag'=>$pre_html, 
        'postItemsTag'=>$post_html, 
        'summaryText'=>'Sono visualizzati i record da {start} a {end} su un totale di {count} libri', 
        'pager' => Array(
        'header' => 'Vai alla pagina', 
        'prevPageLabel' => 'Indietro', 
        'nextPageLabel' => 'Avanti', 
         ), 
        'sortableAttributes'=>array('titolo'), 
        'enableSorting'=>0, 



)); 

Yii::import('zii.widgets.CListView'); 

class PlainCListView extends CListView 

{ 

public $preItemsTag = ''; 
public $postItemsTag = ''; 

public function renderItems() 
{ 
    echo $this->preItemsTag."\n"; 
    $data=$this->dataProvider->getData(); 
    if(($n=count($data))>0) 
    { 
     $owner=$this->getOwner(); 
     $render=$owner instanceof CController ? 'renderPartial' : 'render'; 
     $j=0; 
     foreach($data as $i=>$item) 
     { 
      $data=$this->viewData; 
      $data['index']=$i; 
      $data['data']=$item; 
      $data['widget']=$this; 
      $owner->$render($this->itemView,$data); 
      if($j++ < $n-1) 
       echo $this->separator; 
     } 
    } 
    else 
     $this->renderEmptyText(); 
    echo $this->postItemsTag."\n"; 

} 


} 

私はコードでこのソリューションを使用すると、クラスの基本バージョン

echo CHtml::openTag($this->itemsTagName,array('class'=>$this->itemsCssClass))."\n"; 

echo CHtml::closeTag($this->itemsTagName); 

のラインを上書きすることが可能です私が必要とするものを出力することが可能です。

+0

@maxdnangelo: "PlainCListView"クラスファイルはどこに配置しましたか? – MEM

0

は、あなたの代わりにCListViewのCGridViewを使用して、それをやろうとしなければなりません。

+0

ナヒアン、あなたの答えに感謝します。もちろん、私はCGridViewを使用しても何の問題もありませんが、私が望むものを得るためにClistViewを使いたいと思います。 – maxdangelo

0

はあなたが必要とテンプレートのものを手配するかもしれない

'template' => "<your header tag>{items}<your footer tag>{pager}", 

としてCClistViewのテンプレートを設定してみてください。このクラスの拡張子を持つ

+0

もう一度おねがいしますが、これは助けにはならない、リクエストされていないHTMLが多すぎます。私はCListViewクラスを変更しました。 – maxdangelo

+1

「私はCListViewクラスを修正しました」という言葉が何であるか分かりませんが、私はより正確だと思います。*拡張* CListView、拡張クラスでの変更を行い、そのクラスを使用してください。フレームワークのクラスを変更しないでください。その悪い習慣。残りの中で、より似たような状況でこれを行うと、たとえば、新しいセキュリティ更新プログラムの修正のために、フレームワークフォルダをアップグレードできなくなります。 –

+0

ボアズ、提案に感謝します。私が修正したとき、私は私が拡張されたことを意味していたことは明らかです。フレームワークを変更するのは悪い習慣です。 – maxdangelo

関連する問題