Salve mi ritrovo a non riuscire a risolvere un problema con la generazione dei risultati in una vista.
Ho una funzione nel model Post che cerca tutti i post presenti e per ogni post esegue una ricerca dentro al Model Userphoto prelevando tutte le foto che riguardano ogni post tramite l’ id del post (postid).
Però per ogni ciclo foreach su ogni post al posto di mostrare le sole foto riguardanti quel post, mi mostra le foto del post cercato più quelle del post ad esso precedente.
Questo è il codice che ho nel Model:
public static function UserAllPosts()
{
$baseUrl = Yii::getPathOfAlias('webroot');
$goodUrl = $baseUrl.'/images/opinion/good.png';
$nogoodUrl = $baseUrl.'/images/opinion/no-good.png';
$risataUrl = $baseUrl.'/images/opinion/risata.png';
$tristezzaUrl = $baseUrl.'/images/opinion/tristezza.png';
$arrabbiatoUrl = $baseUrl.'/images/opinion/arrabbiato.png';
$loveUrl = $baseUrl.'/images/opinion/love.png';
$userid = Yii::app()->user->id;
$criteria = new CDbCriteria();
$criteria->compare('approve',1);
$criteria->order = 'id DESC';
$posts= Post::model()->findAll($criteria);
foreach($posts as $post)
{
$start = date_create($post->date.' '.$post->time);
$end = date_create();
$diff = date_diff( $start, $end );
if($diff->d == 0 && $diff->h < 1)
{
$timeI = $diff->i.' min fà';
}
if($diff->d == 0 && $diff->h >= 1)
{
$timeI = $diff->h.' ore fà';
}
if($diff->d >= 1)
{
$timeI = $post->date.' alle ore '.$post->time;
}
$tempo = $timeI;
if($post->message == NULL)
{
$notifica = $post->notify;
}
if($post->message != NULL)
{
$notifica = $post->message;
}
$good = new CDbCriteria();
$good->compare('postid',$post->id);
$good->compare('iconid',1);
$goodOpinion = Opinionpost::model()->findAll($good);
$countgood = count($goodOpinion);
$nogood = new CDbCriteria();
$nogood->compare('postid',$post->id);
$nogood->compare('iconid',2);
$nogoodOpinion = Opinionpost::model()->findAll($nogood);
$countnogood = count($nogoodOpinion);
$risata = new CDbCriteria();
$risata->compare('postid',$post->id);
$risata->compare('iconid',3);
$risataOpinion = Opinionpost::model()->findAll($risata);
$countrisata = count($risataOpinion);
$love = new CDbCriteria();
$love->compare('postid',$post->id);
$love->compare('iconid',4);
$loveOpinion = Opinionpost::model()->findAll($love);
$countlove = count($loveOpinion);
$tristezza = new CDbCriteria();
$tristezza->compare('postid',$post->id);
$tristezza->compare('iconid',5);
$tristezzaOpinion = Opinionpost::model()->findAll($tristezza);
$counttristezza = count($tristezzaOpinion);
$arrabbiato = new CDbCriteria();
$arrabbiato->compare('postid',$post->id);
$arrabbiato->compare('iconid',6);
$arrabbiatoOpinion = Opinionpost::model()->findAll($arrabbiato);
$countarrabbiato = count($arrabbiatoOpinion);
$cr = new CDbCriteria();
$cr->compare('ownerid',$userid);
$photos = Profilephoto::model()->findAll($cr);
foreach($photos as $photo)
{
$Immagine = Yii::app()->request->baseUrl.$photo->cartella.$photo->images;
$imgShow = CHtml::image($Immagine,'',array('id'=>$photo->id,'data-toggle'=>'modal','data-target'=>'#myModal'));
}
$crt = new CDbCriteria();
$crt->compare('postid',$post->id);
$ShowPhotos = Userphoto::model()->findAll($crt);
foreach($ShowPhotos as $ShowPhoto)
{
$Show = Yii::app()->request->baseUrl.$ShowPhoto->cartella.$ShowPhoto->images;
$arr[] = CHtml::image($Show,'',array('id'=>$ShowPhoto->id, 'postid'=>$post->id,
'countgood'=>$countgood, 'countnogood'=>$countnogood, 'countrisata'=>$countrisata,
'countlove'=>$counlove, 'counttristezza'=>$counttristezza,'countarrabbiato'=>$countarrabbiato,
'data-toggle'=>'modal','data-target'=>'#myModal','style'=>'width:22.5%; padding:1%;'));
$imgShowPost = implode('',$arr);
}
echo '<div class="span8 border" style="border-top:2px solid #00C1C2; margin-left:20%; margin-bottom:3%;">
<div id="container-header" style="background: #00C1C2; width:100%; padding-bottom:10px;">
<div class="profile-userpic" style="width:14%; display:inline-block; vertical-align:middle; margin-top:1%;">'.$imgShow.'</div>
<div style="width:81%;font-size:0.9em; vertical-align:middle; display:inline-block; margin-top:1%;">'.$post->notify.'<br /> '.$tempo.'</div>
</div>
<div id="container-post" style="width:100%; margin-left:1%; margin-top:2%;">
<div id="'.$post->id.'">'.$post->message.'</div>
<div style="display:inline-block; margin-top:2%;">'.$imgShowPost.'</div>
</div>
<div class="span6" style="background:#c0ffff; text-align:center; width:100%; margin-left:0px;">
<div class="good" id="'.$post->id.'" title="Mi piace", userid="'.$userid.'"postid="'.$post->id.'" iconid="1" link="'.$goodUrl.'" style="display:inline-block;">
<span>'.$countgood.'</span>
</div>
<div class="nogood" id="'.$post->id.'" title="Non mi piace", userid="'.$userid.'" postid="'.$post->id.'" iconid="2" link="'.$nogoodUrl.'" style="display:inline-block;">
<span>'.$countnogood.'</span>
</div>
<div class="risata" id="'.$post->id.'" title="Che ridere", userid="'.$userid.'" postid="'.$post->id.'" iconid="3" link="'.$risataUrl.'" style="display:inline-block;">
<span>'.$countrisata.'</span>
</div>
<div class="love" id="'.$post->id.'" title="Love", userid="'.$userid.'" postid="'.$post->id.'" iconid="4" link="'.$loveUrl.'" style="display:inline-block;">
<span>'.$countlove.'</span>
</div>
<div class="tristezza" id="'.$post->id.'" title="Mi dispiace", userid="'.$userid.'" postid="'.$post->id.'" iconid="5" link="'.$tristezzaUrl.'" style="display:inline-block;">
<span>'.$counttristezza.'</span>
</div>
<div class="arrabbiato" id="'.$post->id.'" title="Sono arrabbiato", userid="'.$userid.'" postid="'.$post->id.'" iconid="6" link="'.$arrabbiatoUrl.'" style="display:inline-block;">
<span>'.$countarrabbiato.'</span>
</div>
</div>
</div>';
}
}
Nella vista richiamo solo la funzione in maniera tale che mi generi i div per ogni post trovato tramite la funzione:
<?php echo Post::UserAllPosts();?>
Il controller invece richiama solo la vista e il suo layout nella action:
public function actionIndex()
{
$this->layout="//layouts/main";
$this->render('allposts');
}
Qualcuno può aiutarmi a risolvere questo problema, e a far si che per ogni singolo post trovato vengano mostrate solo le foto di quel post? Grazie in anticipo.