Alteração do viewtopic.php para normalizar urls movidas 301
-
professor mauricio
- Novato

- Mensagens: 130
- Registrado em: 02 Abr 2011, 11:58
Alteração do viewtopic.php para normalizar urls movidas 301
URL do Fórum: http://forumdepizzarias.com.br
Quando alguém digita um número de tópico qualquer para visualizar, caso o tópico tenha sido movido ou apagado, aparece um trigger error dizendo que o tópico foi movido ou apagado.
Gostaria de aprender a fazer um LOOP no lugar do trigger error que funcione assim:
fulano digita o ID 30
o php não acha o 30 na tabela então ele procura 30 + 1
caso ele não ache ele procura 30+1+1
e assim sucessivamente, em loop, até achar algum número.
teria de ter uma margem de segurança para não ficar em loop infinito dizendo "se o ID for maior que o maior ID existente", aí vem o trigger error ou vem um loop ID - 1 (id menos 1)
Não sei se seria complicado de fazer, mas temos uns 'buracos' em números de fóruns e em números de topicos e vez por outra alguém cai num desses trigger error.
Vou dar outro exemplo:
fulano achou um link para viewtopic.php?t=X no google
Só que o tópico X foi fundido com o tópico Y.
Seria menos mal se o cara caísse em viewtopic.php?t=X+1 ou X+2 ou X+... ou, se fosse possível, cair em viewtopic.php?t=Y
Outra alterativa seria trocar o 'trigger error' atual para qualquer tópico existente, como um guia de uso do site, uma seção de batepapo ou uma página como 'posting.php' para a pessoa enviar novamente a pergunta que resultou em "DEAD END"
abc e, de antemão, obrigado
Quando alguém digita um número de tópico qualquer para visualizar, caso o tópico tenha sido movido ou apagado, aparece um trigger error dizendo que o tópico foi movido ou apagado.
Gostaria de aprender a fazer um LOOP no lugar do trigger error que funcione assim:
fulano digita o ID 30
o php não acha o 30 na tabela então ele procura 30 + 1
caso ele não ache ele procura 30+1+1
e assim sucessivamente, em loop, até achar algum número.
teria de ter uma margem de segurança para não ficar em loop infinito dizendo "se o ID for maior que o maior ID existente", aí vem o trigger error ou vem um loop ID - 1 (id menos 1)
Não sei se seria complicado de fazer, mas temos uns 'buracos' em números de fóruns e em números de topicos e vez por outra alguém cai num desses trigger error.
Vou dar outro exemplo:
fulano achou um link para viewtopic.php?t=X no google
Só que o tópico X foi fundido com o tópico Y.
Seria menos mal se o cara caísse em viewtopic.php?t=X+1 ou X+2 ou X+... ou, se fosse possível, cair em viewtopic.php?t=Y
Outra alterativa seria trocar o 'trigger error' atual para qualquer tópico existente, como um guia de uso do site, uma seção de batepapo ou uma página como 'posting.php' para a pessoa enviar novamente a pergunta que resultou em "DEAD END"
abc e, de antemão, obrigado
Editado pela última vez por professor mauricio em 27 Ago 2011, 11:16, em um total de 1 vez.
Comeu uma pizza que pode melhorar?
Indique o Fórum de Pizzarias para a pizzaria do seu bairro!
Somos um grupo de empreendedores focados em capacitação e desenvolvimento de expertise em pizzas.
Indique o Fórum de Pizzarias para a pizzaria do seu bairro!
Somos um grupo de empreendedores focados em capacitação e desenvolvimento de expertise em pizzas.
-
professor mauricio
- Novato

- Mensagens: 130
- Registrado em: 02 Abr 2011, 11:58
Re: Alteração em função do viewtopic.php
Depois de alguns testes esse redir não funciona caso o fulano tente acessar usando APENAS o número do post...
mas já dei um jeito e depois eu passo
mas já dei um jeito e depois eu passo
Depois de muuuuuuuita pesquisa cheguei a uma solução "elegante" tirada do link abaixo: (que tem outras dicas legais)
http://greensboring.com/viewtopic.php?f=23&t=4720
abra /viewtopic.php e localize logo no comecinhoLogo abaixo adicione em uma linha vazia o seguinte código:Código: Selecionar todos
include($phpbb_root_path . 'includes/bbcode.' . $phpEx);Sempre que alguém oferecer somente o número do tópico, vai dar um 301 para o "nome completo" com ?f=XX&t=XXX.Código: Selecionar todos
$topic_id = request_var('t', 0); $sql = 'SELECT forum_id FROM ' . TOPICS_TABLE . " WHERE topic_id = $topic_id"; $result = $db->sql_query($sql); $forum_id = (int) $db->sql_fetchfield('forum_id'); $db->sql_freeresult($result); if (!$forum_id) { header("Status: 301 Moved Permanently", true, 301); header("Location: $phpbb_root_path"); exit(); } if ($_REQUEST['f'] != $forum_id) { header("Status: 301 Moved Permanently", true, 301); header("Location: {$phpbb_root_path}viewtopic.php?f={$forum_id}&t={$topic_id}"); exit(); }
E sempre que a pessoa oferecer um link de tópico que já foi movido, vai dar um 301 para o novo.
Caso, por fim, a pessoa dê um link deletado, vai dar um 301 para a home (essa parte eu não sei se gostei...)
Vou tentar melhorar esse código depois, para o caso de um f=XX que não exista quando a pessoa tenta acessar um fórum que já foi deletado.
Mas assim já ajuda bastante! (estava pensando também em fazer uma página explicando que o tópico foi deletado e dar o 301 para ela em lugar da index)
abc
Comeu uma pizza que pode melhorar?
Indique o Fórum de Pizzarias para a pizzaria do seu bairro!
Somos um grupo de empreendedores focados em capacitação e desenvolvimento de expertise em pizzas.
Indique o Fórum de Pizzarias para a pizzaria do seu bairro!
Somos um grupo de empreendedores focados em capacitação e desenvolvimento de expertise em pizzas.
-
professor mauricio
- Novato

- Mensagens: 130
- Registrado em: 02 Abr 2011, 11:58
Re: Alteração do viewtopic.php para normalizar urls movidas
Gostaria de ajuda para finalizar este desenvolvimento e, quem sabe, mandar para o phpbb.com também como um "MOD para aplicar 301 e posts e tópicos movidos (apagados?)"
Abra viewtopic.php.
localize:
Substitua por:
Abra geladeira.php
Localize:
Beba!
Abra viewtopic.php.
localize:
Código: Selecionar todos
// Do we have a topic or post id?
if (!$topic_id && !$post_id)
{
trigger_error('NO_TOPIC');
}Código: Selecionar todos
//padronizacao para normalizar urls movidas
// primeira coisa importante eh pegarmos o post
if ($post_id)
{
$sql = 'SELECT post_id, topic_id, forum_id
FROM ' . POSTS_TABLE . "
WHERE post_id = $post_id";
$result = $db->sql_query($sql);
$row = $db->sql_fetchrow($result);
$db->sql_freeresult($result);
// opa, se nao existe o post eh melhor apagar o post da url
if (!$row)
{
header("Status: 301 Moved Permanently", true, 301);
header("Location: {$phpbb_root_path}viewtopic.php?f={$forum_id}&t={$topic_id}");
exit();
}
// agora a gente pega o topico e ve se bate com o post para corrigir url de post movido
if ($_REQUEST['t'] != $row['topic_id'])
{
$f = $row['forum_id'];
$t = $row['topic_id'];
$p = $row['post_id'];
header("Status: 301 Moved Permanently", true, 301);
header("Location: {$phpbb_root_path}viewtopic.php?f={$f}&t={$t}&p={$p}#p{$p}");
exit();
}
// agora a gente confere se o topico nao foi movio tambem e corrige a url se for o caso
if ($_REQUEST['f'] != $row['forum_id'])
{
$f = $row['forum_id'];
$t = $row['topic_id'];
$p = $row['post_id'];
header("Status: 301 Moved Permanently", true, 301);
header("Location: {$phpbb_root_path}viewtopic.php?f={$f}&t={$t}&p={$p}#p{$p}");
exit();
}
}
// caso a gente nao tenha o post ou ele tenha sido apagado por estar errado na condicao anterior
if ($topic_id && !$post_id)
{
$sql = 'SELECT topic_id, forum_id
FROM ' . TOPICS_TABLE . "
WHERE topic_id = $topic_id";
$result = $db->sql_query($sql);
$row = $db->sql_fetchrow($result);
$db->sql_freeresult($result);
// opa, parece que a gente nao tem o topico tambem, somente temos o forum?
if (!$row)
{
header("Status: 301 Moved Permanently", true, 301);
header("Location: {$phpbb_root_path}viewforum.php?f={$forum_id}");
exit();
}
//tendo o topico mas o forum estando errado a gente precisa corrigir, afinal, e se foi movido?
if ($_REQUEST['f'] != $row['forum_id'])
{
$f = $row['forum_id'];
$t = $row['topic_id'];
header("Status: 301 Moved Permanently", true, 301);
header("Location: {$phpbb_root_path}viewtopic.php?f={$f}&t={$t}");
exit();
}
}
// vamos pensar assim: o cara tentou acessar um forum pelo viewtopic, entao a gente manda ele para o view forum neh.
if ($forum_id && !$topic_id && !$post_id)
{
header("Status: 301 Moved Permanently", true, 301);
header("Location: {$phpbb_root_path}viewforum.php?f={$forum_id}");
exit();
}
// se o cara nao nos deu nada, nao ha o que fazer. se na condicao anterior o forum nao existia ele vai cair em um 'no forum' na viewforum
if (!$topic_id && !$post_id)
{
meta_refresh(3, $phpbb_root_path);
trigger_error('NO_TOPIC');
}
// alteracoes para 'padronizar' urls movidasLocalize:
Código: Selecionar todos
cervejaComeu uma pizza que pode melhorar?
Indique o Fórum de Pizzarias para a pizzaria do seu bairro!
Somos um grupo de empreendedores focados em capacitação e desenvolvimento de expertise em pizzas.
Indique o Fórum de Pizzarias para a pizzaria do seu bairro!
Somos um grupo de empreendedores focados em capacitação e desenvolvimento de expertise em pizzas.
-
professor mauricio
- Novato

- Mensagens: 130
- Registrado em: 02 Abr 2011, 11:58
Re: Alteração do viewtopic.php para normalizar urls movidas
Agora, tem um detalhe que não consegui resolver AINDA.
O php troca o forum_id de post global para 0. Isso faz com que a url de um post global fique:
f=0&t=XX ou f=0&t=XX&p=XX#XXX ou
implicações lógicas destas modificações enviadas:
se tiver qualquer coisa movida, errada ou não enviada na url vai funcionar assim:
post_id existe e corrige topic_id e forum_id se necessário. Caso a url esteja com as 3 strings corretas, nada acontece.
se ele é errada, ele se apaga e deixa o restante.
se o restante não existe aparece mensagem de trigger error.
então, não temos (mais) post_id. Se o restante tiver topic_id corrige o forum_id. Se tiver certo, não faz nada.
se o topic_id estiver errado, ele se apagar e deixa o forum_id
se o forum_id é válido aparece a visualização de fórum
se o forum_id é inválido, aparece o erro "fórum inválido"
se o forum_id não foi dado do tipo viewtopic.php?f=0 ou apenas viewtopic.php aparecer o trigger error 'no topic'
off topic:
VVVVVVVVIIIIIIIIIIIIIIIIIIIINNNNNNNNNNNNNNYYYYYYYYYYYYYY!!!!!!!!!!!!!!!!
CCCCCCCCCHHHHHHHHHHHHHIIIIIIIIIIIIIIICCCCCCCCCCCCCOOOOOOOOOOOOOOO!!!!!!!!!!!!
HHHHHHHOOOOOOOOSSSSSSSSSSTTTTTTTTTT!!!!!!!!!!!!
O php troca o forum_id de post global para 0. Isso faz com que a url de um post global fique:
f=0&t=XX ou f=0&t=XX&p=XX#XXX ou
implicações lógicas destas modificações enviadas:
se tiver qualquer coisa movida, errada ou não enviada na url vai funcionar assim:
post_id existe e corrige topic_id e forum_id se necessário. Caso a url esteja com as 3 strings corretas, nada acontece.
se ele é errada, ele se apaga e deixa o restante.
se o restante não existe aparece mensagem de trigger error.
então, não temos (mais) post_id. Se o restante tiver topic_id corrige o forum_id. Se tiver certo, não faz nada.
se o topic_id estiver errado, ele se apagar e deixa o forum_id
se o forum_id é válido aparece a visualização de fórum
se o forum_id é inválido, aparece o erro "fórum inválido"
se o forum_id não foi dado do tipo viewtopic.php?f=0 ou apenas viewtopic.php aparecer o trigger error 'no topic'
off topic:
VVVVVVVVIIIIIIIIIIIIIIIIIIIINNNNNNNNNNNNNNYYYYYYYYYYYYYY!!!!!!!!!!!!!!!!
CCCCCCCCCHHHHHHHHHHHHHIIIIIIIIIIIIIIICCCCCCCCCCCCCOOOOOOOOOOOOOOO!!!!!!!!!!!!
HHHHHHHOOOOOOOOSSSSSSSSSSTTTTTTTTTT!!!!!!!!!!!!
Comeu uma pizza que pode melhorar?
Indique o Fórum de Pizzarias para a pizzaria do seu bairro!
Somos um grupo de empreendedores focados em capacitação e desenvolvimento de expertise em pizzas.
Indique o Fórum de Pizzarias para a pizzaria do seu bairro!
Somos um grupo de empreendedores focados em capacitação e desenvolvimento de expertise em pizzas.
Re: Alteração do viewtopic.php para normalizar urls movidas
Engraçado, pois estudei isso ano passado, mas esqueci como se faz. :roll:professor mauricio escreveu:Gostaria de aprender a fazer um LOOP no lugar do trigger error que funcione assim:
Já tentou mudar o código para:
Código: Selecionar todos
viewtopic.php?t={TOPIC_ID}Tradução Português Brasileiro: https://www.phpbb.com/customise/db/translation/brazilian_portuguese/
Precisa de serviços phpBB? Me mande um mensagem privada ou visite https://vinny.quest
Precisa de serviços phpBB? Me mande um mensagem privada ou visite https://vinny.quest
-
professor mauricio
- Novato

- Mensagens: 130
- Registrado em: 02 Abr 2011, 11:58
Re: Alteração do viewtopic.php para normalizar urls movidas
Com os códigos que botei ali em cima, os erros 404 caem 90%, pois sempre terá um 301 esperando... (eliminando parcialmente a necessidade de looping)
se o post é inválido, vale o tópico
se o tópico é inválido, vale o fórum
se o fórum é inválido que vem o 404.
se qualquer um for válido, ou seja, somente 1 deles sendo válidos já seria suficiente para não haver erro 404, pois o post corrige os outros dois
ou o topico corrige o forum
ou o forum envia para o viewforum.
Agora estou indeciso quanto ao seguinte:
é mais "certo" deixar rolar um 404 ou dar um 301 para a index? (pois o 404, a rigor, significa página não encontrada e não significa página excluída)
Claro que, mesmo assim, pode aparecer algum 404 por erro de servidor....
se o post é inválido, vale o tópico
se o tópico é inválido, vale o fórum
se o fórum é inválido que vem o 404.
se qualquer um for válido, ou seja, somente 1 deles sendo válidos já seria suficiente para não haver erro 404, pois o post corrige os outros dois
ou o topico corrige o forum
ou o forum envia para o viewforum.
Agora estou indeciso quanto ao seguinte:
é mais "certo" deixar rolar um 404 ou dar um 301 para a index? (pois o 404, a rigor, significa página não encontrada e não significa página excluída)
Claro que, mesmo assim, pode aparecer algum 404 por erro de servidor....
Comeu uma pizza que pode melhorar?
Indique o Fórum de Pizzarias para a pizzaria do seu bairro!
Somos um grupo de empreendedores focados em capacitação e desenvolvimento de expertise em pizzas.
Indique o Fórum de Pizzarias para a pizzaria do seu bairro!
Somos um grupo de empreendedores focados em capacitação e desenvolvimento de expertise em pizzas.
