kebrus Posted July 29, 2005 at 12:29 PM Report #2330 Posted July 29, 2005 at 12:29 PM Deve ter sido o último script que fiz, nem sequer foi pra mim, foi pra ajudar alguém noutro lado, acho o código simples, mas tenho a certeza que há gente ainda muito fresca em php (como eu) e por isso vou explicar tudo. Trata-se de criar uma galeria de imagens de thumbnails que ao clickar numa thumbnail ela abre a respectiva imagem, aqui não estou obviamente a usar nenhuma base de dados para guardar as informações das imagens, porque o interesse é saber fazer a galeria aleatória e por isso guardei as informações em arrays (que para os newbies são uma espécie conjunto de várias strings, e string é informação contida numa varivel, exemplo: $aminhastring = "bla bla bla"; em que neste caso $aminhastring é a variavel e bla bla bla é a string). o codigo: <?php $link = array("http://urldolink1", /* 2 */ "http://urldolink2", /* 3 */ "http://urldolink3", /* 4 */ "http://urldolink4", /* 5 */ "http://urldolink5"); $imagem = array("imagem1.png", /* 2 */ "imagem2.png", /* 3 */ "imagem3.png", /* 4 */ "imagem4.png", /* 5 */ "imagem5.png"); $disp = count($link); $numbers = range(0, ($disp - 1)); shuffle($numbers); $i = 0; $max = 3; foreach ($numbers as $num) { if ($i < $max){ echo '<a href="'.$link[$num].'"><img src="'.$imagem[$num].'"></a>'.($num+1).' '; } else { break; } $i++; } ?> A explicação: As primeiras duas variaveis $link e $imagem armazenam o url do link e o url da imagem respectivamente. $disp = count($link); counta quantos elementos existem na array $link e armazena o valor na variavel $disp. $numbers = range(0, ($disp - 1)); cria uma array de numeros através da função range(min, max); que neste caso começa em 0 zero e acaba em $disp - 1 ... quer isto dizer que se ele contar cinco elementos na array $link (que é o caso) ele vai criar uma array só com números que começa no 0 e acaba em 4 e armazena essa array na variável $numbers. O interesse de criar uma array que começa em 0 e acaba em 4 é porque vamos utilizar esses números para chamar as informações contidas nas primeiras duas arrays, e como os conteúdos das arrays começam por 0, tive de criar assim, ou seja se eu agora quisesse chamar o primeiro conteúdo da primeira array, fazia algo do genero: echo '$link[0]'; estão a ver o 0? É por isso que começa em 0 e acaba em 4. shuffle($numbers); vai baralhar aleatoriamente os elementos dentro da array, ou seja antes disto eles estão por esta ordem 1 - 2 - 3 - 4 - 5 e depois disto eles podem ficar, por exemplo, assim 2 - 5 - 1 - 3 - 4. Se não quiserem uma galeria de imagens aleatórias basta apagar este pedaço de código. $i = 0; e $max = 3; existem aqui como complemento ao script, isto porque imaginem que apesar de terem introduzido na array 10 imagens só querem que se mostre 8, então basta alterar o valor da variável $max para 8, $i deve permanecer 0. Agora vamos analisar o loop: foreach ($numbers as $num) { if ($i < $max){ echo '<a href="'.$link[$num].'"><img src="'.$imagem[$num].'"></a>'.($num+1).' '; } else { break; } $i++; } Vamos lê-lo: para cada (foreach) valor na varivel $numbers se torna noutra que é a $num ($numbers as $num) acontece tal... Se o valor de $i for menor que o valor de $max (if ($i < $max)) então dispor no browser (echo) isto: <a href="'.$link[$num].'"><img src="'.$imagem[$num].'"></a>'.($num+1).' '. Caso contrário, se o $i não for menor que $max (else) sair do loop (break;). No final de cada loop aumentar um valor ao $i ($i++; ). Resumindo, o que o loop faz é pegar nos valores aleatórios da array numbers e chamar as outras duas arrays consoante os valores da array numbers, ou seja, imaginado que ao fazer shuffle da array $numbers aqui ficava assim: 2 - 5 - 1 - 3 - 4 então ele iria substituir $num no echo pelo primeiro valor (neste exemplo 2), fazer loop e subtituir pelo segundo (neste caso 5) e finalmente fazer loop outra vez e subtituir por 1, o loop acabava aqui porque pus o limite de 3 ($max = 3; ) pois no quarto loop o $i já estava com o valor 3 e ao fazer a comparação se $i é menor que $max ia obviamente constatar que é falso e correr o else, saindo do loop. Neste exemplo o echo cria um link de uma imagem (thumbnail) para o url dessa imagem e logo a seguir cria o respectivo numero do array ao lado ('.($num+1).') seguido de um espaço em branco ( ), não é obrigatorio ter o numero ao lado, só adicionei isso para verificar que o o script está a funcionar sem ter estar a adicionar links e imagens reais aos arrays.
thranduil Posted July 30, 2005 at 12:13 AM Report #2342 Posted July 30, 2005 at 12:13 AM hehe 😉 gostei. isto pode-se aplicar, por exemplo, num site de venda de uma especie de produtos quaiquer como "porduto do momento" ou num site de publicidade uma area do genero "empresas de x" ou num site pessoal como "funny moment"... gostei mesmo. vi uma vez um script do genero mas era para se tivesses varias banners, mudares atraves de um php script aleatoriamente, tambem. mas mesmo assim esta bom. parabens 🙂 ps: so agora realmente me apercebi que php tem MUITO a ver com c. ja tinha ouvido falar muito disso mas agora que me sinto um pouquinho mais ligado ao c vejo que realmente tem razao 😄
deathseeker25 Posted July 30, 2005 at 12:23 AM Report #2346 Posted July 30, 2005 at 12:23 AM hehe 😉 gostei. isto pode-se aplicar, por exemplo, num site de venda de uma especie de produtos quaiquer como "porduto do momento" ou num site de publicidade uma area do genero "empresas de x" ou num site pessoal como "funny moment"... gostei mesmo. vi uma vez um script do genero mas era para se tivesses varias banners, mudares atraves de um php script aleatoriamente, tambem. mas mesmo assim esta bom. parabens 🙂 ps: so agora realmente me apercebi que php tem MUITO a ver com c. ja tinha ouvido falar muito disso mas agora que me sinto um pouquinho mais ligado ao c vejo que realmente tem razao 😄 Ya quem sabe C deve aprender PHP, porque realmente são linguagens que tem a lógica muito parecida. Gostei bastante do script. Para um tipo como eu que tem trabalhado na aprendizagem do C e já vou algo avançado no C básico, ao ver no PHP conteúdos lógicos que já sei no C consigo ler o código com muito mais facilidade. Cumps e vai continuando a dar mais umas aulinhas de PHP ao pessoal. 🙂
kebrus Posted July 31, 2005 at 02:59 AM Author Report #2429 Posted July 31, 2005 at 02:59 AM Thanks, por acaso nunca experimentei aprender C, mas tambem como vou começar este ano a aprender. Se for tão fácil como PHP então acho que me vou safar bem, não conheço C mas penso que uma das principais diferenças entre C e PHP é que no PHP são criadas várias funções já embutidas no código para facilitar a criação de um script para a net, e como PHP é uma linguagem em constante evolução, novas e novas funções vão aparecendo. fiquem bem 😛
deathseeker25 Posted July 31, 2005 at 10:41 AM Report #2437 Posted July 31, 2005 at 10:41 AM Thanks, por acaso nunca experimentei aprender C, mas tambem como vou começar este ano a aprender. Se for tão fácil como PHP então acho que me vou safar bem, não conheço C mas penso que uma das principais diferenças entre C e PHP é que no PHP são criadas várias funções já embutidas no código para facilitar a criação de um script para a net, e como PHP é uma linguagem em constante evolução, novas e novas funções vão aparecendo.fiquem bem 😛 Bem com o C vais ter mais algum trabalho que não tiveste com o PHP disso tenho a certeza. No entanto, não é difícil desde que estudes com vontade. É claro que algumas coisas não vais perceber à primeira, nem à segunda e vais ter de ler uma terceira, quarta ou quinta vez para perceberes direitinho o que lá está. Depois de saberes o C básico ("Linguagem C" de Luís Damas) o C avançado já será mais fácil para ti. Cumps
MaXiMuS Posted July 31, 2005 at 11:23 AM Report #2444 Posted July 31, 2005 at 11:23 AM Gostei kebrus. Continua 😛
skin Posted August 7, 2006 at 07:46 PM Report #42907 Posted August 7, 2006 at 07:46 PM Está muito boa mesmo. Gostei 😛 . Our lives begin to end the day we become silent about things that matter - Martin Luther King
karva Posted August 7, 2006 at 07:48 PM Report #42910 Posted August 7, 2006 at 07:48 PM Nada mau mesmo, parabéns! Proud LEIC-A@IST student!
Saco Posted August 7, 2006 at 10:18 PM Report #42940 Posted August 7, 2006 at 10:18 PM Muito bom, mas podias usar o GeSHi para a malta conseguir ler melhor 😛
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now