Pessoal,
Dando continuidade sobre o maste-detail eu segui o exemplo do Gustavo Gonçalves mas ainda estou patinando
Explicando a minha estrutura:
model Aplicacao.php
controller AplicacaoController
View create.php que chama via renderPartial _form.php onde o _form chama via renderPartial _form_detail.php
Segue a view _form.php
<?php $form=$this->beginWidget('bootstrap.widgets.TbActiveForm',array(
'id'=>'aplicacao-form',
'enableAjaxValidation'=>true,
'htmlOptions'=>array('class'=>'well'),
)); ?>
<p class="help-block">Campos com <span class="required">*</span> são obrigatórios.</p>
<?php echo $form->textFieldRow($model,'descricao_apl',array('class'=>'span5','maxlength'=>255)); ?>
<?php echo $form->textFieldRow($model,'msgdia_apl',array('class'=>'span1')); ?>
<?php echo $form->checkBoxRow($model,'enviamsgnet_apl'); ?>
<?php echo $form->checkBoxRow($model,'recebemsgnet_apl'); ?>
<?php echo $form->checkBoxRow($model,'cxpostal_apl'); ?>
<?php echo $form->checkBoxRow($model,'autentica_apl'); ?>
<?php echo $form->textFieldRow($model,'uniresp_apl',array('class'=>'span5','maxlength'=>255)); ?>
<?php echo $form->textFieldRow($model,'nomeresp_apl',array('class'=>'span5','maxlength'=>255)); ?>
<?php echo $form->textFieldRow($model,'foneresp_apl',array('class'=>'span2','maxlength'=>100)); ?>
<?php echo $form->textFieldRow($model,'emailresp_apl',array('class'=>'span5','maxlength'=>255)); ?>
<?php //echo $form->textFieldRow($model,'solicitante_apl',array('class'=>'span5','maxlength'=>20)); ?>
<?php //echo $form->textFieldRow($model,'autorizado_apl',array('class'=>'span5','maxlength'=>20)); ?>
<!-- FormDetail -->
<hr>
<fieldset>
<legend>Servidores</legend>
<div class="row">
<div class="span4">
<?php
echo CHtml::label('FQDN','1');
?>
</div>
<div class="span3">
<?php
echo CHtml::label('Endereço IP','1');
?>
</div>
</div>
<div class="row">
<div class="span4">
<?php
echo CHtml::textField('hostname_aplip', '', array('class'=>'span4'));
?>
</div>
<div class="span3">
<?php
echo CHtml::textField('ip_aplip');
?>
</div>
<div class="span1">
<script>
function allFine(data) {
// display data returned from action
$("#div_itens").html(data);
// refresh your grid
//$.fn.yiiGridView.update('itens-grid');
}
</script>
<?php $this->widget('bootstrap.widgets.TbButton', array(
'icon' => 'icon-plus',
'size' =>'medium',
'type' => 'warning',
'buttonType' => 'ajaxLink',
'url' => $this->createUrl('addItem'),
'ajaxOptions'=>array('type'=>'POST',
'success'=>'allFine',
),
)); ?>
</div>
<div class="row span8">
<div class="row-fluid" id="div_itens">
<div>
<?php
$aplip = new AplicacaoIp;
$this->widget('bootstrap.widgets.TbGridView',array(
'id'=>'itens-grid',
'template'=>"{items}",
'dataProvider'=>$aplip->search(),
'type'=>'striped bordered condensed',
//'ajaxUrl'=>array('ajaxCreate'),
'ajaxUpdate'=>true,
'columns'=>array(
array(
'name' => 'Hostname',
'type' => 'raw',
'value' => 'CHtml::encode($data["hostname_aplip"])'
),
array(
'name' => 'Endereço IP',
'type' => 'raw',
'value' => 'CHtml::encode($data["ip_aplip"])'
),
array(
'class'=>'bootstrap.widgets.TbButtonColumn',
'htmlOptions'=>array('style'=>'width: 50px'),
),
),
));
?>
</div>
</div>
</div>
</fieldset>
<div class="form-actions">
<?php $this->widget('bootstrap.widgets.TbButton', array(
'buttonType'=>'submit',
'type'=>'primary',
'label'=>$model->isNewRecord ? 'Incluír' : 'Salvar',
)); ?>
</div>
<?php $this->endWidget(); ?>
Segue a view _form_detail.php
<div class="row-fluid" id="div_itens">
<div>
<?php
$this->widget('bootstrap.widgets.TbGridView',array(
'id'=>'itens-grid',
'template'=>"{items}",
'dataProvider'=>$db_itens,
'type'=>'striped bordered condensed',
'ajaxUrl'=>array('addItem'),
'ajaxUpdate'=>true,
'columns'=>array(
array(
'name' => 'Hostname',
'type' => 'raw',
'value' => 'CHtml::encode($data["hostname_aplip"])'
),
array(
'name' => 'Endereço IP',
'type' => 'raw',
'value' => 'CHtml::encode($data["ip_aplip"])'
),
array(
'class'=>'bootstrap.widgets.TbButtonColumn',
'htmlOptions'=>array('style'=>'width: 50px'),
),
),
));
?>
</div>
</div>
O Controller
public function actionAddItem()
{
if(!empty($_POST))
// se precisar fazer um loop em vários campos do $_POST, usar este comando
//while(list($key, $val) = each($_POST)) {
//echo $key."=".$val."<br>"; // so para ver os valores, nao é necessario
//}
$items = array();
// Cria um novo model limpo, da tabela itens
$items = new AplicacaoIp;
$items->unsetAttributes();
$items->hostname_aplip = $_REQUEST['hostname_aplip'];
$items->ip_aplip = $_REQUEST['ip_aplip'];
////////////////////////////
// NESTE PONTO PRECISO TER O DATAPROVIDER ATUAL, PARA JUNTAR COM O NOVO REGISTRO
////////////////////////////
// Dados do GridView
$rawData=array(
array('id'=>1,
'hostname_aplip'=>$items->hostname_aplip,
'ip_aplip'=>$items->ip_aplip,
),
);
// Criando o novo Array para a Tabela GridView
// or using: $rawData=User::model()->findAll();
$db_itens = array();
$db_itens = new CArrayDataProvider($rawData, array(
'id'=>'id',
'sort'=>array(
'attributes'=>array(
'hostname_aplip',
),
),
'pagination'=>array(
'pageSize'=>15,
),
));
//print_r($db_itens);
// Nao é necessário, deixei aqui pra testar depois o merge de arrays
// Fazendo um Merge dos Arrays
//$data = $db_itens->getData();
//$data[] = $items;
//$db_itens->setData($data);
// Devolvendo os valores para a página
$this->renderPartial('_form_detail',array('dataProvider'=>$db_itens));
}
Bom o problema esta no carregamento do _form_detail.php onde o Yii retorna o erro
<h1>PHP Error [8]</h1>
<p>Undefined variable: dp_itens (/var/www/datamail/protected/controllers/AplicacaoController.php:237)</p>
<pre>#0 /var/www/datamail/protected/controllers/AplicacaoController.php(237): CWebApplication->handleError
Segue também a tela para analise
Uma obs estou usando a extensão Yii-bootstrap
Se alguém puder dar uma luz de como atualizar a CgridView
Obrigado a todos