Tabellarische Eingabe Seitenweise

Hallo,

Ich habe mit Hilfe der Extension MultiModelForm eine Seite gemacht, in der alle Datensätze einer Tabelle zeilenweise angezeigt werden (tabellarische Eingabe). Da es viele Datensätze sind, sollten sie auf mehrere Seiten aufgeteilt werden, wie bei dem Widget CGridView.

Wie kann ich diese Pagination in das Formular einbauen?

Bin Yii Anfänger. Bitte um Nachsicht.

Das ist der Code im Controller:


public function actionTabularInput() {

    Yii::import('ext.multimodelform.MultiModelForm');


    $model = new Member();

    $model->setisNewRecord(false);

    $validatedMembers = array(); 


    if(isset($_POST['Member']))

    {

        $model->attributes=$_POST['Member'];

        MultiModelForm::save($model,$validatedMembers,$deleteMembers);

    }


    $this->render('tabularInput',array(

        'model'=>$model,

        'validatedMembers' => $validatedMembers,

    ));

}

Das ist meine _tabularInputForm.php, welche von tabularinput.php gerendert wird:


<div class="form wide">

 

<?php $form=$this->beginWidget('CActiveForm', array(

        'id'=>'group-form',

        'enableAjaxValidation'=>false,

)); ?>

 

<p class="note">Fields with <span class="required">*</span> are required.</p>

 

<?php

echo $form->errorSummary(array_merge(array($model),$validatedMembers));

$memberFormConfig = array(

      'elements'=>array(

        'firstname'=>array(

            'type'=>'text',

            'maxlength'=>40,

      ),

      'lastname'=>array(

            'type'=>'text',

            'maxlength'=>40,

      ),

      'groupid'=>array(

            'type'=>'text',

            'maxlength'=>5,

       ),

       'membersince'=>array(

            'type'=>'dropdownlist',

            //it is important to add an empty item because of new records

            'items'=>array(''=>'-',2009=>2009,2010=>2010,2011=>2011,),

       ),

));

 

$this->widget('ext.multimodelform.MultiModelForm',array(

        'id' => 'id_member', //the unique widget id

        'formConfig' => $memberFormConfig, //the form configuration array

        'model' => $model, //instance of the form model

        'tableView' => true,


        //if submitted not empty from the controller,

        //the form will be rendered with validation errors

        'validatedItems' => $validatedMembers,


        //array of member instances loaded from db

        'data' => $model->findAll(array('order'=>'groupid ASC')),


//      'data'=> new CActiveDataProvider($model, array(

//           'pagination' => array('pageSize' => 5,),

//           'criteria'=>array('order'=>'groupid ASC',),

//      )),


));

?>

 

<div class="row buttons">

    <?php echo CHtml::submitButton($model->isNewRecord ? 'Create' : 'Save'); ?>

</div>

 

<?php $this->endWidget(); ?>

 

</div>

Unten sieht man auskommentiert meinen vergeblichen Versuch mit der Pagination.

Danke im Voraus für jeden Tipp.

Ferdinand

Hallo,

schaut für mich so aus, als hättest du in deinem Code die Array’s falsch verschachtelt. Das pagination Array gehört nicht in das erste criteria Array sondern auf der “gleichen Ebene” wie dieses danach eingefügt.




'data'=> new CActiveDataProvider($model, array(

  	'criteria'=>array(

		'order'=>'groupid ASC',

	),

	'pagination' => array(

		'pageSize' => 5,

      ),

));



Wenns nicht funktioniert poste mal bitte die Fehlermeldung…

[size="4"]Edit[/size]: Seh gerade das meine Version identisch mit deiner ist

Aus MultiFormModel.php Zeile 39 - 45 der Extension


/**

* Array of models loaded from db.

* Created for example by $model->findAll();

*

* @var CModel $data

*/

 public $data;

Wie man sieht wird CModel für $data erwartet und nicht eine DataProvider Klasse wie z.B. CActiveDataProvider.

P.S.: Daraus schließe ich, das Pagination in dieser Extension nicht unterstützt wird.

Die seitenweise Anzeige (pagination) ist mir jetzt doch gelungen mit folgendem Code, den ich in das Formular eingebaut habe:




    ...


    $criteria = $model->search()->criteria;

    $count=$model->count($criteria);


    $pages=new CPagination($count);

    $pages->pageSize=10;

    $pages->applyLimit($criteria);


    $this->widget('ext.multimodelform.MultiModelForm',array(

       ...

    $this->endWidget(); ?>

 

    ...


<?php $this->widget('CLinkPager', array(

    'pages' => $pages,

)); ?>

Ich verstehe es zwar nicht ganz, aber es funktioniert.

Vor allem kapiere ich den Unterschied zwischen dataProvider und $model->findAll() nicht