[Solucionado] Duda Con Carousel

saludos comunidad,

Les cuento que tengo un problema, resulta que tengo un carousel que muestro según el perfil, mi problema, es que cada perfil, tiene un número diferente de imágenes, como mínimo tienen 2 imágenes, y como máximo tiene 10, por lo que quiero validar que si existe el archivo de imagen, lo muestre, de lo contrario, no lo muestre.

He intentado 2 formas, la primera, es con el widget (que sería lo ideal, debido a que son menos líneas de códigos)


<?php

  echo TbHtml::carousel(array(

    array('image' => Yii::app()->theme->baseUrl . "/img/" . $model->nombre . "/portada.jpg"),

    array('image' => Yii::app()->theme->baseUrl . "/img/" . $model->nombre . "/01.jpg"),

    array('image' => Yii::app()->theme->baseUrl . "/img/" . $model->nombre . "/02.jpg"),

    array('image' => Yii::app()->theme->baseUrl . "/img/" . $model->nombre . "/03.jpg"),

  ));

?>

El problema es que no puedo colocar un if dentro del ciclo (o al menos no logré saber como.

Si lo hago a código puro (por llamarlo de alguna forma, quedaría algo así)


<?php

  if (file_exists(Yii::app()->theme->baseUrl . "/img/" . $model->nombre . "/03.jpg")) {

    echo '<div class="item">

      <img src="<?php echo Yii::app()->theme->baseUrl . "/img/" . $model->nombre . "/03.jpg">

    </div>';

  }

?>

<?php

  if (file_exists(Yii::app()->theme->baseUrl . "/img/" . $model->nombre . "/04.jpg")) {

    echo '<div class="item">

      <img src="<?php echo Yii::app()->theme->baseUrl . "/img/" . $model->nombre . "/04.jpg">

    </div>';

  }

?>

El problema, es que no me muestra las imágenes, como si el archivo no existiera, en cambio si cambio file_exists por !file_exists (es decir, negar), me muestra las imagenes, de la siguiente forma.


<?php

  if (!file_exists(Yii::app()->theme->baseUrl . "/img/" . $model->nombre . "/03.jpg")) {

    echo '<div class="item">

      <img src="<?php echo Yii::app()->theme->baseUrl . "/img/" . $model->nombre . "/03.jpg">

    </div>';

  }

?>

En que me estaré equivocando?

Buenas.

En mi opiniñon te ocurre lo siguinte:

1- La función file_exists funciona correctamente, pero en efecto, no encuantra tu archivo. Si niegas a file_exists y cargas la imagen, sí la carga, pero por supuesto el código de la condición del if no es el mismo q el del src de la imagen.

Prueba lo siguiente:




file_exists("'" . Yii::app()->theme->baseUrl . "/img/" . $model->nombre . "/03.jpg'")



2- El carousel se carga con un array, entonces lo q tienes que hacer antes de lanzar el carousel es crear tu array.




  $arrayImagenes = null;


  // Haces las comprobaciones oportunas y vas rellenando el array.

  if(1==1)

     $arrayImagenes[] = array('image' => Yii::app()->theme->baseUrl . "/img/" . $model->nombre . "/portada.jpg");


  echo TbHtml::carousel(array(

    $arrayImagenes

  ));



Un saludo.

Saludos!

He intentado avanzar, y lo he logrado, pero estoy entrampado en algo, para validar, el problema que tenía es que con file_exists() no puedo validar una url, sino, un archivo. El problema es que si lo hago, puedo validar todo correcto, pero el carousel, no me admite la ruta, sino, la url. Lo que tengo hasta el momento es:


$aTmpImages[] = array('image' => YiiBase::getPathOfAlias('webroot') . "ruta/01.jpg");

$aTmpImages[] = array('image' => YiiBase::getPathOfAlias('webroot') . "ruta/02.jpg");

$aTmpImages[] = array('image' => YiiBase::getPathOfAlias('webroot') . "ruta/05.jpg");


$aImages = array();          

  foreach ($aTmpImages as $tmpImage) {

    if (file_exists($tmpImage['image'])) {

      $aImages[] = $tmpImage;

  }

}


unset($aTmpImages);

Hasta aquí todo perfecto. Es más, sólo existe la imagen 01 y 02, y si hago un print_r me muestra sólo las imágenes que existen, el problema viene cuando hago lo siguiente:


echo TbHtml::carousel($aImages);

ya que no me muestra imagen alguna :s

Buenas.

Prueba esto:




<?php echo TbHtml::carousel(array(

array('image' => Yii::app()->request->baseUrl.'rutaImagen1', 'label' => 'First Thumbnail label', 'caption' => 'image1'),

array('image' => Yii::app()->request->baseUrl.'rutaImagen2', 'label' => 'Second Thumbnail label', 'caption' => 'image2'),

)); ?>



Métele 2 imágenes a mano a ver si te las carga.

Un saludo.

Estimados,

Muchas gracias a todos, por fin lo he solucionado. Tengo claro que no es la forma más óptima, pero al menos, de momento está funcional. Lo que hice fue lo siguiente:




$aTmpImages[] = array('image' => "ruta/imagen01.jpg"); 

$aTmpImages[] = array('image' => "ruta/imagen02.jpg"); 

$aTmpImages[] =  array('image' => "ruta/imagen03.jpg");


$aImages = array();


$origen = "ruta/en/server";

$reemplazar = "ruta/en/url";


foreach ($aTmpImages as $tmpImage) {  

   if (file_exists($tmpImage['image'])) {    

      $aImages[] = str_replace($origen, $reemplazar, $tmpImage);  

   }

}


unset($aTmpImages);


echo TbHtml::carousel($aImages);  



Finalmente con un str_replace, fui reemplazando la rutal al server, por la url, y con esto me está funcionado

Saludos