bia
(Beatrizvieirasilva V)
February 21, 2013, 10:40pm
1
Pessoal tenho uma página de cadastro de livro,mas para cadastrar livro
preciso buscar o autor, já tenho minha tabela autor, como posso
fazer um campo de busca no cadastro de livro que busca todos os autores
da minha tabela autor?
Alguem sabe como?
Desde já Obrigada.
gugoan
(Gugoan)
February 22, 2013, 1:03am
2
Você pode usar um campo select mesmo, tipo:
<?php
$autor= CHtml::listData(Autor::model()->findAll(), 'id_autor', 'nome_autor');
$options = array(
'tabindex' => '0',
'empty' => '-- Selecione --',
);?>
bia
(Beatrizvieirasilva V)
February 22, 2013, 2:53am
3
Você pode usar um campo select mesmo, tipo:
<?php
$autor= CHtml::listData(Autor::model()->findAll(), 'id_autor', 'nome_autor');
$options = array(
'tabindex' => '0',
'empty' => '-- Selecione --',
);?>
O problema é se possuírem vários autores
quero fazer um campo de busca que você digita
o nome do autor ou parte do nome dele,e o autor aparece em uma tabela
ricardo_rm
(Rrmontuan)
February 22, 2013, 11:20am
4
bia:
O problema é se possuírem vários autores
quero fazer um campo de busca que você digita
o nome do autor ou parte do nome dele,e o autor aparece em uma tabela
Olá bia, tudo bem?
Então não sei se é exatamente o que você quer, mas você pode ter uma busca com autocomplete, assim:
<?php
$this->widget('zii.widgets.jui.CJuiAutoComplete', array(
'id'=>'autor',
'name'=>'autor',
'source'=>$this->createUrl('ator/pesquisaator'),
'htmlOptions'=>array(
),
));
?>
No caso source será o controller/action usado para buscar o termo digitado.
Dai no seu controlador, você recupera o valor digitado e utiliza algum método para fazer a busca.
public function actionPesquisaator()
{
if(isset($_GET['term'])&&($keyword=trim($_GET['term']))!=='')
{
$suggest=Ator::model()->pesquisaAtor($keyword);
echo CJSON::encode($suggest);
}
}
era isso que você precisava?
bia
(Beatrizvieirasilva V)
February 22, 2013, 4:18pm
5
ricardo_rm:
Olá bia, tudo bem?
Então não sei se é exatamente o que você quer, mas você pode ter uma busca com autocomplete, assim:
<?php
$this->widget('zii.widgets.jui.CJuiAutoComplete', array(
'id'=>'autor',
'name'=>'autor',
'source'=>$this->createUrl('ator/pesquisaator'),
'htmlOptions'=>array(
),
));
?>
No caso source será o controller/action usado para buscar o termo digitado.
Dai no seu controlador, você recupera o valor digitado e utiliza algum método para fazer a busca.
public function actionPesquisaator()
{
if(isset($_GET['term'])&&($keyword=trim($_GET['term']))!=='')
{
$suggest=Ator::model()->pesquisaAtor($keyword);
echo CJSON::encode($suggest);
}
}
era isso que você precisava?
Ficaria assim ?
<?php
$this->widget('zii.widgets.jui.CJuiAutoComplete', array(
'id'=>'idAutores',
'name'=>'nome',
'source'=>$this->createUrl('AutoresController/pesquisaAtor'),
'htmlOptions'=>array(
),
));
?>
</div>
public function actionPesquisaAtor()
{
if(isset($_GET['term'])&&($keyword=trim($_GET['term']))!=='')
{
$suggest=Autores::model()->pesquisaAtor($keyword);
echo CJSON::encode($suggest);
}
}
lembrando que quero buscar o autor no form do view material
sendo que autor é outro view
ricardo_rm
(Rrmontuan)
February 22, 2013, 4:44pm
6
isso mesmo, não há problemas …
o que você poderia fazer pra ficar mais legal é o seguinte:
1 - faça esse autocomplete dessa forma, só armazenando o nome …
2 - quando o nome for selecionado ele pode preencher uma input do tipo "hidden" com o id do autor, dessa forma você só recupera esse campo …
Quando comecei com Yii encontrei uns exemplos legais de widgets no site abaixo, inclusive tem esse de autocomplete, ve se te ajuda:
http://www.eha.ee/labs/yiiplay/index.php/en/site/widget?view=autocomplete
isso que falei seria parecido com o terceiro exemplo do site …
bia
(Beatrizvieirasilva V)
February 22, 2013, 4:57pm
7
ricardo_rm:
isso mesmo, não há problemas …
o que você poderia fazer pra ficar mais legal é o seguinte:
1 - faça esse autocomplete dessa forma, só armazenando o nome …
2 - quando o nome for selecionado ele pode preencher uma input do tipo "hidden" com o id do autor, dessa forma você só recupera esse campo …
Quando comecei com Yii encontrei uns exemplos legais de widgets no site abaixo, inclusive tem esse de autocomplete, ve se te ajuda:
http://www.eha.ee/labs/yiiplay/index.php/en/site/widget?view=autocomplete
isso que falei seria parecido com o terceiro exemplo do site …
fiz exatamente como postei anteriormente e não deu certo
ricardo_rm
(Rrmontuan)
February 22, 2013, 5:50pm
8
Bia, fiz alguns ajustes aqui e está funcionando tente ai …
View:
<?php
$this->widget('zii.widgets.jui.CJuiAutoComplete', array(
'id'=>'idAutores',
'name'=>'nome',
'source'=>$this->createUrl('autores/pesquisaAutores'),
'htmlOptions'=>array(),
));
?>
AutoresController - adicionar a seguinte action:
public function actionPesquisaAutores(){
if(isset($_GET['term'])&&($keyword=trim($_GET['term']))!==''){
$pesquisa = Tag::model()->getAutores($keyword);
echo CJSON::encode($pesquisa);
}
}
Autores(Model) - adicionar o seguinte método:
public function getAutores($keyword){
$retorno = array();
$autores = array(
'Marcelo'=>'Marcelo',
'Maria'=>'Maria',
'Pedro'=>'Pedro',
'Antonio'=>'Antonio'
);
foreach($autores as $indice=>$conteudo){
if(strpos($indice, $keyword) !== false){
$retorno[] = utf8_encode($conteudo);
}
}
return $retorno;
}
A única coisa que você terá que ajustar é o método getAutores para que ele busque o resultado no banco. No meu caso fiz com uma array apenas para lhe mostrar
bia
(Beatrizvieirasilva V)
February 22, 2013, 6:53pm
9
ricardo_rm:
Bia, fiz alguns ajustes aqui e está funcionando tente ai …
View:
<?php
$this->widget('zii.widgets.jui.CJuiAutoComplete', array(
'id'=>'idAutores',
'name'=>'nome',
'source'=>$this->createUrl('autores/pesquisaAutores'),
'htmlOptions'=>array(),
));
?>
AutoresController - adicionar a seguinte action:
public function actionPesquisaAutores(){
if(isset($_GET['term'])&&($keyword=trim($_GET['term']))!==''){
$pesquisa = Tag::model()->getAutores($keyword);
echo CJSON::encode($pesquisa);
}
}
Autores(Model) - adicionar o seguinte método:
public function getAutores($keyword){
$retorno = array();
$autores = array(
'Marcelo'=>'Marcelo',
'Maria'=>'Maria',
'Pedro'=>'Pedro',
'Antonio'=>'Antonio'
);
foreach($autores as $indice=>$conteudo){
if(strpos($indice, $keyword) !== false){
$retorno[] = utf8_encode($conteudo);
}
}
return $retorno;
}
A única coisa que você terá que ajustar é o método getAutores para que ele busque o resultado no banco. No meu caso fiz com uma array apenas para lhe mostrar
Obrigada, mas uma dúvida esse View vai ficar no :
C:\wamp\www\biblioteca\protected\views\autores\view ??
ricardo_rm
(Rrmontuan)
February 22, 2013, 7:01pm
10
Funcionou? rs …
Então, na verdade, aquele trecho pode ser inserido em qualquer view, inclusive na view que contem o formulário responsável pelo seu cadastro de livros …
bia
(Beatrizvieirasilva V)
February 22, 2013, 7:59pm
11
ricardo_rm:
Funcionou? rs …
Então, na verdade, aquele trecho pode ser inserido em qualquer view, inclusive na view que contem o formulário responsável pelo seu cadastro de livros …
Ops não funcionou, desculpa minha ignorância sou iniciante em php e no Yii,
esse : ‘id’=>‘idAutores’, se refere ao idAutores da minha tabela autores
'name'=>'nome', e o name ao nome do autor da tabela??
ricardo_rm
(Rrmontuan)
February 25, 2013, 11:29am
12
bia:
Ops não funcionou, desculpa minha ignorância sou iniciante em php e no Yii,
esse : ‘id’=>‘idAutores’, se refere ao idAutores da minha tabela autores
'name'=>'nome', e o name ao nome do autor da tabela??
relaxa, todos já passamos por isso rs … esses atributos definem o name e o id do input, html mesmo, não tem nada a ver com a tabela …
Então, mas você fez isso que falei e que erro aparaeceu? se possivel ativa o debug no arquivo index.php:
defined('YII_DEBUG') or define('YII_DEBUG',true);