Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

xanburzum

ratings star

Recommended Posts

Fazendo um ratings estrela estilo sites como Amazon e YouTube.

 

Com uma estrutura de banco de dados do access, chamado rating.mdb, com as tabelas:

rating_urls, com os campos:

ID - Numeração Automática

URL - Texto

Created - Data/Hora

 

e a tabela , rating_votes, com os campos:

ID - Numeração Automática

URLID - Número

Rating - Número

UserIP - Texto

Created - Data/Hora

 

arquivo common.asp

<%
	'--- Usuário definível elementos
	dim sConnectionString
	Const STAR_WIDTH	= 30
	Const MSG_THANKS	= "Obrigado pelo seu voto!"
	Const MSG_RATING	= "Classificados <strong> [RATING] </ strong> / 5 Estrelas ([TOTALVOTES] votos expressos)"
	Const MSG_DENIED	= "Você já votoud!"
	Const MSG_NOVOTES	= "Sem votos"
	'sConnectionString	= "DSN=StarRatings"
	'sConnectionString	= "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Inetpub\db\rating.mdb;"
	sConnectionString	= "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Server.MapPath("/rating/rating.mdb") & ";"

	'--- Declarando
	dim oRatingConn, rsRating
	dim iURLID, iRatingAverage, iRatingWidth, iTotalRatings
	dim sRatingURL, sUserIP, sMessage
	dim bSuccess

	'--- Functions & Subroutines
	Sub RatingConnOpen
		Set oRatingConn = Server.Createobject("ADODB.Connection")
		oRatingConn.Open sConnectionString
	End Sub
	'---
	Sub RatingConnClose
		oRatingConn.Close
		Set oRatingConn = Nothing
	End Sub
	'---
	Function GetUserIP
		if Request.ServerVariables("HTTP_X_FORWARDED_FOR") <> "" then
			GetUserIP = Request.ServerVariables("HTTP_X_FORWARDED_FOR")
		else
			GetUserIP = Request.ServerVariables("REMOTE_ADDR")
		end if
	End Function
	'---
	Sub GetRating(sURL)
		RatingConnOpen
		Set rsRating = oRatingConn.Execute("select count(votes.Rating) as Total, avg(votes.Rating) as Average from rating_urls urls inner join rating_votes votes on votes.URLID = urls.ID where urls.URL='" & sURL & "'")
		iRatingAverage	= rsRating("Average")
		iTotalRatings		= rsRating("Total")
		if isnull(iRatingAverage) then
			iRatingAverage = 0 '--- Impede que a próxima linha a tentar um round com valor nulo
		else
			iRatingAverage = round(iRatingAverage,1)
		end if
		iRatingWidth		= round(iRatingAverage * STAR_WIDTH, 0)
		Set rsRating = Nothing
		RatingConnClose
	End Sub
	'---
	Sub UpdateRating(iRating, sURL)
		'--- abre a tabela url
		RatingConnOpen
		Set rsRating = Server.CreateObject("ADODB.Recordset")
		rsRating.LockType = 2 'adLockPessimistic
		rsRating.ActiveConnection = oRatingConn
		rsRating.Source = "select ID, URL from rating_urls where URL='" & sURL & "'"
		rsRating.Open
		'--- Adicionar URL, se for necessário
		if rsRating.EOF then
			rsRating.AddNew
			rsRating("URL") = sURL
			rsRating.Update
		end if
		'--- Obter URL ID
		iURLID = rsRating("ID")
		rsRating.Close
		Set rsRating = Nothing
		'--- Adicionar rating
		Set rsRating = oRatingConn.Execute("select URLID from rating_votes where URLID=" & iURLID & " and UserIP='" & GetUserIP & "'")
		if rsRating.EOF then
			oRatingConn.Execute("insert into rating_votes (URLID, Rating, UserIP) values (" & iURLID & ", " & iRating & ", '" & GetUserIP & "')")
			bSuccess = true
		else
			bSuccess = false
		end if
		Set rsRating = Nothing
		RatingConnClose
	End Sub
	'---
	Function ProperDate(dDate)
		dim sDaySuffix
		Select Case Day(dDate)
			Case 1, 21, 31
				sDaySuffix = "st"
			Case 2, 22
				sDaySuffix = "nd"
			Case 3, 23
				sDaySuffix = "rd"
			Case 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 24, 25, 26, 27, 28, 29, 30
				sDaySuffix = "th"
		End Select
		ProperDate = Day(dDate) & sDaySuffix & " " & Left(MonthName(Month(dDate)), 3) & " " & Year(dDate)
	End Function
	'---
	Function ProperTime(dDate)
		dim sTimeSuffix
		dim dHour
		dim dMinute
		dHour		= int(Hour(dDate))
		dMinute	= int(Minute(dDate))

		Select Case dHour
			Case 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11
				sTimeSuffix = "am"
			Case Else
				sTimeSuffix = "pm"
		End Select

		if dMinute < 10 then dMinute = "0" & dMinute
		ProperTime = dHour & ":" & dMinute & sTimeSuffix
	End Function
%>

rating.asp

<!--#include file="common.asp"-->
<%

	'--- variáveis server
	sUserIP				= Request.ServerVariables("REMOTE_ADDR")
	sRatingURL		= Request.ServerVariables("URL")

	'--- Adicionar um rating (não AJAX)
	if len(Request.QueryString("rating")) > 0 then
		UpdateRating int(Request.QueryString("rating")), sRatingURL
		'---  sucesso mensagem para URL
		sRatingURL = Request.ServerVariables("URL")
		if bSuccess then
			sRatingURL = sRatingURL & "?rated=true"
		else
			sRatingURL = sRatingURL & "?rated=false"
		end if
		'--- Redirect
		response.redirect sRatingURL
	end if

	'--- Receba atual classificação
	GetRating(sRatingURL)

	'--- Mostrar classificação debaixo Estrelas
	if iRatingAverage = 0 then
		sMessage = MSG_NOVOTES
	else
		sMessage = replace(MSG_RATING, "[RATING]", iRatingAverage)
		sMessage = replace(sMessage, "[TOTALVOTES]", iTotalRatings)
	end if

	'--- Mostrar resposta texto (sem AJAX)
	if Request.QueryString("rated") = "true" then sMessage	= sMessage & " <span class=""starlight"">" & MSG_THANKS & "</span>"
	if Request.QueryString("rated") = "false" then sMessage = sMessage & " <span class=""starlight"">" & MSG_DENIED & "</span>"
%>
<div id="star-rating">
	<ul>
	<li class="current-rating" style="width:<%=iRatingWidth%>px;">Currently <%=iRatingAverage%>/5 Stars.</li>
	<li><a href="<%=sRatingURL%>?rating=1#star-rating" onclick="loadurl('/rating/rpc.asp?rating=1&url=<%=sRatingURL%>'); return false;" title="Rate this 1 star out of 5" class="one-star">1</a></li>
	<li><a href="<%=sRatingURL%>?rating=2#star-rating" onclick="loadurl('/rating/rpc.asp?rating=2&url=<%=sRatingURL%>'); return false;" title="Rate this 2 stars out of 5" class="two-stars">2</a></li>
	<li><a href="<%=sRatingURL%>?rating=3#star-rating" onclick="loadurl('/rating/rpc.asp?rating=3&url=<%=sRatingURL%>'); return false;" title="Rate this 3 stars out of 5" class="three-stars">3</a></li>
	<li><a href="<%=sRatingURL%>?rating=4#star-rating" onclick="loadurl('/rating/rpc.asp?rating=4&url=<%=sRatingURL%>'); return false;" title="Rate this 4 stars out of 5" class="four-stars">4</a></li>
	<li><a href="<%=sRatingURL%>?rating=5#star-rating" onclick="loadurl('/rating/rpc.asp?rating=5&url=<%=sRatingURL%>'); return false;" title="Rate this 5 stars out of 5" class="five-stars">5</a></li>
	</ul>
	<p><%=sMessage%></p>
</div>

rpc.asp

<!--#include file="common.asp"-->
<%
	

	'---  variáveis server
	sUserIP				= Request.ServerVariables("REMOTE_ADDR")
	sRatingURL		= Request.QueryString("url")

	'--- Adicionar um rating
	if len(Request.QueryString("rating")) > 0 then
		UpdateRating int(Request.QueryString("rating")), sRatingURL
	end if

	'--- atual classificação
	GetRating(sRatingURL)

	'--- Mostrar texto abaixo Estrelas

	if iRatingAverage = 0 then
		sMessage = MSG_NOVOTES
	else
		sMessage = replace(MSG_RATING, "[RATING]", iRatingAverage)
		sMessage = replace(sMessage, "[TOTALVOTES]", iTotalRatings)
	end if
	if bSuccess then
		sMessage	= sMessage & " <span class=""starlight"">" & MSG_THANKS & "</span>"
	else
		sMessage = sMessage & " <span class=""starlight"">" & MSG_DENIED & "</span>"
	end if
%>
	<ul>
	<li class="current-rating" style="width:<%=iRatingWidth%>px;">Currently <%=iRatingAverage%>/5 Stars.</li>
	<li><a href="<%=sRatingURL%>?rating=1#star-rating" onclick="loadurl('/rating/rpc.asp?rating=1&url=<%=sRatingURL%>'); return false;" title="Rate this 1 star out of 5" class="one-star">1</a></li>
	<li><a href="<%=sRatingURL%>?rating=2#star-rating" onclick="loadurl('/rating/rpc.asp?rating=2&url=<%=sRatingURL%>'); return false;" title="Rate this 2 stars out of 5" class="two-stars">2</a></li>
	<li><a href="<%=sRatingURL%>?rating=3#star-rating" onclick="loadurl('/rating/rpc.asp?rating=3&url=<%=sRatingURL%>'); return false;" title="Rate this 3 stars out of 5" class="three-stars">3</a></li>
	<li><a href="<%=sRatingURL%>?rating=4#star-rating" onclick="loadurl('/rating/rpc.asp?rating=4&url=<%=sRatingURL%>'); return false;" title="Rate this 4 stars out of 5" class="four-stars">4</a></li>
	<li><a href="<%=sRatingURL%>?rating=5#star-rating" onclick="loadurl('/rating/rpc.asp?rating=5&url=<%=sRatingURL%>'); return false;" title="Rate this 5 stars out of 5" class="five-stars">5</a></li>
	</ul>
	<p><%=sMessage%></p>

rating.css

.starlight {
	color: #e00;
}
#star-rating ul {
	list-style: none;
	margin: 3px;
	padding: 0px;
	width: 150px;
	height: 30px;
	position: relative;
	background: url(/rating/rating.gif) top left repeat-x;
}
#star-rating li {
	padding: 0px;
	margin: 0px;
	/*\*/
	float: left;
	/* */
}
#star-rating li.current-rating {
	background: url(/rating/rating.gif) left bottom;
	position: absolute;
	height: 30px;
	display: block;
	text-indent: -9000px;
	z-index: 1;
}
#star-rating li a {
	display: block;
	width: 30px;
	height: 30px;
	text-decoration: none;
	text-indent: -9000px;
	z-index: 20;
	position: absolute;
	padding: 0px;
	background-image: none;
}
#star-rating li a:hover {
	background: url(/rating/rating.gif) left center;
	z-index: 1;
	left: 0px;
}
#star-rating a.one-star {
	left: 0px;
}
#star-rating a.one-star:hover {
	width: 30px;
}
#star-rating a.two-stars {
	left: 30px;
}
#star-rating a.two-stars:hover {
	width: 60px;
}
#star-rating a.three-stars {
	left: 60px;
}
#star-rating a.three-stars:hover {
	width: 90px;
}
#star-rating a.four-stars {
	left: 90px;
}
#star-rating a.four-stars:hover {
	width: 120px;
}
#star-rating a.five-stars {
	left: 120px;
}
#star-rating a.five-stars:hover {
	width: 150px;
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Boa contribuição Xan.

 

Não testei seu código, mas em uma lida rápida não vi a declaração da função loadurl.

 

Não está pendente a parte de Javascript?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Esta faltando o JS sim, segue abaixo

 

Também vou colocar aqui a imagem do rating, senão vai bugar

 

Imagem Postada

 

Salvem ela como rating.gif e coloquem dentro da pasta rating

 

function fAJAXRequest( sTargetID , sURL , sPost , sWait , sError )
{
	var e = document.getElementById( sTargetID );

	if( e )
	{
		if( sWait != "" )
			e.innerHTML = sWait;

		new oAJAXRequest( e , sURL , sPost , sError );
	}
}


function fAJAXStateChange( hAJAXRequest )
{
	if( hAJAXRequest && hAJAXRequest.mRequest && hAJAXRequest.mRequest.readyState == 4 )
	{
		var s = hAJAXRequest.mRequest.responseText;
		//DEBUG: alert( s );

		if( hAJAXRequest.mRequest.status == "200" && s.substr(0,3) == "200" )
		{
			hAJAXRequest.mhTarget.innerHTML = s.substring(4);
		}
		else
		if( hAJAXRequest.msError != "" )
		{
			hAJAXRequest.mhTarget.innerHTML = hAJAXRequest.msError;
		}
	}
}

function oAJAXRequest( hTarget , sURL , sPost , sError )
{
	var me = this;
	this.mRequest	= null;
	this.mhTarget	= hTarget;
	this.msError	= sError;

	if( window.XMLHttpRequest )	//FF,NS,OP,IE7
	{
		this.mRequest = new XMLHttpRequest();
	}
	else
	if( window.ActiveXObject )	//IE5 & 6
	{
		this.mRequest = new ActiveXObject("Microsoft.XMLHTTP");
	}

	if( this.mRequest )
	{
		if( sPost != "" )
		{
			this.mRequest.open( 'POST', sURL , true );
			this.mRequest.setRequestHeader('Content-type','application/x-www-form-urlencoded');
			this.mRequest.onreadystatechange = function(){ fAJAXStateChange(me); };
			this.mRequest.send( sPost );
		}
		else
		{
			this.mRequest.open( 'GET', sURL , true );
			this.mRequest.onreadystatechange = function(){ fAJAXStateChange(me); };
			this.mRequest.send( null );
		}
	}
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

valeu pelo complemento...

Compartilhar este post


Link para o post
Compartilhar em outros sites

realmente, neste code naun faltando o JS, agradeci pela imagens

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.