Bom,
Graças a ajuda de vcs já estou capturando a data do juidatepicker e inserindo no banco de dados, tanto pelo action update qnto pelo action create.
Mas agora tem outro problema: formatação de data para exibir.
Existe alguma maneira deu formatar a data apartir do model?
Eu tentei fazer o seguinte no controller:
public function loadModel($id)
{
$model=Projeto::model()->findByPk((int)$id);
if($model===null)
throw new CHttpException(404,'The requested page does not exist.');
$dataInicio = $model->data_inicio;
$ar = explode('-', $dataInicio);
$model->data_inicio = $ar[2].'/'.$ar[1].'/'.$ar[0];
return $model;
}
Mas não esta funcionando em certos lugares como na view, por exemplo, conde eu uso o cgridview:
$this->widget('zii.widgets.grid.CGridView', array(
'id'=>'projeto-grid',
'dataProvider'=>$dataProvider,
'filter'=>$model,
'columns'=>array(
array(
'class'=>'CLinkColumn',
'header'=>'nameLink',
'labelExpression'=>'$data->nome',
'urlExpression'=>'Yii::app()->controller->createUrl("view", array("id"=>$data->id))',
),
'cliente',
'status',
'data_inicio',
),
)
);
que fica no meu index.php dentro da view.
Alguém pode me ajudar?
Flavio
(Flavioleonelferreira)
October 20, 2010, 7:57pm
22
array(
'name' => 'data',
'htmlOptions' => array('style'=>'text-align: center;'),
'filter'=>false,
'value'=>'date("M/Y",strtotime($data->data))',
),
o ideal é armazenar a data/hora no formato nativo do banco e manipular na hora de mostrar
Flavio:
array(
'name' => 'data',
'htmlOptions' => array('style'=>'text-align: center;'),
'filter'=>false,
'value'=>'date("M/Y",strtotime($data->data))',
),
o ideal é armazenar a data/hora no formato nativo do banco e manipular na hora de mostrar
Eu consigo fazer isso sem ter q formatar na hora de exibir? Ou seja, ele esta no formato nativo no banco, mas na hora de criar os objetos retornar a data já no formato padrão?
Flavio
(Flavioleonelferreira)
October 20, 2010, 8:15pm
24
uma forma é criar uma função no seu Model:
public function getDataFormatada()
{
return date("M/Y",strtotime($this->data))
}
ai vc pode acessar:
echo $model->DataFormatada
Cara, isso aconteceu comigo, não achei ninguem mais no forum falando sobre isso. Eu não consegui identificar o que está de errado no attributes. Pelo menos me deixa mais confortável, afinal, eu não sou maluco
Eu não consigo identificar quando esse erro dá … como vou reportar isso??
Cara, isso aconteceu comigo, não achei ninguem mais no forum falando sobre isso. Eu não consegui identificar o que está de errado no attributes. Pelo menos me deixa mais confortável, afinal, eu não sou maluco
Eu não consigo identificar quando esse erro dá … como vou reportar isso??
Pois é cara, eu li que essa funcionalidade $model->attributes=$_POST[‘Projeto’] foi inserida a pouco, na versão 1.1.4.
Vamos aguardar.
Flavio:
uma forma é criar uma função no seu Model:
public function getDataFormatada()
{
return date("M/Y",strtotime($this->data))
}
ai vc pode acessar:
echo $model->DataFormatada
Foi mais simples do q eu imaginava.
Dentro da model eu crio uma variável protected e uma função chamada getVariavel.
Ficou assim:
class Projeto extends CActiveRecord
{
(...)
protected $dataBrasileira;
(...)
public function getDataBrasileira()
{
$projeto = Projeto::model()->findbyPk($this->id);
$data = $projeto->data_inicio;
$ar = explode('-', $data);
$dataBrasileira = $ar[2].'/'.$ar[1].'/'.$ar[0];
return $dataBrasileira;
}
(...)
}
e para usar é só $model->dataBrasileira.
Valeu!
rickgrana
(Ricardo Grana)
October 21, 2010, 7:13pm
28
Flavio:
no seu Model tá definido a variavel?
public function rules()
{
return array(
...
array('data_emissao','safe');
...
);
}
Flavio:
PQP!!!!!
Maluco, vc acredita que
$model->data_inicio = $_POST['Projeto']['data_inicio'];
funcionou!!!!!!!!!
Mas pô, não esta errado?
O $model->attributes=$_POST[‘Projeto’]; não deveria funcionar?
Pode ser caracterizado como Bug?
Cara, valeu…
Flávio, obrigado tb!
Se vc define a variável como ‘safe’, ela não é atribuída automaticamente quando vc faz
$model->attributes = $_POST['Projeto']
Quando é ‘safe’, vc precisa setar a variavel explicitamente
$model->data_inicio = $_POST['Projeto']['data_inicio'];
Flavio:
Bom,
Graças a ajuda de vcs já estou capturando a data do juidatepicker e inserindo no banco de dados, tanto pelo action update qnto pelo action create.
Mas agora tem outro problema: formatação de data para exibir.
Existe alguma maneira deu formatar a data apartir do model?
Eu tentei fazer o seguinte no controller:
public function loadModel($id)
{
$model=Projeto::model()->findByPk((int)$id);
if($model===null)
throw new CHttpException(404,'The requested page does not exist.');
$dataInicio = $model->data_inicio;
$ar = explode('-', $dataInicio);
$model->data_inicio = $ar[2].'/'.$ar[1].'/'.$ar[0];
return $model;
}
Mas não esta funcionando em certos lugares como na view, por exemplo, conde eu uso o cgridview:
$this->widget('zii.widgets.grid.CGridView', array(
'id'=>'projeto-grid',
'dataProvider'=>$dataProvider,
'filter'=>$model,
'columns'=>array(
array(
'class'=>'CLinkColumn',
'header'=>'nameLink',
'labelExpression'=>'$data->nome',
'urlExpression'=>'Yii::app()->controller->createUrl("view", array("id"=>$data->id))',
),
'cliente',
'status',
'data_inicio',
),
)
);
que fica no meu index.php dentro da view.
Alguém pode me ajudar?
Isso acontece pq o ‘loadModel’ só é chamado quando vc está obtendo um único registro dentro de um controller (nas actions ‘view’, ‘show’ e ‘update’)
Quando vc está em uma action ‘manage’, por exemplo, não é feito um ‘loadModel’.
Ao invés de fazer o que vc fez (colocar a customizacao no loadModel), coloque a personalização em um método ‘afterFind’ no model
Projeto model
public function afterFind(){
$dataInicio = $this->data_inicio;
$ar = explode('-', $dataInicio);
$this->data_inicio = $ar[2].'/'.$ar[1].'/'.$ar[0];
}
Tá usando MySQL? Dá uma olhada na extensão abaixo
http://www.yiiframework.com/extension/i18n-datetime-behavior/
$model->attributes é antigo. Tem desde a 1.0.x. Não tem na documentação quando fio inserido, mas acho que foi nas primeiras versões.
quanto a data em ptbr, nosso amigo Ricardo solucionou pra gente: http://www.yiiframework.com/extension/i18n-datetime-behavior/
Tem uma discussão antiga aqui falando sobre isso. Da uma olhada nela.
Se vc define a variável como ‘safe’, ela não é atribuída automaticamente quando vc faz
$model->attributes = $_POST['Projeto']
Quando é ‘safe’, vc precisa setar a variavel explicitamente
$model->data_inicio = $_POST['Projeto']['data_inicio'];
Isso acontece pq o ‘loadModel’ só é chamado quando vc está obtendo um único registro dentro de um controller (nas actions ‘view’, ‘show’ e ‘update’)
Quando vc está em uma action ‘manage’, por exemplo, não é feito um ‘loadModel’.
Ao invés de fazer o que vc fez (colocar a customizacao no loadModel), coloque a personalização em um método ‘afterFind’ no model
Projeto model
public function afterFind(){
$dataInicio = $this->data_inicio;
$ar = explode('-', $dataInicio);
$this->data_inicio = $ar[2].'/'.$ar[1].'/'.$ar[0];
}
Tá usando MySQL? Dá uma olhada na extensão abaixo
http://www.yiiframework.com/extension/i18n-datetime-behavior/
Muito obrigado por esclarecer minha dúvida matando essa charada!
Valeu!