Ir para conteúdo

POWERED BY:

Arquivado

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

SnakeX

[Resolvido] Mod_rewrite - Função para converter urls

Recommended Posts

Boas :)

 

É o seguinte, quero criar uma função que converta urls normais para urls amigaveis.

 

Ex:

index.php?pagina=catalogo => catalogo/

index.php?pagina=catalogo.produto&id=1000 => catalogo/1000.produto

 

 

Eu já comecei a função:

    $patterns = array(
                'index.php?pagina='                     => '{pagina}/',
                'index.php?pagina=catalogo.produto&id='     => 'catalogo/{id}.produto',
    );
    function RewriteURL($url)
    {
        global $patterns;
        
        foreach($patterns as $key => $valor)
        {
            if(strstr($url, $key))
            {
                return $valor;
                break;
            }
        }
    }

 

Eu não sei como explicar mas a função está fazendo já um pouquinho do que eu quero que ela faça, ou seja, ela vai ao array $patterns e verifica se tem lá alguma string igual ao $url se tiver retorna $valor.

 

Prontos, o que eu queria que ela fizesse mais é o seguinte:

  • No array $patterns ter algo assim: "index.php?pagina={pagina}" => "{pagina}/" e depois a função pegar do url a pagina e trocar no $valor
Exemplo:

1º RewriteURL('index.php?pagina=catalogo');

2º RewriteURL('index.php?pagina=catalogo.produto&id=1000');

Ela retornaria algo assim:

1º catalogo/

2º catalogo/1000.produto

 

Não sei se com regex dará para fazer isso, mas eu de regex percebo muito pouco lol

 

Queria tornar a função dinámica pois o array $pattern iria ter urls de várias maneiras....

 

 

Toda a ajuda que poderem dar eu agradeço :)

 

Obrigado ;)

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eu sei o que é mod_rewrite... o que eu pretendo é mudar os urls do HTML através de uma função em PHP de forma automática, porque o sistema tem de funcionar com ou sem mod_rewrite...

Compartilhar este post


Link para o post
Compartilhar em outros sites

mod_rewrite sim mas o que eu quero é uma função que traduza isto: "index.php?pagina=nome_da_pagina&id=25" para nome_da_pagina/25

 

Já consegui fazer o queria:

$pagina = '';
    $rewrites = array(
        '/index.php?pagina=([a-z0-9]{1,99})&id=([0-9]{1,99})?/'        =>    'catalogo/{2}.{1}',
        '/index.php?pagina=([a-z0-9]{1,99})?/'                            =>    '{1}',
    );
    
    $pagina_ = 'index.php?pagina=produto&id=25';
    
    foreach($rewrites as $bl => $pagina)
    {
        if(preg_match($bl, $pagina_, $matches))
        {
            foreach($matches as $id => $valor)
            {
                $pagina =     str_replace('{' . $id . '}', $valor, $pagina);
            }
            break;
        }
    }

 

Por exemplo, se eu acessar a pagina:

 

index.php?pagina=produto&id=25 ele retorna catalogo/25.produto

index.php?pagina=nome_da_pagina ele retorna nome_da_pagina

 

 

não sei se percebem o que queria fazer mas prontos já está meio caminho andado =)

 

 

Como não percebia praticamente nada de regex tive de estudar e olha consegui me safar... não sei se é possível melhorar a parte do regex mas se for me avisem como =D

Compartilhar este post


Link para o post
Compartilhar em outros sites

Pelo que eu entendi,você quer urls amigaveis,só que quer fazer o Rewrite pelo PHP correto?

Não é possivel.Você tem que ter algo a nivel da requisição/webserver para dizer para onde seus requests serão encaminhados.

Claro...você poderia fazer uma url do tipo:

www.seusite.com/pagina.extensao?urlamigavel

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não amigo não é isso...

 

Eu através do PHP só quero converter as URL's nada mais... o mod_rewrite eu uso pelo .htaccess..

 

Portanto, pelo PHP só converto as URL's do HTML porque imagina que eu de um momento para o outro deixo de querer usar mod_rewrite, se isso acontecer tenho de alterar todas as URL's novamente... e isso dá bastante trabalho... assim é tudo mais fácil...

 

Espero que me tenha feito entender lol

Compartilhar este post


Link para o post
Compartilhar em outros sites

A sim...pega o que tá depois do =...e coloca barras depois.

Expressões Regulares são uma boa.

Estude-as...;D

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eu já tenho a funcionar isso =)

 

<?php
  function RewriteUrl($url)
  {
      $url = strtolower($url);
  
      $pagina = '';
      $rewrites = array(
          '/index.php?pagina=([a-z0-9]{1,99})&id=([0-9]{1,99})?/'        =>    'catalogo/$2.$1',
          '/index.php?pagina=([a-z0-9]{1,99}).([a-z0-9]{1,99})?/'        =>    '$1/$2',
          '/index.php?pagina=([a-z0-9]{1,99})?/'                            =>    '$1' ,
          
      );
  
  
      foreach($rewrites as $bl => $replacement)
      {
          $rep = preg_replace($bl, $replacement, $url);
          if($rep != $url)
          {
              $pagina = $rep;
              break;
          }
      }
  
      /*
      foreach($rewrites as $bl => $pagina)
      {
          if(preg_match($bl, $url, $matches))
          {
              foreach($matches as $id => $valor)
              {
                  $pagina = str_replace('{' . $id . '}', $valor, $pagina);
              }
              break;
          }
      }
      /**/
      
      return $pagina;
      
  }
  
  echo RewriteUrl('index.php?pagina=produto&id=25');
  echo '
  ';
  echo RewriteUrl('index.php?pagina=teste&id=158925');
  echo '
  ';
  echo RewriteUrl('index.php?pagina=empresa.contactos');
  ?>

 

Acredito que dê para optimizar o código, mas como ainda não vou precisar desta função para já vai ficar assim

 

 

A sim...pega o que tá depois do =...e coloca barras depois.

Expressões Regulares são uma boa.

Estude-as...;D

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Faz isso ser padronizado.Não é melhor não?

E nem tinha visto...aconteceu uma coisa muito legal comigo,ai to meio desligado...xD

Compartilhar este post


Link para o post
Compartilhar em outros sites

Faz isso ser padronizado.Não é melhor não?

E nem tinha visto...aconteceu uma coisa muito legal comigo,ai to meio desligado...xD

 

Padronizado? Não estou a entender xP

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ao invés de ter um jeito de escrever a rewrite para cada página,faz um jeito geral e simplesmente segue em todas.

Não me expliquei bem...

Compartilhar este post


Link para o post
Compartilhar em outros sites

ahh exacto mas para já está bom assim =)

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.