URL amigaveis

Boa tarde, Brother,

Estou com um pequeno problema, no meu site gostaria que a minha url ficasse www.exemplo.com.br/pagina/nome-do-produto/ alguem poderia me ajudar neste caso, sei que tem que usar o slug, mas eu nao estou conseguindo.

Uma outra duvida é as minha views esta dentro da pasta site, e para carregar cada pagina eu tenho que colocar o link site/pagina entao na url fica www.exemplo.com.br/site/pagina/nome-do-produto/, entao como faz para tirar da url o diretorio site, tentei colocar no root da pasta views mas retorna erro, tem alguma configuraçao que poderia fazer?

Valews

Da ma olhada aqui: http://www.yiiframework.com/doc/cookbook/53/

Acabei esqueçendo da outra resposta.

No caso, site é seu controller, pra ficar com outro nome, vc tem que criar u outro controller.

Cria um crud como esplicado aquie veja o código que o Yii gerou automaticamente que vc vai ter uma noção bem melhor, ou vc pode seguir o tutorial de criação da aplicação de blogdo exemplo.

Daniel,

Ha parte do controller eu entendi so que o meu caso seria o seguinte:

views/

layout/

site/

 index.php


 quemsomos.php


 mapadelocalizacao.php


 ...

Entao gostaria que o link ficasse assim www.meusite.com.br/ quemsomos / e não www.meusite.com.br/ site /quemsomos/

Caso tenha entendido poderia posta aqui como posso fazer isso em relaçao as configuraçao do yii.

Obrigado

Olá Edson,

As URL do Yii funciona assim.

www.seusite.com.br/<controller>/<view>/

Se atualmente o seu sistema está mostrando: www.meusite.com.br/site/quemsomos/

Então ele ta lendo o <controller> -> SiteController.php, e a <view> -> site/quemsomos.php

controllers/

SiteController.php

views/

site/

quemsomos.php

Para você deixar de um modo que deseja, vou explicar meio por cima. Pode ser que eu esteja equivocado, mais vamos lá.

Como expliquei como funciona as URL (www.seusite.com.br/<controller>/<view>/)

Então as pasta e/ou arquivos correta será:

controllers/

QuemsomosController.php

views/

quemsomos/

  index.php

Normalmente é assim que funciona.

Ai dentro do seu controller(QuemsomosController), ficaria assim.


class QuemsomosController extends Controller {


    public function actionIndex() {

        $this->render('index');

    }


}

Espero ter ajudado um pouco.

Att.,

Newerton Vargas de Araújo

O que ele quer, é manter um só controller e chamar uma determinda action de um determinado controller sem ter que explicitamente colocar o nome do controller na url. Eu até entendi, mas não achei nenhuma forma de fazer isso …

Talvez sobreescrevendo umas classes no core, mas, como nosso amigo Newerton disse, esse não é o comportamento padrão do fw.

Mas, eu ví estes dias isso aqui:

http://www.yiiframework.com/doc/api/CWebApplication#controllerMap-detail

Eu nunca usei, mas talvez ajude a fazer o que vc precisa. Basicamente vc vai criar controllers "virtuais" apontando pro mesmo controller que vc precisa, deixando como se fosse vários controllers com o mesmo nome.

Acho que vale uma tentativa pra ver se da certo.

Na realidade a URL é gerada com:

www.seusite.com.br/<controller>/<action>/

no caso dele: www.meusite.com.br/site/quemsomos/

ele tem um controller ‘SITE’ e uma funcao chamada ‘actionQuemSomos’

http://www.yiiframework.com/doc/guide/1.1/en/topics.url

Aproveitando o assunto…

Tenho uma URL assim:


http://localhost/meusite/index.php/site/contact

Como que eu faria para deixa-la sem o index.php?


http://localhost/meusite/site/contact

Opa, Consegui fazer :D

Apenas, criei um arquivo .htaccess dentro da pasta do meu site, com o seguinte conteudo.


RewriteEngine on


# if a directory or a file exists, use it directly

RewriteCond %{REQUEST_FILENAME} !-f

RewriteCond %{REQUEST_FILENAME} !-d


# otherwise forward it to index.php

RewriteRule . index.php

Fonte: http://www.yiiframework.com/doc/guide/1.1/en/topics.url#hiding-x-23x

protected/config/main.php

'urlManager'=&gt;array(


	'urlFormat'=&gt;'path',


	'showScriptName'=&gt;false, //RETIRA O index.php, precisa ter o mod_rewrite habilitado no Apache e o .htaccess


     ),

Para URL alternativas eu usei

	'rules'=&gt;array(


		'~&lt;view:&#092;w+&gt;'=&gt;'site/page', //~empresa por exemplo /site/page/empresa.php


		'capa'=&gt; 'site/contact',


		'detalhes-&lt;id:&#092;d+&gt;/&lt;titulo_capa:.*?&gt;'=&gt; 'site/produtos/detalhes',


		'sobre-a-empresa'=&gt; 'site/empresa/index',


		'marcas-&lt;id:&#092;d+&gt;/&lt;nome:.*?&gt;'=&gt; 'site/produtos/marcas',


		'selecao-de-produtos'=&gt; 'site/produtos/destaques',


		'conheca-nossos-produtos'=&gt; 'site/produtos/index',


		'entre-em-contato'=&gt; 'site/contato/index',


		'&lt;controller:&#092;w+&gt;/&lt;action:&#092;w+&gt;'=&gt;'&lt;controller&gt;/&lt;action&gt;',	//para funcionar o padrao	


	)

Ps. Estou aprendendo ainda

Mas funcionou acima