Jump to content


Photo

[resolvido] Notícias Com Número De Caracteres Pré-determinados !


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

#1 RicardoPedrosa

RicardoPedrosa

    Novato no fórum

  • Usuários
  • 12 posts
  • Sexo:Não informado

Posted 28/06/2007, 16:45

Olá galera

Estou criando um sistema de notícias, e me deparei com a seguinte questão.

Estava querendo fazer um script na pagina inicial que mostra-se as headlines (data-titulo da noticia).

Só que tem um problema.

Tem algumas notícias que tem o seu título um pouco maior do que o layout suporta.

Por questões de estética gostaria de colocar um limite de caracteres, e quando ultrapassar ele cortar a frase e inserir "...".

Ex:

Noticia original: Flamengo vence de goleada no Vasco no Maracanã :-D

Noticia alterada: Flamengo vence de goleada no Vasc...


Quero que ele conte espaços em branco como caracteres também..


Estou postando o meu atual script que faz a exibição das headlines.


É isso, se alguem puder ajudar, ficaria muito grato ^_^


<?php 
require("includes/config.php");
require("includes/noticias_funcao.php");

//Conecta-se ao mysql
$conexao = @mysql_connect($host, $user, $pass);
if(!$conexao){
die("Impossível conectar-se ao mysql...<br>");
}

//Seleciona o banco de dados
if(! @mysql_select_db($db)){
die("Impossível conectar-se com o banco de dados: " . $db . '<br>');
}

//Mostra todas as notícias inseridas no banco de dados e organiza em ordem
$resultado = mysql_query("SELECT ID, titulo, data, tempo FROM $tabela_noticias ORDER BY tempo DESC LIMIT 0, 8");
if(!$resultado){
die("Erro na solicitação de query: " . mysql_error() . '<br>');
}

echo('<table width="100%" border="0" cellspacing="0" cellpadding="0">
  
');

//Verifica se há alguma noticia amazenada no banco de dados
if(mysql_num_rows($resultado) == 0){
echo("<tr><td align=\"center\"><font face=\"Verdana, Arial, Helvetica, sans-serif\" color=\"#FF0000\" size=\"2\">Atenção! Não há notícias no banco de dados " . $db . '<br></font></td></tr>');
} else {

//Realiza um loop atrás das informações inseridas na tabela
while($row = mysql_fetch_array($resultado)){
$id = $row['ID'];
$titulo = $row['titulo'];
$data = $row['data'];
$tempo = $row['tempo'];
echo('
<tr>
  <td width="1%" align="left" valign="middle"><font face="Verdana, Arial, Helvetica, sans-serif" size="1" color="#000000"><b><img src="img/icone_noticias.gif" width="13" height="15"></b></font></td>
  <td width="99%" align="left" valign="middle"><font face="Verdana, Arial, Helvetica, sans-serif" size="1" color="#000000"><b> ' . formatData($data) . ' - </b><a class="titulo" href="noticias.php?noticia=' . $id . '">' . htmlentities($titulo) . '</a></font></td>
</tr>


');
}
}

echo("  
</table>
");

//Fecha a conexao com o Mysql
mysql_close($conexao);
?>


#2 Paulo André

Paulo André

    Why so serious?

  • Ex-Admins
  • 5114 posts
  • Sexo:Masculino
  • Localidade:Belo Horizonte - MG
  • Interesses:O.Q.F.J.?

Posted 28/06/2007, 16:56

Pegue uma estrutura de comparação, strlen() e substr() e venha comigo, vamos nos preparar para amanhã à noite. :P

Ok, basicamente seria algo parecido com isto:
<?php
   $titulo = "Flamengo vence de goleada no Vasco no Maracanã";
   if( strlen($titulo) > 33 )
   {
	   echo substr($titulo, 0, 33) . "...";
   }
   else
   {
	   echo $titulo;
   }
?>

PS. nem li seu script não, imagino que com este exemplo você consegue aplicá-lo ao script.

Flws...
(ok2)Até mais
Paulo André G Rodrigues,
ex-administrador Fórum WMO.


www.CanalDev.com.br

#3 Crab

Crab

    Da paz, mas preparado para Guerra

  • Ex-Admins
  • 2521 posts
  • Sexo:Masculino
  • Localidade:Florianópolis - SC
  • Interesses:Desenvolvimento Gráfico e Web.

Posted 28/06/2007, 16:59

Utilizou a busca pelo menos ?? :assobio:


http://forum.wmonlin...howtopic=142179

(y)Até mais

#4 Paulo André

Paulo André

    Why so serious?

  • Ex-Admins
  • 5114 posts
  • Sexo:Masculino
  • Localidade:Belo Horizonte - MG
  • Interesses:O.Q.F.J.?

Posted 28/06/2007, 17:35

Eu iria sugerir esta função também. :rolleyes:

Mas pelo exemplo que ele deu, que corta a palavra, a função do Chinello não valeria.

Por isso sugeri o próprio substr(). :)

Mas independente disto, a busca continua sendo uma boa opção. :P

Flws...
(ok2)Até mais
Paulo André G Rodrigues,
ex-administrador Fórum WMO.


www.CanalDev.com.br

#5 RicardoPedrosa

RicardoPedrosa

    Novato no fórum

  • Usuários
  • 12 posts
  • Sexo:Não informado

Posted 28/06/2007, 17:45

Estou super por fora do que seria isso, não sabia nenhum termo para ultilizar a busca..

Só estou com um problema na hora de encaixar essa função no meu script

str_truncate()


echo('
<tr>
<td width="1%" align="left" valign="middle"><font face="Verdana, Arial, Helvetica, sans-serif" size="1" color="#000000"><b><img src="img/icone_noticias.gif" width="13" height="15"></b></font></td>
<td width="99%" align="left" valign="middle"><font face="Verdana, Arial, Helvetica, sans-serif" size="1" color="#000000"><b> ' . formatData($data) . ' - </b><a class="titulo" href="noticias.php?id=' . $id . '">' . htmlentities($titulo) . '</a></font></td>
</tr>
');


Quero que ele corte aonde está destacado em negrito.

Edição feita por: RicardoPedrosa, 28/06/2007, 17:45.


#6 Crab

Crab

    Da paz, mas preparado para Guerra

  • Ex-Admins
  • 2521 posts
  • Sexo:Masculino
  • Localidade:Florianópolis - SC
  • Interesses:Desenvolvimento Gráfico e Web.

Posted 28/06/2007, 17:55

:blink:

Você leu sobre a função lá..??

Leu todo o tópico ??

:huh:


str_truncate(htmlentities($titulo), 30, TRUNC_AFTER_LENGHT)

// 30 é o número de caracteres... pode ser quantos vc quiser

Não esqueça de definir a função na página ou pelo menos chamar um arquivo .js que contenha a função.

Sugiro reler o tópico todo lá e ir testando.

(y)Até mais

#7 RicardoPedrosa

RicardoPedrosa

    Novato no fórum

  • Usuários
  • 12 posts
  • Sexo:Não informado

Posted 28/06/2007, 19:35

Fatal error: Call to undefined function str_truncate() in /home/plugak1/www/site/2007/index.php on line 379


LINE 379<td width="99%" align="left" valign="middle"><font face="Verdana, Arial, Helvetica, sans-serif" size="1" color="#000000"><b> ' . formatData($data) . ' - </b><a class="titulo" href="noticias.php?id=' . $id . '">' . str_truncate(htmlentities($titulo), 30, TRUNC_AFTER_LENGHT) . '</a></font></td>



Tá dando erro...

:(


Help-me plx




Foi.. tava esquecendo de chamar a função...

Tá assim... só tenho mais uma dúvida rs...

Não está saindo o "..." como faço para colocalo ?


define("TRUNC_BEFORE_LENGHT", 0);
define("TRUNC_AFTER_LENGHT", 1);
function str_truncate($str, $length, $rep=TRUNC_BEFORE_LENGHT)
{
if(strlen($str)<=$length) return $str;
if($rep == TRUNC_BEFORE_LENGHT) $oc = strrpos(substr($str,0,$length),' ');
if($rep == TRUNC_AFTER_LENGHT) $oc = strpos(substr($str,$length),' ') + $length;

return substr($str, 0, $oc);
}
while($row = mysql_fetch_array($resultado)){
$id = $row['ID'];
$titulo = $row['titulo'];
$data = $row['data'];
$tempo = $row['tempo'];
echo('
<tr>
<td width="1%" align="left" valign="middle"><font face="Verdana, Arial, Helvetica, sans-serif" size="1" color="#000000"><b><img src="img/icone_noticias.gif" width="13" height="15"></b></font></td>
<td width="99%" align="left" valign="middle"><font face="Verdana, Arial, Helvetica, sans-serif" size="1" color="#000000"><b> ' . formatData($data) . ' - </b><a class="titulo" href="noticias.php?id=' . $id . '">' . str_truncate(htmlentities($titulo), 42, TRUNC_AFTER_LENGHT) . '</a></font></td>
</tr>');

Edição feita por: RicardoPedrosa, 28/06/2007, 19:28.


#8 Paulo André

Paulo André

    Why so serious?

  • Ex-Admins
  • 5114 posts
  • Sexo:Masculino
  • Localidade:Belo Horizonte - MG
  • Interesses:O.Q.F.J.?

Posted 28/06/2007, 19:43

Veja a minha primeira mensagem e substitua o substr() por str_truncate(), definindo a quantidade de caracteres nos dois lugares.

Flws...
(ok2)Até mais
Paulo André G Rodrigues,
ex-administrador Fórum WMO.


www.CanalDev.com.br

#9 Crab

Crab

    Da paz, mas preparado para Guerra

  • Ex-Admins
  • 2521 posts
  • Sexo:Masculino
  • Localidade:Florianópolis - SC
  • Interesses:Desenvolvimento Gráfico e Web.

Posted 28/06/2007, 23:14

Amigo desculpe a sinceridade mas tu deve ter mais atenção... assim evita fazer perguntas desnecessárias e que só trazem desgaste de energia.

Porque estou falando isso??

Porque se tivesse lido tudo que já foi te dito já teria resolvido seus problemas alguns posts acima.

Primeiramente quando te instrui em como adaptar a função ao teu caso... frizei que deveria ter defino a função, pois não pode chamar uma função sem defini-la, mas foi a primeira coisa que fez... não definir a função hehehe

beleza... reparou a tempo no erro...

Se tivesse lido o tópico referente a função ... tópico esse que frizei bem para ler todo e com atenção saberia como fazer para exibir os "..."

Enfim... acho que agora vai neh...

Se entrar no tópico da função verá essa passagem:

print str_truncate($frase, 45, TRUNC_AFTER_LENGHT) . '...';



Te diz algo ???

Releia o primeiro post do tópico da função...Até mais

#10 Paulo André

Paulo André

    Why so serious?

  • Ex-Admins
  • 5114 posts
  • Sexo:Masculino
  • Localidade:Belo Horizonte - MG
  • Interesses:O.Q.F.J.?

Posted 29/06/2007, 06:08

Tudo que o Crab disse é verdade! :D

Com um gasto bem menor do que o tempo que perdeu aqui, pesquisando, buscando aqui no fórum você acharia. (y)

Eu só acho que simplesmente concatenar os "três pontinhos" seria ineficiente quando a frase, por exemplo, não fosse maior que 45 caracteres, por isso caia bem uma comparação antes.

Flws...
:)Até mais
Paulo André G Rodrigues,
ex-administrador Fórum WMO.


www.CanalDev.com.br

#11 RicardoPedrosa

RicardoPedrosa

    Novato no fórum

  • Usuários
  • 12 posts
  • Sexo:Não informado

Posted 29/06/2007, 09:09

Foiii rs...


Muito obrigado pela paciência de vocês :P



Ficou muito bom.. !

[Resolvido]

Edição feita por: RicardoPedrosa, 29/06/2007, 09:09.


#12 Crab

Crab

    Da paz, mas preparado para Guerra

  • Ex-Admins
  • 2521 posts
  • Sexo:Masculino
  • Localidade:Florianópolis - SC
  • Interesses:Desenvolvimento Gráfico e Web.

Posted 29/06/2007, 12:41

Sim Paulo... concordo com você em relação a comparação antes, para não concatenar sem necessidade os três pontos...

(y) Até mais




1 user(s) are reading this topic

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

IPB Skin By Virteq