No se en que influyen las rule, pero aqui estan:
public function rules() {
return array(
array('intTipoB, intMostrar, intCondicion', 'numerical', 'integerOnly'=>true),
array('sCodigoCli', 'length', 'max'=>20),
array('sNombreCliente', 'length', 'max'=>200),
array('sTipoImagen, intControl', 'length', 'max'=><img src='http://www.yiiframework.com/forum/public/style_emoticons/default/cool.gif' class='bbc_emoticon' alt='8)' />,
array('intEstaPres, intEstaClick', 'length', 'max'=>13),
array('sDirImagen, sDirDestino, sCondicion, fFechaInicio, fFechaFin', 'safe'),
array('sCodigoCli, sNombreCliente, sDirImagen, sTipoImagen, sDirDestino, intTipoB, intMostrar, intCondicion, sCondicion, fFechaInicio, fFechaFin, intEstaPres, intEstaClick, intControl', 'default', 'setOnEmpty' => true, 'value' => null),
array('id_controlBanner, sCodigoCli, sNombreCliente, sDirImagen, sTipoImagen, sDirDestino, intTipoB, intMostrar, intCondicion, sCondicion, fFechaInicio, fFechaFin, intEstaPres, intEstaClick, intControl', 'safe', 'on'=>'search'),
);
}
Respecto al actionUpdate, no juega ya que estoy invocando una funcion, desde una vista.
Esta es la llamada en Frontend/views/layouts/grid_bs.php
<?php echo CbControlbanner::cargaBanner(2);?>
Este el el codigo en CbControlbanner
public static function cargaBanner($tipoBanner=0){
$criteria=new CDbCriteria();
if ($tipoBanner>0){
$criteria->addCondition('intTipoB='.$tipoBanner);
}
fb($tipoBanner);
$criteria->addCondition('IFNULL(fFechaInicio,0)<CURDATE()');
$criteria->addCondition('IFNULL(fFechaFin,CURDATE()+1)>CURDATE() ');
$criteria->order='intEstaPres ASC';
$criteria->limit=1;
$banner= CbControlbanner::model()->find($criteria);
// var_dump($banner->attributes);
// $banner->intEstaPres=$banner->intEstaPres+1;
// fb('id-'.$banner->id_controlBanner.'conta-'.$banner->intEstaPres);
// $banner->save();
// exit;
if ($banner!=null){
CbControlbanner::cuentaPresentacion($banner->id_controlBanner);
if ($banner->sTipoImagen==NULL)
$bann=montaEnlace(montaImagen($banner->sDirImagen),enlaceBanner($banner->id_controlBanner,""));
else {
fb($banner->sTipoImagen);
switch ($banner->sTipoImagen){
case 'iframe':
$bann=$banner->sDirImagen;
break;
default:
$bann=montaEnlace(montaImagen($banner->sDirImagen),enlaceBanner($banner->id_controlBanner,""));
}
}
fb($bann);
}
else
$bann="";
return $bann;
}
public static function cuentaPresentacion($id){
fb('cientaP-'.$id);
incrementaRegistro('cb_controlbanner','intEstaPres','id_controlBanner='.$id);
}
public static function cuentaClick($id){
incrementaRegistro(CbControlbanner::tablename(),'intEstaClick','id_controlBanner='.$id);
}
Y funciona todo, pero en la base de datos, me queda el campo intEstaPres con el mismo valor, para todos los registros que hubieran cumplido el criterio inicial.
Por ultimo, en funciones tengo:
function incrementaRegistro($tablename,$campo,$condicion){
if ($tablename!="" && $campo!="" && $condicion!=""){
if (is_numeric($condicion)){
$condicion='id='.$condicion;
}
$sql='UPDATE '.$tablename.' SET '.$campo.'=IFNULL('.$campo.',0)+1 WHERE '.$condicion;
fb($sql);
Yii::app()->db->createCommand($sql)->query();
return;
}
else
fb('Error: falta algo. Tabla='.$tablename." campo=".$campo." id=".$id);
}
y la orden que se genera, es
'UPDATE cb_controlbanner SET intEstaPres=IFNULL(intEstaPres,0)+1 WHERE id_controlBanner=6'
Yo ya no se que mas hacer
Nota: fb() es una funcion que me manda mensajes a la consola de firefox