Os iniciantes em Web Design vêem-se muitas vezes com esta dúvida: como mostrar imagens de forma aleatória.
Existem muitas formas para resolver este problema, mas todos eles andam à volta da função rand(). Vou em seguida mostrar uma forma para resolver este problema de forma estruturada.
É comum que todos os sites tenham uma ou mais páginas de só com funções, ou seja, o único código que estas contem-em são funções em PHP. É num destes ficheiros, que colocaremos a nossa função “displayRandomImage()“. Se não tem nenhum deste tipo de ficheiros, crie-o e coloque a função no fim do ficheiro (antes da tag “?>”).
/** * Mostra uma imagem aleatória, em base num array passado por parâmetro. * Se a imagem seleccionada não existir, é mostrada a imagem padrão. * * A imagem pode conter uma hiperligação http. * * @author Miguel Borges * @param array $images Array que contém as imagens. * @param int $default Posição da imagem padrão. * @param bool $display Opcional. O defeito é true. Se imprime (true) ou retorna (false). * @return string Código (x)HTML de uma imagem ou void. * @throws Exception */ function displayRandomImage(array $images, $default = 0, $display = true) { $index = rand(0, count($images) - 1); if(is_array($images[$index])) : if(isset($images[$index][1]) and !empty($images[$index][1])) : $image = array($images[$index][0], $images[$index][1]); else : $image = array($images[$index][0]); endif; else : $image = array($images[$index]); endif; // testa se a imagem seleccionada existe/está disponível if(!imageExist($image[0])) : if(!is_numeric($default)) throw new Exception('Parameter $default must be a numeric type.'); // verifica se a imagem padrão é válida if($default < 0 or $default > count($images)) throw new Exception('Invalid default image.'); $image = (array) $images[$default]; // testa se a imagem por defeito existe/está disponível if(!imageExist($image[0])) throw new Exception('Default image don\'t exist.'); endif; if(isset($image[1])) : $htmlCode = '<a href="' . $image[1] .'"><img src="' . $image[0] . '" alt="" /></a>'; else : $htmlCode = '<img src="' . $image[0] . '" alt="" />'; endif; if(!$display) return $htmlCode; echo $htmlCode; return; } /** * Verifica se uma imagem está acessível. * * @author Miguel Borges * @param string $image Endereço da imagem. * @return bool True em caso de estar acessível, ou false caso contrário. */ function imageExist($image) { return @fopen($image,'r') === FALSE ? false : true; }
A função recebe um array que deve conter os endereços http das imagens que queremos mostrar, a posição da imagem padrão (para o caso de uma das outras não estar disponível, começando em 0 [opcional]) e um booleano (opcional), onde se informa, se o resultado da função é para imprimir o resultada da função na página, ou se é para o retornar. A função também pode lançar excepções, caso seja encontrado algum erro.
Na linha 15 é gerado um número aleatório entre 0 ao tamanho do array “$images”, que será a posição do array a ser mostrada.
Nas linha 17 a 25 é testado se a posição gerada anteriormente, se existe um array (pois é possível ter numa posição do array passado por parâmetro, outro array, em que na posição “0” se encontra o endereço da imagem, e na posição “1” o endereço da hiperligação da imagem). Isto é útil para mostrar publicidade num site, em que cada imagem, redirecciona para uma página diferente.
Nas linha 27 a 38 é testado se a imagem seleccionada está disponível, e se não estiver, utiliza a imagem padrão, fazendo as respectivas validações.
Nas linhas seguintes é construído o código HTML da imagem/hiperligação, e em seguida mostrada ou retornada (conforme o valor de “$display”).
A função “imageExist()” é uma função auxiliar da anterior, que verifica se uma imagem está disponível ou não;
Agora que já temos a nossa função feita, é necessário criar um array, com os endereços das imagem a mostrar. Também é de boas práticas haver sempre um ficheiro de configuração em todos os sites. Este ficheiro geralmente contém as credenciais de acesso à base de dados entre outras configurações. É neste ficheiro que iremos criar o nosso array (se não tem nenhum deste tipo de ficheiros, crie-o).
$images = array( 'http://www.omeusite.com/images/image1.jpg', 'http://www.omeusite.com/images/image2.jpg', 'http://www.omeusite.com/images/image3.jpg', array('http://www.omeusite.com/images/image4.jpg', 'http://www.omeusite.com/pagina1.html'), array('http://www.omeusite.com/images/image5.jpg', 'http://www.omeusite.com/pagina2.html'), array('http://www.omeusite.com/images/image6.jpg', 'http://www.omeusite.com/pagina3.html'), array('http://www.omeusite.com/images/image7.jpg', ''), array('http://www.omeusite.com/images/image8.jpg', ''), array('http://www.omeusite.com/images/image9.jpg'), array('http://www.omeusite.com/images/image10.jpg'), array('http://www.omeusite.com/images/image11.jpg'), );
As linhas 2, 3 e 4, conte-em os endereços das imagens as mostrar.
Da linha 8 a 12, também conte-em os endereços das imagens as mostrar, mas de uma maneira diferente.
As linhas 5, 6 e 7, para além dos endereços das imagens as mostrar, também defines os endereços para onde as imagem redireccionam.
Agora já temos o que é necessário, bastando fazer uma chamada à nossa função, na página onde for necessário, incluindo os ficheiros criados anteriormente.
<?php include "config.php"; ?> <?php include "includes/functions.php"; ?> <?php displayRandomImage($images); ?> <?php displayRandomImage($images, 0, true); ?> <?php echo displayRandomImage($images, 3, false); ?>
Espero que tenham entendido e gostado desse script!
Abraços