Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Pessoal, preciso fazer uma tela de venda e estou cada vez mais empacado nessa parte, com jQuery eu consigo adicionar/remover campos dinamicamente para aparecer no HTML, mas ao salvar o formulário, é salvo apenas uma linha e com informações erradas.
jQuery
var count = 1;
var campo = document.getElementById("copyhash").value;
$( "#duplicar" ).click(function() {
$( "#fields" ).append(
'<div id="item" class="col-md-12 item">' +
'<input id="copyhash" value="'+ campo +'" type="hidden" name="data[Item]['+ count +'][sale_hash]"/>' +
'<div class="form-group">' +
'<div class="col-md-4 col-xs-12">' +
'<div class="input-group">' +
'<span class="input-group-addon"><span class="fa fa-folder-open"></span></span>' +
'<select name="data[Item]['+ count +'][product_id]" class="form-control select2" required="required" id="SalePredated">' +
'<option value="">Selecione um produto...</option>' +
'<option value="1">Acessório</option>' +
'<option value="2">Bermuda</option>' +
'<option value="3">Blusa</option>' +
'<option value="4">Bolsa</option>' +
'<option value="5">Calça</option>' +
'<option value="6">Cinto</option>' +
'<option value="7">Macacão</option>' +
'<option value="8">Regata</option>' +
'<option value="9">Saia</option>' +
'<option value="10">Vestido</option>' +
'</select>' +
'</div>' +
'</div>' +
'<div class="col-md-4 col-xs-12">' +
'<div class="input-group">' +
'<span class="input-group-addon"><span class="fa fa-info"></span></span>' +
'<input name="data[Item]['+ count +'][descricao]" placeholder="Detalhes" class="form-control" maxlength="10" type="text" id="SalePredated"/>' +
'</div>' +
'</div>' +
'<div class="col-md-3 col-xs-12">' +
'<div class="input-group">' +
'<span class="input-group-addon"><span class="fa fa-money"></span></span>' +
'<input name="data[Item]['+ count +'][amount]" placeholder="0,00" class="form-control" required="required" maxlength="10" type="text" id="SalePredated"/>' +
'</div>' +
'</div>' +
'<div class="col-md-1 col-xs-12">' +
'<div class="remover input-group">' +
'<span class="fa fa-close" style="cursor: pointer; color: #ff6218; font-size: 28px; text-align: right;"></span>' +
'</div>' +
'</div>' +
'</div>' +
'</div>');
count++;
});
});
Sales Controller
$data = $this->request->data['Item'];
$this->Item->saveMany($data);
É basicamente isso, ele pode adicionar e remover itens com jQuery, mas preciso que o PHP entenda isso e aceite para adicionar vários itens relacionado com aquela venda.
>
Se não me engano um post anterior você tinha um problema parecido.
Coloque [] nos inputs
'<input name="data[Item]['+ count +'][descricao][]" placeholder="Detalhes" class="form-control" maxlength="10" type="text" id="SalePredated" />'
...
Ficando data[0][item][], data[1][item][]...? Isso é novidade para mim!
Notice (8): Array to string conversion [CORE\Cake\Model\Datasource\DboSource.php, line 1007]
Dá uma lida aí http://book.cakephp.org/2.0/en/models/saving-your-data.html#model-savemany-array-data-null-array-options-array
Para usar o saveMany, os campos devem estar no formato.
$data = [
['NomeCampo' => 'valor'],
['NomeCampo' => 'valor'],
);
Eu já li e reli cada documento, tanto que empaquei nessa parte e só falta ela para completar uma venda
Eu já li e reli cada documento, tanto que empaquei nessa parte e só falta ela para completar uma venda
Faça as alterações que sugeri e poste aqui a saída de:
pr($this->request->data);
Colocando Item[0][id][] nem cadastra, se colocar Item[id][] ele cadastra somente uma linha com campos incorretos, do jeito que está, cadastra o primeiro normalmente, mas qualquer campo que foi inserido dinamicamente, o PHP não reconhece. Exemplo, se eu deixar dois campos já no HTML, ele vai cadastrar somente esses dois corretamente.
array(
(int) 0 => array(
'sale_hash' => 'f627b14b0bf85eab067f9e110e6af29d',
'product_id' => '1',
'descricao' => '123',
'amount' => '1'
)
)Certeza que os está dentro da tag form ?
Se não me engano um post anterior você tinha um problema parecido.
Coloque [] nos inputs