Ir para conteúdo

POWERED BY:

Arquivado

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

Thiago K.

[Resolvido] Criar tag's para uma notícia

Recommended Posts

Pessoal,

 

Tenho uma seção de notícias e gostaria de incluir tags na notícia relacionada.

 

Ex.: O Corpo de Bombeiros está atuando com 60% de seu efetivo para atender as vítimas da forte chuva que atingiu a capital paulista na madrugada de hoje.

 

Então em um campo texto gostaria de incluir as TAGS separadas por vírgula mesmo, como se fossem meta-keywords.

 

bombeiros, chuva, capital paulista

 

E cada uma delas teria um link ex.:

 

pagina.asp?tag=bombeiros

pagina.asp?tag=chuva

pagina.asp?tag=capital paulista

 

Não é relacionado a nuvem de tags.

 

A minha questão é como transformar essas palavras em link?

 

Agradeço desde já!

Compartilhar este post


Link para o post
Compartilhar em outros sites

use uma Cloud Tag, existem exemplos, procure no forum

 

ex:

 

<% @Language="VBScript" %>
<%


Option Explicit

On Error Resume Next

With Response
    .ExpiresAbsolute = #1/1/1980#
    .AddHeader "cache-control", "no-cache, must-revalidate"
    .AddHeader "pragma", "no-cache"
    .AddHeader "Content-Type", "text/html; charset=UTF-8"
End With

%>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>TagCloud</title>
<style type="text/css">
#tagCloud {font-family: verdana; width: 300px; border: 1px solid gray; padding: 5px 0px 5px 0px; text-align: center; font-weight: bold;}
.tag1 {font-size: 12px;}
.tag2 {font-size: 18px;}
.tag3 {font-size: 24px;}
</style>
</head>
<body>
<h3>TAG CLOUD MADE FROM A BBC FEED:</h3>
<%

Dim m_sTags
Dim m_aTags
Dim m_sSmallWords
Dim m_sCurrent, m_sLast
Dim m_bMatch
Dim m_iWordCount
Dim m_sHTML
Dim i, iMax


m_sTags = Replace(Replace(Replace(Replace(Replace(Replace(ReadRSSTags, "?", ""), "!", ""), ".", ""), ",", ""), "-", ""), ":", "")

m_sSmallWords = " O Corpo de Bombeiros está atuando com 60% de seu efetivo para atender as vítimas da forte chuva que atingiu a capital paulista na madrugada de hoje. "


m_aTags = Split(m_sTags, " ")
m_iWordCount = 1
m_bMatch = False


Call BubbleSort(m_aTags)

m_sHTML = "<div id=""tagCloud"" title=""Hot topics right now"">"

iMax = UBound(m_aTags)


    For i = 0 To iMax
        m_sCurrent = m_aTags(i)


        If m_sCurrent = m_sLast Then
            m_bMatch = True
            m_iWordCount = (m_iWordCount + 1)
        Else

            If m_bMatch Then
                If m_iWordCount > 1 Then
                    If Not InStr(m_sSmallWords, LCase(m_sLast)) > 0 Then

                       
                        If m_iWordCount = 2 Then m_sHTML = m_sHTML & "<span class=""tag1"">" & m_sLast & "</span> "
                        If m_iWordCount = 3 Then m_sHTML = m_sHTML & "<span class=""tag2"">" & m_sLast & "</span> "
                        If m_iWordCount > 3 Then m_sHTML = m_sHTML & "<span class=""tag3"">" & m_sLast & "</span> "

                    End If
                End If
            End If

            m_iWordCount = 1
        End If
        
        m_sLast = m_sCurrent
    Next

'// OUTPUT THE TAG CLOUD
Response.Write m_sHTML & "</div></body></html>"

'------------------------------------------------------------------------------------------------------------
'Comentário: RSS Carregar arquivo do disco.
'------------------------------------------------------------------------------------------------------------
Function ReadRSSTags()
    On Error Resume Next

    Dim oXML, oNode, oNodeList, sRetVal

    Set oXML = CreateObject("MSXML2.DOMDocument.6.0")

    If Err Then
        On Error Resume Next
        Set oXML = CreateObject("MSXML2.DOMDocument.3.0")
    End If

    With oXML
        .async = False
        If Not .Load(Server.MapPath("bbc.xml")) Then Set oXML = Nothing: Exit Function
    End With

    Set oNodeList = oXML.selectNodes("//item")

    If oNodeList.length > 0 Then
        For Each oNode In oNodeList
            sRetVal = sRetVal & oNode.selectSingleNode("title").Text & Chr(32)
        Next
    End If

    Set oNodeList = Nothing
    Set oXML = Nothing

    ReadRSSTags = sRetVal

End Function

'------------------------------------------------------------------------------------------------------------
'Comentário: Organizar os tags. http:
'------------------------------------------------------------------------------------------------------------
Sub BubbleSort(ByRef a)
    On Error Resume Next

    Dim i, j, iMax
    Dim Start, iNew, swap

    iMax = UBound(a)

    For i = 0 To iMax - 1
        Start = a(i)
        iNew = a(i)
        swap = i
            
        For j = i + 1 To iMax
            If a(j) < iNew Then
                swap = j
                iNew = a(j)
            End If
        Next
        
        If swap <> i Then
            a(swap) = Start
            a(i) = iNew
        End If

    Next

End Sub

%>

xml

<?xml version="1.0" encoding="ISO-8859-1" ?>
<?xml-stylesheet title="XSL_formatting" type="text/xsl" href="/shared/bsp/xsl/rss/nolsol.xsl"?>
<rss version="2.0"><channel>
	<title>BBC News | World | UK Edition</title>
	<link>http://news.bbc.co.uk/go/rss/-/1/hi/world/default.stm</link>
	<description>Resultado recuou por causa da crise e de reduções de tributos.
É a 1ª queda desde 2003, início da atual série metodológica da Receita.</description>
	<language>en-gb</language>
	<lastBuildDate>Wed, 04 Oct 2006 23:09:19 GMT</lastBuildDate>
	<copyright>Copyright: (C) British Broadcasting Corporation, see http://news.bbc.co.uk/1/hi/help/rss/4498287.stm for terms and conditions of reuse</copyright>
	<docs>http://www.bbc.co.uk/syndication/</docs>
	<ttl>15</ttl>
		
		<image>
			<title>BBC News</title>
			<url>http://news.bbc.co.uk/nol/shared/img/bbc_news_120x60.gif</url>
			<link>http://news.bbc.co.uk/go/rss/-/1/hi/world/default.stm</link>
		</image>
		
			

Compartilhar este post


Link para o post
Compartilhar em outros sites

tem o exemplo acima e este aki

Compartilhar este post


Link para o post
Compartilhar em outros sites

como você guarda as tags no bd?

 

seria tblTags > tag1, tag2, tag3, tag4

 

 

 

 

se sim, basta fazer um loop com a qtd de ", " e inserir o link

Compartilhar este post


Link para o post
Compartilhar em outros sites

mais um exemplo

 

<% @Language="VBScript" %>
<%
Option Explicit

On Error Resume Next

With Response
	.ExpiresAbsolute = #1/1/1980#
	.AddHeader "cache-control", "no-cache, must-revalidate"
	.AddHeader "pragma", "no-cache"
	.AddHeader "Content-Type", "text/html; charset=UTF-8"
End With

%>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>TagCloud</title>
<style type="text/css">
#tagCloud {font-family: verdana; width: 300px; border: 1px solid gray; padding: 5px 0px 5px 0px; text-align: center; font-weight: bold;}
.tag1 {font-size: 12px;}
.tag2 {font-size: 18px;}
.tag3 {font-size: 24px;}
</style>
</head>
<body>
<h3>TAG CLOUD:</h3>
<%

Dim m_sTags
Dim m_aTags
Dim m_sSmallWords
Dim m_sCurrent, m_sLast
Dim m_bMatch
Dim m_iWordCount
Dim m_sHTML
Dim i, iMax

'// LE o arquivo RSS e remove alguns CARACTERES comuns 
m_sTags = Replace(Replace(Replace(Replace(Replace(Replace(ReadRSSTags, "?", ""), "!", ""), ".", ""), ",", ""), "-", ""), ":", "")

m_sSmallWords = " Teste seus conhecimentos sobre o Windows 7 participando do desafio WIN THE 7 e concorra a consoles Xbox 360 e a entradas para o Tech-Ed Brasil 2009."

'// ARMAZENE AS PALAVRAS (tags) em uma matriz
m_aTags = Split(m_sTags, " ")
m_iWordCount = 1
m_bMatch = False

'// PALAVRAS alfabeticamente EM ORDEM . Isto torna-os mais fáceis de contar
Call BubbleSort(m_aTags)

m_sHTML = "<div id=""tagCloud"" title=""Hot tópicos"">"

iMax = UBound(m_aTags)

'// LOOP 
	For i = 0 To iMax
		m_sCurrent = m_aTags(i)
		
		If m_sCurrent = m_sLast Then
			m_bMatch = True
			m_iWordCount = (m_iWordCount + 1)
		Else

			If m_bMatch Then
				If m_iWordCount > 1 Then
					If Not InStr(m_sSmallWords, LCase(m_sLast)) > 0 Then

						If m_iWordCount = 2 Then m_sHTML = m_sHTML & "<span class=""tag1"">" & m_sLast & "</span> "
						If m_iWordCount = 3 Then m_sHTML = m_sHTML & "<span class=""tag2"">" & m_sLast & "</span> "
						If m_iWordCount > 3 Then m_sHTML = m_sHTML & "<span class=""tag3"">" & m_sLast & "</span> "

					End If
				End If
			End If

			m_iWordCount = 1
		End If
		
		m_sLast = m_sCurrent
	Next

'// OUTPUT TAG CLOUD
Response.Write m_sHTML & "</div></body></html>"

'------------------------------------------------------------------------------------------------------------
' Carregar arquivo RSS a partir do disco.
'------------------------------------------------------------------------------------------------------------
Function ReadRSSTags()
	On Error Resume Next

	Dim oXML, oNode, oNodeList, sRetVal

	Set oXML = CreateObject("MSXML2.DOMDocument.6.0")

	If Err Then
		On Error Resume Next
		Set oXML = CreateObject("MSXML2.DOMDocument.3.0")
	End If

	With oXML
		.async = False
		If Not .Load(Server.MapPath("bbc.xml")) Then Set oXML = Nothing: Exit Function
	End With

	Set oNodeList = oXML.selectNodes("//item")

	If oNodeList.length > 0 Then
		For Each oNode In oNodeList
			sRetVal = sRetVal & oNode.selectSingleNode("title").Text & Chr(32)
		Next
	End If

	Set oNodeList = Nothing
	Set oXML = Nothing

	ReadRSSTags = sRetVal

End Function


Sub BubbleSort(ByRef a)
	On Error Resume Next

	Dim i, j, iMax
	Dim Start, iNew, swap

	iMax = UBound(a)

	For i = 0 To iMax - 1
		Start = a(i)
		iNew = a(i)
		swap = i
			
		For j = i + 1 To iMax
			If a(j) < iNew Then
				swap = j
				iNew = a(j)
			End If
		Next
		
		If swap <> i Then
			a(swap) = Start
			a(i) = iNew
		End If

	Next

End Sub

%>

Compartilhar este post


Link para o post
Compartilhar em outros sites

como você guarda as tags no bd?

 

seria tblTags > tag1, tag2, tag3, tag4

 

 

 

 

se sim, basta fazer um loop com a qtd de ", " e inserir o link

 

 

Minha idéia era guardar as tags na tabela de notícias em uma coluna de tags.

 

Porque no cadastro seria um campo textarea para o cliente incluir essas tags.

 

Acha que é possível?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não consegui usar nenhum dos códigos. Salvei exatamente como passou para ver o resultado, mas não me retorna nada.

 

No blog do Ted k' tem o exemplo do que eu quero.

 

Abaixo de cada notícia tem as palavras relacionadas em "Tagged as"

Compartilhar este post


Link para o post
Compartilhar em outros sites

Thiago K., essas tags são inseridas no momento em que a notícia (registro) é cadastrada.

 

Ao ler o registro da notícia (por exemplo), você acessa o campo TAG e armazena em uma variável.

 

Como está separada por vírgula, basta você utilizar a função SPLIT para transformar em VETOR.

 

Utilize a função UBOUND para ler o VETOR e de acordo com as palavras lidas, você vai montando os links.

 

Qualquer dúvida poste aqui.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Thiago K., essas tags são inseridas no momento em que a notícia (registro) é cadastrada.

 

Ao ler o registro da notícia (por exemplo), você acessa o campo TAG e armazena em uma variável.

 

Como está separada por vírgula, basta você utilizar a função SPLIT para transformar em VETOR.

 

Utilize a função UBOUND para ler o VETOR e de acordo com as palavras lidas, você vai montando os links.

 

Qualquer dúvida poste aqui.

 

Hargon, como sou iniciante e que aprendeu fuçando ainda não tinha visto essas funções.

 

Mas com a dica que me deu corri atrás para entender como funciona, e consegui resolver.

 

Só tem uma questão que é da vírgula. Não gostaria que ele aparecesse na última TAG.

 

Exemplo do resultado:

 

Caixa Econômica Federal dobra crédito para habitação em 2009

Tags: minha casa, minha vida,

 

Pode me ajudar?

 

O código ficou assim:

 


<%@LANGUAGE="VBSCRIPT" CODEPAGE="65001"%>

<%

Set Conexao = Server.CreateObject("ADODB.Connection")
Conexao.Open = db

Set rsNovidades = Server.CreateObject("ADODB.RecordSet")
	sql = ""
	sql = sql & " SELECT ID, titulo, mtags "
	sql = sql & " FROM tabela "

rsNovidades.Open SQL, Conexao, 3, 3

%>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Untitled Document</title>
</head>

<body>
<%While NOT rsNovidades.EOF%>

<p><%=rsNovidades(1)%></p>

<p>

Tags: <%

varTags = Split(rsNovidades(2), ", ")

For i = 0 to Ubound(varTags)

  Response.Write("<a href=""?tag="&varTags(i)&""">"&varTags(i)&"</a>")
  
  if not rsNovidades.EOF then response.write(", ") end if
  
Next
	
%>

</p>
<%
rsNovidades.MoveNext()
Wend
%>
</body>
</html>


Compartilhar este post


Link para o post
Compartilhar em outros sites

o code do post #2

funciona legal

Compartilhar este post


Link para o post
Compartilhar em outros sites

Muito bom Thiago K. Existe uma outra forma de fazer, que é utilizando uma tabela para cadastrar as tags e outra para relacioná-la com as notícias, mas é bem mais complicado assim (só estou falando para você ficar ciente que tem uma forma melhor).

 

No caso da vírgula, altere a linha:

if not rsNovidades.EOF then response.write(", ") end if

 

Para:

if i < Ubound(varTags) then response.write(", ") end if

Compartilhar este post


Link para o post
Compartilhar em outros sites

talves lhe ajude link

Compartilhar este post


Link para o post
Compartilhar em outros sites

Muito bom Thiago K. Existe uma outra forma de fazer, que é utilizando uma tabela para cadastrar as tags e outra para relacioná-la com as notícias, mas é bem mais complicado assim (só estou falando para você ficar ciente que tem uma forma melhor).

 

No caso da vírgula, altere a linha:

if not rsNovidades.EOF then response.write(", ") end if

 

Para:

if i < Ubound(varTags) then response.write(", ") end if

 

Hargon, ficou perfeito. Gostei do resultado.

 

Vou pensar nessa outra forma para deixar em uma tabela separada.

 

Obrigado, você me ajudou bastante. Pode colocar como resolvido.

 

Acho que seria legal colocar no laboratório, como um jeito "simples" de tags.

 

O resultado final ficou assim:

 

<%@LANGUAGE="VBSCRIPT" CODEPAGE="65001"%>

<%

Set Conexao = Server.CreateObject("ADODB.Connection")
Conexao.Open = db

Set rsNovidades = Server.CreateObject("ADODB.RecordSet")
        sql = ""
        sql = sql & " SELECT ID, titulo, mtags "
        sql = sql & " FROM tabela "

rsNovidades.Open SQL, Conexao, 3, 3

%>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Tag´s para notícias</title>
</head>

<body>
<%While NOT rsNovidades.EOF%>

<p><%=rsNovidades(1)%></p>

<p>

Tags: <%

varTags = Split(rsNovidades(2), ", ")

For i = 0 to Ubound(varTags)

  Response.Write("<a href=""?tag="&varTags(i)&""">"&varTags(i)&"</a>")
  
  if i < Ubound(varTags) then response.write(", ") end if
  
Next
        
%>

</p>
<%
rsNovidades.MoveNext()
Wend
%>
</body>
</html>
<%
rsNovidades.Close()
Set rsNovidades = Nothing
%>

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.