← Desenvolvimento

Dúvida CMS's

Lida 8535 vezes

Offline

zegomes 
Membro
Mensagens 724 Gostos 0
Feedback +9

Troféus totais: 21
Trófeus: (Ver todos)
Super Combination Combination Topic Starter Poll Voter Level 4 Level 3 Level 2 Level 1 500 Posts 100 Posts

Boas,

Alguém me sabe explicar como CMS's como wordpress, joomla, etc, apesar de na raiz não existir o template que temos activado, como é que conseguem mostrar o conteúdo do website com o tal tema.

Não sei bem se me expliquei bem, é um bocado difícil me expressar sobre isto. Queria só ter uma base do que se passa para isto acontecer.

Obrigado,
Offline

baixinho 
Membro
Mensagens 337 Gostos 17
Feedback +2

Troféus totais: 20
Trófeus: (Ver todos)
Super Combination Combination Topic Starter Level 4 Level 3 Level 2 Level 1 100 Posts 50 Posts 10 Posts

Atenção que posso estar enganado, se estiver estejam à vontade para corrigir.

Imagina que tens no código do cms a função listarnoticia que o que faz é listar as noticias, depois nos templates o que fazes é chamar a função listarnoticia.
Offline

zegomes 
Membro
Mensagens 724 Gostos 0
Feedback +9

Troféus totais: 21
Trófeus: (Ver todos)
Super Combination Combination Topic Starter Poll Voter Level 4 Level 3 Level 2 Level 1 500 Posts 100 Posts

Atenção que posso estar enganado, se estiver estejam à vontade para corrigir.

Imagina que tens no código do cms a função listarnoticia que o que faz é listar as noticias, depois nos templates o que fazes é chamar a função listarnoticia.

Expressei-me mal. A dúvida mesmo é: Eu digito: www.site.com/artigo/titulo_do_artigo

Esse ficheiro não existe, na raiz muito menos... mas ele sabe o que mostrar e com que template mostrar.
Offline

asturmas 
Administrador
Mensagens 19734 Gostos 49
Feedback +2

Troféus totais: 39
Trófeus: (Ver todos)
Mobile User Windows User Super Combination Combination Topic Starter 100 Poll Votes 50 Poll Votes 10 Poll Votes Poll Voter Poll Starter

Trata-se do mod_rewrite (em servidores apache). Podes ter umas luzes lendo por exemplo http://www.workingwith.me.uk/articles/scripting/mod_rewrite
Offline

Telmo Marques 
Membro
Mensagens 31 Gostos 0
Troféus totais: 13
Trófeus: (Ver todos)
Super Combination Combination Topic Starter Poll Voter Level 2 Level 1 10 Posts First Post Karma Fourth year Anniversary

Como já foi bem dito pelo asturmas isso é mod_rewrite (em apache), ou URL Rewrite (em IIS)

Consegues também encontrar mais informações no google com os seguintes termos:

Pretty URL
Friendly URL
Offline

zegomes 
Membro
Mensagens 724 Gostos 0
Feedback +9

Troféus totais: 21
Trófeus: (Ver todos)
Super Combination Combination Topic Starter Poll Voter Level 4 Level 3 Level 2 Level 1 500 Posts 100 Posts

Estou a perceber como usar isso perfeitamente, mas apenas restou uma dúvida. Para fazer esse rewrites dos url's não tem de existir na mesma o ficheiro que o utilizador pediu ao servidor?

Os cms's cada vez que criamos uma página ou um post criam algum ficheiro para isto funcionar? Porque as explicações sobre o mod_rewrite mostram-me sempre que o utilizador acede a algo que existe.
Offline

asturmas 
Administrador
Mensagens 19734 Gostos 49
Feedback +2

Troféus totais: 39
Trófeus: (Ver todos)
Mobile User Windows User Super Combination Combination Topic Starter 100 Poll Votes 50 Poll Votes 10 Poll Votes Poll Voter Poll Starter

Estou a perceber como usar isso perfeitamente, mas apenas restou uma dúvida. Para fazer esse rewrites dos url's não tem de existir na mesma o ficheiro que o utilizador pediu ao servidor?

Os cms's cada vez que criamos uma página ou um post criam algum ficheiro para isto funcionar? Porque as explicações sobre o mod_rewrite mostram-me sempre que o utilizador acede a algo que existe.
Não. É o rewrite que "virtualmente" serve os urls pedidos. As pastas/ficheiros não existem na realidade.
Offline

fhanity 
Membro
Mensagens 191 Gostos 5
Feedback +1

Troféus totais: 18
Trófeus: (Ver todos)
Apple User Apple User Super Combination Combination Topic Starter Level 3 Level 2 Level 1 100 Posts 50 Posts

Estou a perceber como usar isso perfeitamente, mas apenas restou uma dúvida. Para fazer esse rewrites dos url's não tem de existir na mesma o ficheiro que o utilizador pediu ao servidor?

Os cms's cada vez que criamos uma página ou um post criam algum ficheiro para isto funcionar? Porque as explicações sobre o mod_rewrite mostram-me sempre que o utilizador acede a algo que existe.

Todos os artigos que crias, por exemplo no wordpress não são ficheiros, sao entradas na base de dados e quando usas o tal pedido através de um friendly url, o que ele vai buscar é o ID desse artigo e serve através do single.php (no caso dos artigos) supondo que tens 3 artigos, o single.php?ID=1 single.php?ID=2 single.php?ID=3. o ficheiro é sempre o mesmo, os parametros é que são diferentes. julgo que seja isto que estejas a procura
Offline

zegomes 
Membro
Mensagens 724 Gostos 0
Feedback +9

Troféus totais: 21
Trófeus: (Ver todos)
Super Combination Combination Topic Starter Poll Voter Level 4 Level 3 Level 2 Level 1 500 Posts 100 Posts

Exato, tem lógica mas não é aí que quero chegar, acho.

Pegando no pplware:

http://pplware.sapo.pt/sobre-nos/
http://pplware.sapo.pt/apple/
http://pplware.sapo.pt/apple/discovr-uma-forma-nova-de-descobrir-musicas-no-seu-iphone/

Acedemos com 3 objectivos diferentes e nos 3 ele sabe sempre se é uma página, um post ou apenas para filtrar categoria.

Se calhar já todos perceberam menos eu... não sei se me escapou algo  :superlol:
Offline

Telmo Marques 
Membro
Mensagens 31 Gostos 0
Troféus totais: 13
Trófeus: (Ver todos)
Super Combination Combination Topic Starter Poll Voter Level 2 Level 1 10 Posts First Post Karma Fourth year Anniversary

Exato, tem lógica mas não é aí que quero chegar, acho.

Pegando no pplware:

http://pplware.sapo.pt/sobre-nos/
http://pplware.sapo.pt/apple/
http://pplware.sapo.pt/apple/discovr-uma-forma-nova-de-descobrir-musicas-no-seu-iphone/

Acedemos com 3 objectivos diferentes e nos 3 ele sabe sempre se é uma página, um post ou apenas para filtrar categoria.

Se calhar já todos perceberam menos eu... não sei se me escapou algo  :superlol:

Nesse caso o URL tem que seguir um formato específico, eu não sei os detalhes concretos dessa implementação mas poderá ser algo do género:

1. Se o URL tem 1 recurso apenas, é página ou categoria
2. Se o URL tem 2 recursos, é um post

Pegando neste exemplo:
http://pplware.sapo.pt/apple/discovr-uma-forma-nova-de-descobrir-musicas-no-seu-iphone/

O primeiro recurso é a categoria (apple), e o segundo o post (discovr-uma-forma-nova-de-descobrir-musicas-no-seu-iphone). Recorrendo a mod_rewrite, estes dois recursos são passados como parâmetros para um controller responsável por tratar esta informação, no formato que pode ser por exemplo:

controller.php?cat=apple&post=discovr-uma-forma-nova-de-descobrir-musicas-no-seu-iphone

Daqui é só fazer a query à base de dados utilizando a informação passada por parâmetro. Neste caso tem que existir na base de dados algo que relacione "discovr-uma-forma-nova-de-descobrir-musicas-no-seu-iphone" com o artigo em questão.

EDIT: Ou seja, o único ficheiro que existe é o "controller.php", os recursos do URL são transformados em parâmetros passados a este ficheiro.
Offline

zegomes 
Membro
Mensagens 724 Gostos 0
Feedback +9

Troféus totais: 21
Trófeus: (Ver todos)
Super Combination Combination Topic Starter Poll Voter Level 4 Level 3 Level 2 Level 1 500 Posts 100 Posts

Nesse caso o URL tem que seguir um formato específico, eu não sei os detalhes concretos dessa implementação mas poderá ser algo do género:

1. Se o URL tem 1 recurso apenas, é página ou categoria
2. Se o URL tem 2 recursos, é um post

Pegando neste exemplo:
http://pplware.sapo.pt/apple/discovr-uma-forma-nova-de-descobrir-musicas-no-seu-iphone/

O primeiro recurso é a categoria (apple), e o segundo o post (discovr-uma-forma-nova-de-descobrir-musicas-no-seu-iphone). Recorrendo a mod_rewrite, estes dois recursos são passados como parâmetros para um controller responsável por tratar esta informação, no formato que pode ser por exemplo:

controller.php?cat=apple&post=discovr-uma-forma-nova-de-descobrir-musicas-no-seu-iphone

Daqui é só fazer a query à base de dados utilizando a informação passada por parâmetro. Neste caso tem que existir na base de dados algo que relacione "discovr-uma-forma-nova-de-descobrir-musicas-no-seu-iphone" com o artigo em questão.

Estou a ver... então duplicava a funcionalidade se distingui-se os objectivos. Por exemplo, "site.com/page/xtpo", "site.com/post/xtpo" e "site.com/category/xtpo". E recorrendo ao mod_rewrite, facilmente redireccionava para onde queria. Só falta dar uma pesquisa para ele redireccionar sem alterar o url que foi digitado.

EDIT: E redireccionava para um ficheiro page.php, post.php e category.php

Acho que já cheguei lá  :-P

 :obrigado:
Offline

Telmo Marques 
Membro
Mensagens 31 Gostos 0
Troféus totais: 13
Trófeus: (Ver todos)
Super Combination Combination Topic Starter Poll Voter Level 2 Level 1 10 Posts First Post Karma Fourth year Anniversary

Estou a ver... então duplicava a funcionalidade se distingui-se os objectivos. Por exemplo, "site.com/page/xtpo", "site.com/post/xtpo" e "site.com/category/xtpo". E recorrendo ao mod_rewrite, facilmente redireccionava para onde queria. Só falta dar uma pesquisa para ele redireccionar sem alterar o url que foi digitado.

EDIT: E redireccionava para um ficheiro page.php, post.php e category.php

Acho que já cheguei lá  :-P

 :obrigado:

Por questões de SEO é preferível manter o URL original ao invés de redireccionar para um outro ficheiro. Podes aproveitar o controller.php para simplesmente fazer output do conteúdo, em vez de redireccionar :)
Offline

zegomes 
Membro
Mensagens 724 Gostos 0
Feedback +9

Troféus totais: 21
Trófeus: (Ver todos)
Super Combination Combination Topic Starter Poll Voter Level 4 Level 3 Level 2 Level 1 500 Posts 100 Posts

Por questões de SEO é preferível manter o URL original ao invés de redireccionar para um outro ficheiro. Podes aproveitar o controller.php para simplesmente fazer output do conteúdo, em vez de redireccionar :)

Sim o que quis dizer foi tratar a informação em ficheiros diferentes, mas o url mantém-se como explicaste. Penso que é mais simples tratar cada um dos objectivos em diferentes ficheiros do que tudo só num, mas o que eu tinha de perceber já percebi!  :grin:
Offline

zegomes 
Membro
Mensagens 724 Gostos 0
Feedback +9

Troféus totais: 21
Trófeus: (Ver todos)
Super Combination Combination Topic Starter Poll Voter Level 4 Level 3 Level 2 Level 1 500 Posts 100 Posts

Para próximas pessoas com as mesmas dúvidas fica aqui o que usei e parece funcionar sem problemas:

Código: [Seleccione]
RewriteEngine On
RewriteRule ^post/([^~,]+) post.php?id=$1

RewriteEngine On
RewriteRule ^page/([^~,]+) page.php?id=$1

RewriteEngine On
RewriteRule ^category/([^~,]+) category.php?id=$1

Com isto acedesse como foi dito acima: "site.com/post/nome-do-post".

Apesar de me estar a funcionar, se algo não estiver correcto apitem  :)
Offline

Telmo Marques 
Membro
Mensagens 31 Gostos 0
Troféus totais: 13
Trófeus: (Ver todos)
Super Combination Combination Topic Starter Poll Voter Level 2 Level 1 10 Posts First Post Karma Fourth year Anniversary

Para próximas pessoas com as mesmas dúvidas fica aqui o que usei e parece funcionar sem problemas:

Código: [Seleccione]
RewriteEngine On
RewriteRule ^post/([^~,]+) post.php?id=$1

RewriteEngine On
RewriteRule ^page/([^~,]+) page.php?id=$1

RewriteEngine On
RewriteRule ^category/([^~,]+) category.php?id=$1

Com isto acedesse como foi dito acima: "site.com/post/nome-do-post".

Apesar de me estar a funcionar, se algo não estiver correcto apitem  :)

Só uma última dica: podes indicar o "RewriteEngine On" apenas uma vez no inicio do ficheiro :)