Jump to content


Photo

Slideshow - Buscando Dados Do Mysql


  • Faça o login para participar
3 replies to this topic

#1 Scream_Right

Scream_Right

    Turista

  • Usuários
  • 40 posts
  • Sexo:Não informado
  • Localidade:Campo Novo do Parecis
  • Interesses:Dreamweaver<br />Fireworks<br />Html<br />Asp, <br />Photoshop

Posted 01/06/2009, 18:08

Boa Tarde!

Peguei um sistema de SlideShow do Dirceu Bimont Ivo - http://my.opera.com/bimonti/ muito bacana, já o utilizo a um bom tempo, porém sempre fazia manualmente as alterações de fotos do slide.
No Site do Dirceu ele disponibilizou uma versão com banco de dados, porém nao estou conseguindo adaptá-la para pegar os dados da tabela da Galeria Brasil 3.

A idéia é que quando eu crio uma nova galeria, o slide mostra as últimas 4.

Bom, vou postar os códigos pra vcs verem o funcionamento:

index.html(Detalhe: eu simplifiquei um pouco o slide, nao exibindo botoes de avançar, etc.)
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Manual - SlideShow BD</title>

&lt;script type="text/javascript">
	function settings(){
		var el = document.getElementById('settings');
		(el.style.display == 'none') ? el.style.display = 'block' : el.style.display = 'none';
	}
</script>
&lt;script src="slide.php" type="text/javascript"></script>


<link href="slide.css" rel="stylesheet" media="screen" type="text/css" />
</head>

<body onload="slide.start()">
<div id="manual">
	<h3><img src="imgs/book.gif" alt="Manual" /> Manual - SlideShow BD</h3>

	 <!--Slide Start-->
			<div id="pic">
				<a href="" id="linkSlide">
				<img id="slideImg" class="img" />
				<div id="titleSlide"></div>
				</a>
				<div id="textSlide"></div>
			</div>
	 <!--Slide End-->   
</div>
</body>
</html>

slide.php(Original)
<?php

/*
$BD:Slide - version 0.9.4$
$LastModified: 04/02/2006$

Sistema Free para uso pessoal ou comercial contanto que os
créditos permaneçam intactos. Eu já nem estou colocando um
monte de coisa pra não deixar o código pesado. ^^

Maiores Informações:
http://my.opera.com/bimonti/
*/
echo"
slide = {

	// vetor com os slides
	_imagens : [
							
";								/*
								Estrutura da Tabela de Modelo
								+----+------+--------+-----------+------+
								| ID | Path | Título | Descrição | Link |
								+----+------+--------+-----------+------+
								|	|	  |		|		   |	  |
								|	|	  |		|		   |	  |
								+----+------+--------+-----------+------+
								*/
								$query 	= 'SELECT * FROM slide';
								$link 	= mysql_connect('localhost', 'root', '')
													or die('Não foi possível conectar: ' . mysql_error());
												
													mysql_select_db('test')
													or die('Não foi possível selecionar o banco da dados');
								
								$result = mysql_query($query)
													or die('A consulta falhou!: ' . mysql_error());
								$x=0;
								while ($l = mysql_fetch_array($result, MYSQL_ASSOC)) {

									if($x!=0){
										echo ",";
									}
									echo '["'.$l['path'].'","'.$l['title'].'","'.$l['text'].'","'.$l['link'].'"]';
									++$x;
								}
	echo" ],
	// ID dos elementos que o sistema modifica
	// ID da imagem do slide
	_slideImg : 'slideImg',
	// ID do link do slide, ou seja, um elemento A
	_linkSlide : 'linkSlide',
	// ID do título do slide, uma div ou span por exemplo
	_titleSlide: 'titleSlide',
	// ID do título do slide, idêntico ao de cima
	_textSlide : 'textSlide',
	// ID da imagem de play|pause
	_playPause : 'playpause',
	// ID da div que mostra ou esconde as opções de customização de tempo
	// essa opção pode ser omitida do usuário, basta retirar o botão
	// settings da página, e como a div já vem com o display:none por
	// padrão o usuário não terá acesso a essas opções.
	_showTimer : 'showTimer',
	

	// variáveis do sistema
	// Daqui para baixo não é necessário alterar mais nada, aqui o sistema
	// cuidará de tudo
	_count : 0,
	_length : null,
	_timeOutID : null,
	_pause : false,
	_timer : 4,
	
	// função que inicia o slide e seta todas os parâmetros necessários
	start : function(){
		with(this){
			_preLoader();
			_length = _imagens.length;
			_work(); 
		}
	},
	
	// faz o pré-carregamento das imagens
	_preLoader : function(){
		for(x in this._imagens){
			var image = new Image();
			image.src = this._imagens[x][0];
		}
	},
	
	// função principal que faz as checagens necessárias
	_work : function(){
		with(this){
			(_count == _length) ? _count = 0 : (_count < 0) ? _count = _length-1 : void(0);
			var current = _imagens[_count];
			_exchange(current);
			if(!_pause){
				(typeof(_timeOutID) == 'number') ? clearTimeout(_timeOutID) : void(0);
				_timeOutID = setTimeout(
						function(){
							slide.next();
							fade(0,0,$(_slideImg));
						}, (Number(_timer)*1000)
				);
			}
		}
	},
	
	// função que altera os elementos da página, altere os IDs se necessário
	_exchange : function(img){
		this.$(this._slideImg).src = img[0];
		this.$(this._titleSlide).innerHTML = img[1];
		this.$(this._textSlide).innerHTML = img[2];
		this.$(this._linkSlide).href = img[3];
		this.fade(0,100,this.$(this._slideImg));
	},
	
	// altera para o próximo slide ao clicar no botão Próximo
	next : function(){
		with(this){
			_count++;
			_work();
		}
	},
	
	// altera para o slide anterior ao clicar no botão correspondente
	previous : function(){
		with(this){
			_count--;
			_work();
		}
	},
	
	// pausa e continua a apresentação
	pause : function(){
		var img = this.$(this._playPause);
		if(this._pause){
			this._pause = false;
					img.src = 'imgs/pause.gif';
				img.title = 'Parar';
		}
		else{
			this._pause = true;
					img.src = 'imgs/play.gif';
				img.title = 'Continuar';
		}
		with(this){(typeof(_timeOutID) == 'number') ? clearTimeout(_timeOutID) : void(0); _work();}
	},
	
	// controla o tempo de troca de cada slide
	tControl : function(act){
		with(this){
		(act=='m')?((_timer==4)?void(0):_timer=_timer-1):((_timer==9)?void(0):_timer= _timer +1);
			this.$(this._showTimer).innerHTML = _timer+'s';	
		}
		
	},
	
	// altera a opacidade do elemento e suaviza a transição entre os slides
	fade : function (){
		
		var type,signal;
		var from 	= arguments[0];
		var to		= arguments[1];
		var el		= arguments[2];
		
		(document.all) ? type = 'filter' : type = 'opacity';
		(from>to) ? signal = '-' : signal= '+';
		
		if(from >= to/2){
			from = eval(from+signal+10);
		}else{
			from = eval(from+signal+5);
		}
		
		if(type=='opacity'){
			try{el.style[type] = Number(from*0.01); }catch(e){}
		}else{
			try{el.style[type] = 'alpha(opacity='+from+')'; }catch(e){}
		}
		
		if(from != to){
			setTimeout( function(){ slide.fade(from,to,slide.$(slide._slideImg)); } ,50);
		}
	},
	
	// retorna o elemento solicitado através de seu ID
	$ : function(){
		return document.getElementById(arguments[0]);	
	}
}
";?>

Este cógido abaixo é o que eu uso em meu site para simplesmente exibir os 4 ultimos galerias cadastradas, e estou utilizando como base para mudar o slide.php:(não levem em consideração a tabela.)
<?php
include("security/conexao.php");

$query = mysql_query("SELECT * FROM galerias LEFT OUTER JOIN imagens ON img_codigo = gal_codigo_img ORDER BY gal_data DESC LIMIT 4"); 

// Agora exiba o código com a configuraçao de sua tabela - o cabeçalho dela.
?>
<p>
<table cellpadding="0" cellspacing="0">

<?php
// Agora vamos montar o código. Pegue o valor total de resultados: 
$total = mysql_num_rows($query); 
// Defina o número de colunas que voce deseja exibir: 
$colunas = "1"; 
// Agora vamos ao "truque": 
if ($total > 0) { 
	for ($i = 0; $i < $total; $i++) { 
		if (($i % $colunas) == 0) { 
?>

	<tr> 
	<td height="20" colspan="4"> 
		</td>
	</tr>
	<tr> 

<?php
		}
		
		$dados= mysql_fetch_assoc($query);
		
		$dados['gal_data'] = date('d/m/Y', strtotime($dados['gal_data']));
		
		$sql = "SELECT * FROM imagens WHERE img_codigo_gal = ". $dados['gal_codigo'] ." ORDER BY RAND()";
		$img_query = mysql_query($sql);
		
		$cont = mysql_num_rows($img_query);
		
		if (!$dados['img_nome_arquivo'] && $cont > 0) {
			$img = mysql_fetch_assoc($img_query);
			$dados['img_nome_arquivo'] = $img['img_nome_arquivo'];
		}
?>
		<td style="width:100px">
		<?php
		if ($dados['img_nome_arquivo'] != "") {
		?>
			<a href="#ultimas_fotos" onclick="window.open('security/galeria/galeria.php?gal=<?= $dados['gal_codigo']; ?>', 'galeria', 'width=770,height=630,resizable=0,scrollbars=1');">
			<img style="margin:0 10px 0 3px; border:1px solid #999;" src="security/galeria/imagem.php?gal=<?= $dados['gal_pasta']; ?>&img=<?= $dados['img_nome_arquivo']?>&thumb=1" border="1" align="left">
			</a> 
		<?php
		}
		?>
		</td>
		<td style="width:200px;">
			<span style="text-transform: uppercase;">
			<a href="#ultimas_fotos" onclick="window.open('security/galeria/galeria.php?gal=<?= $dados['gal_codigo']; ?>', 'galeria', 'width=770,height=630,resizable=0,scrollbars=1');" style="color:#F1AF25; font-style:italic; font-weight:bold;"><?= $dados['gal_titulo']?></a>
			</span>
			<p style="font-size:11px; text-align:left;">
			Data: <strong><?= $dados['gal_data'];?></strong>
			<br />
			Local: <strong><?= $dados['gal_local']?></strong>
			<br />
			<strong><? echo $cont;?></strong> Fotos.
			</p>
		</td>
		<td width="15"></td>
	<?php
	}
}
	?>
	</tr>
</table>


Bom, eu fui alterando e tals, e cheguei nisso aqui abaixo, que até funcionou, apareceram o titulo da galeria, o local da festa, mas a foto nao exibiu e nem os links apontam para o lugar correto, nao achei onde arrumar isso.

<?php
	include("../security/conexao.php");

	$query = mysql_query("SELECT * FROM galerias LEFT OUTER JOIN imagens ON img_codigo = gal_codigo_img ORDER BY gal_data DESC LIMIT 4"); 
?>

<?php
	$dados= mysql_fetch_assoc($query);
		
	$dados['gal_data'] = date('d/m/Y', strtotime($dados['gal_data']));
		
	$sql = "SELECT * FROM imagens WHERE img_codigo_gal = ". $dados['gal_codigo'] ." ORDER BY RAND()";
	$img_query = mysql_query($sql);
		
	$cont = mysql_num_rows($img_query);
		
	if (!$dados['img_nome_arquivo'] && $cont > 0) {
		$img = mysql_fetch_assoc($img_query);
		$dados['img_nome_arquivo'] = $img['img_nome_arquivo'];
	}
?>

	   
<?php
	echo"
		slide = {
			// vetor com os slides
			_imagens : [
		";											
		while ($l = mysql_fetch_array($query)) {
	
		if($x!=0){
			echo ",";
			}
			echo '["'.$l['img_nome_arquivo'].'","'.$l['gal_titulo'].'","'.$l['gal_local'].'","'.$l['gal_codigo_img'].'"]';
			++$x;
	}
								
	echo" ],
	// ID dos elementos que o sistema modifica
	// ID da imagem do slide
	_slideImg : 'slideImg',
	// ID do link do slide, ou seja, um elemento A
	_linkSlide : 'linkSlide',
	// ID do título do slide, uma div ou span por exemplo
	_titleSlide: 'titleSlide',
	// ID do título do slide, idêntico ao de cima
	_textSlide : 'textSlide',
	// ID da imagem de play|pause
	_playPause : 'playpause',
	// ID da div que mostra ou esconde as opções de customização de tempo
	// essa opção pode ser omitida do usuário, basta retirar o botão
	// settings da página, e como a div já vem com o display:none por
	// padrão o usuário não terá acesso a essas opções.
	_showTimer : 'showTimer',
	

	// variáveis do sistema
	// Daqui para baixo não é necessário alterar mais nada, aqui o sistema
	// cuidará de tudo
	_count : 0,
	_length : null,
	_timeOutID : null,
	_pause : false,
	_timer : 4,
	
	// função que inicia o slide e seta todas os parâmetros necessários
	start : function(){
		with(this){
			_preLoader();
			_length = _imagens.length;
			_work(); 
		}
	},
	
	// faz o pré-carregamento das imagens
	_preLoader : function(){
		for(x in this._imagens){
			var image = new Image();
			image.src = this._imagens[x][0];
		}
	},
	
	// função principal que faz as checagens necessárias
	_work : function(){
		with(this){
			(_count == _length) ? _count = 0 : (_count < 0) ? _count = _length-1 : void(0);
			var current = _imagens[_count];
			_exchange(current);
			if(!_pause){
				(typeof(_timeOutID) == 'number') ? clearTimeout(_timeOutID) : void(0);
				_timeOutID = setTimeout(
						function(){
							slide.next();
							fade(0,0,$(_slideImg));
						}, (Number(_timer)*1000)
				);
			}
		}
	},
	
	// função que altera os elementos da página, altere os IDs se necessário
	_exchange : function(img){
		this.$(this._slideImg).src = img[0];
		this.$(this._titleSlide).innerHTML = img[1];
		this.$(this._textSlide).innerHTML = img[2];
		this.$(this._linkSlide).href = img[3];
		this.fade(0,100,this.$(this._slideImg));
	},
	
	// altera para o próximo slide ao clicar no botão Próximo
	next : function(){
		with(this){
			_count++;
			_work();
		}
	},
	
	// altera para o slide anterior ao clicar no botão correspondente
	previous : function(){
		with(this){
			_count--;
			_work();
		}
	},
	
	// pausa e continua a apresentação
	pause : function(){
		var img = this.$(this._playPause);
		if(this._pause){
			this._pause = false;
					img.src = 'imgs/pause.gif';
				img.title = 'Parar';
		}
		else{
			this._pause = true;
					img.src = 'imgs/play.gif';
				img.title = 'Continuar';
		}
		with(this){(typeof(_timeOutID) == 'number') ? clearTimeout(_timeOutID) : void(0); _work();}
	},
	
	// controla o tempo de troca de cada slide
	tControl : function(act){
		with(this){
		(act=='m')?((_timer==4)?void(0):_timer=_timer-1):((_timer==9)?void(0):_timer= _timer +1);
			this.$(this._showTimer).innerHTML = _timer+'s';	
		}
		
	},
	
	// altera a opacidade do elemento e suaviza a transição entre os slides
	fade : function (){
		
		var type,signal;
		var from 	= arguments[0];
		var to		= arguments[1];
		var el		= arguments[2];
		
		(document.all) ? type = 'filter' : type = 'opacity';
		(from>to) ? signal = '-' : signal= '+';
		
		if(from >= to/2){
			from = eval(from+signal+10);
		}else{
			from = eval(from+signal+5);
		}
		
		if(type=='opacity'){
			try{el.style[type] = Number(from*0.01); }catch(e){}
		}else{
			try{el.style[type] = 'alpha(opacity='+from+')'; }catch(e){}
		}
		
		if(from != to){
			setTimeout( function(){ slide.fade(from,to,slide.$(slide._slideImg)); } ,50);
		}
	},
	
	// retorna o elemento solicitado através de seu ID
	$ : function(){
		return document.getElementById(arguments[0]);	
	}
}
";?>

Por gentileza, dêem-me uma ajuda ^^ Muito Obrigado!

#2 bimonti

bimonti

    Super Veterano

  • Usuários
  • 2654 posts
  • Sexo:Masculino

Posted 04/06/2009, 01:32

Você fez o debug do que está sendo impresso para o javascript ? Por exemplo, p array depois de impresso teria que ficar mais ou menos assim:

_imagens : [
			["imgs/slide/01.jpg","Campo","Estrada ao longo de imenso campo verde","1.htm"],
			["imgs/slide/02.jpg","Montanha","Montanha espelhada em lago gelado","2.htm"],
			["imgs/slide/03.jpg","Rio","Rio bravo em paraíso mata adentro","3.htm"],
			["imgs/slide/04.jpg","Praia","Praia de água límpida e areia fina","4.htm"]
		],

Faça o seguinte, depois de abrir a página onde vc adaptou, abra o código-fonte da página (o js) e veja o que foi impresso e poste aqui. Ou poste um link para o slide. Você tem que ter certeza que a informação impressa está correta, se os caminhos para as imagens estão corretas, etc.
WebFórum - Equipe de Desenvolvimento - Monitor
Posted Image
Yeah I do have some stories, and it's true I want all the glory ...

#3 Scream_Right

Scream_Right

    Turista

  • Usuários
  • 40 posts
  • Sexo:Não informado
  • Localidade:Campo Novo do Parecis
  • Interesses:Dreamweaver<br />Fireworks<br />Html<br />Asp, <br />Photoshop

Posted 04/06/2009, 14:56

Uhuuuuuuuuuuuuuuu Consegui!!!!!!!!!!!!!! :D

Kra, poucas palavras dizem muito né... eu relamente nao havia exibido a impressao da página para ver o q que aconteceu...

Só isso q vc me falou ja serviu pra corrigir...

Mudei no php de:
echo '["'.$l['img_nome_arquivo'].'","'.$l['gal_titulo'].'","'.$l['gal_local'].'","'.$l['gal_codigo_img'].'"]';

para:
echo '["../security/galeria/galerias/'.$l['gal_pasta'].'/'.$l['img_nome_arquivo'].'","'.$l['gal_titulo'].'","'.$l['gal_local'].'","'.$l['gal_codigo_img'].'"]';

Muito Obrigado Bimonti!

E agora vou ficar mais atento a verificar as impressoes da paginas q derem erro. -_-

Abraços!

Edição feita por: Scream_Right, 04/06/2009, 14:57.


#4 bimonti

bimonti

    Super Veterano

  • Usuários
  • 2654 posts
  • Sexo:Masculino

Posted 05/06/2009, 09:15

Normal ... acontece ... rsrsrs :click:

Abraços.
WebFórum - Equipe de Desenvolvimento - Monitor
Posted Image
Yeah I do have some stories, and it's true I want all the glory ...




1 user(s) are reading this topic

0 membro(s), 1 visitante(s) e 0 membros anônimo(s)

IPB Skin By Virteq