Página 1 de 1

URL Amigável - não funciona nos produtos e departamentos

Enviado: 11 Nov 2014, 13:28
por Nosfox
Boa tarde, pessoal!

Encontrei vários tópicos aqui no fórum sobre URLs amigáveis, mas nenhum com um problema igual ao meu.

Já habilitei a URL amigável no admin e renomeei o .htaccess.txt para .htaccess.

Nas páginas comuns, como login, home e checkout, elas estão funcionando normalmente (alterei os link no arquivo seo_url.php). Já para os produtos e departamentos a URL amigável não está funcionando.

Alguém sabe o que pode estar acontecendo?

O site é http://www.mrtenis.com

Informações importantes:
- Tenho certificado SSL instalado (já segui o tutorial aqui do site para a configuração do https).
- Tirei o arquivo php.ini, pois instalei um módulo que usa o IONCUBE e o desenvolvedor recomendou que eu excluísse o arquivo. Mas eu já testei colocar o php.ini original de volta e isso não resolveu o problema.

Agradeço muito a quem puder dar uma olhada.

Um abraço!

Re: URL Amigável - não funciona nos produtos e departamentos

Enviado: 12 Nov 2014, 16:29
por reds
Amigo boa tarde,

Tenha escrito a url para o produto conforme pedido no cadastro do mesmo? ---> na Aba dados > URL amigável
No caso o ficaria .HTACCESS sem o ponto no final.

Re: URL Amigável - não funciona nos produtos e departamentos

Enviado: 12 Nov 2014, 21:33
por Nosfox
Salve, reds! Aparecendo de novo pra dar uma mão aí... valeu!

Eu tinha colocado ponto no .htaccess porque era fim de frase. Mas enfim, descobri o problema.

O arquivo catalog/controller/common/seo_url.php estava escrito de alguma forma que não permitia as URLs amigáveis cadastradas no sistema, alterando apenas as escritas no próprio arquivo (que seriam as comuns, como checkout, conta, e outras). Este arquivo eu peguei no tutorial aqui do site. Acredito que era incompatível com o site em https, mas não tenho certeza.

Procurei um novo arquivo seo_url.php, e juntei com a lista de páginas do que eu utilizava, e tudo está certo agora.

Pra quem quiser, segue o código que estou usando:
Código: Selecionar todos
<?php 
class ControllerCommonSeoUrl extends Controller {
    /* SEO Custom URL */
private $url_list = array(
'common/home' => 'home',
'checkout/cart' => 'carrinho',
'account/register' => 'cadastre-se',
'account/wishlist' => 'lista-de-desejo',
'checkout/checkout' => 'checkout',
'account/logout' => 'sair',
'account/login' => 'login',
'product/special' => 'especial',
'affiliate/account' => 'afiliado',
'checkout/voucher' => 'vale-presente',
'product/manufacturer' => 'fabricante',
'account/newsletter' => 'newsletter',
'account/order' => 'meus-pedidos',
'account/account' => 'minha-conta',
'information/contact' => 'contato',
'information/sitemap' => 'mapa-do-site',
'account/forgotten' => 'lembrar-senha',
'account/download' => 'meus-download',
'account/return' => 'minhas-devolucoes',
'account/transaction' => 'minhas-indicacoes',
'account/password' => 'alterar-senha',
'account/edit' => 'alterar-informacoes',
'account/address' => 'alterar-enderecos',
'account/reward' => 'pontos-de-fidelidade',
);
    /* SEO Custom URL */

public function index() {
    // Add rewrite to url class
    if ($this->config->get('config_seo_url')) {
        $this->url->addRewrite($this);
    }

    // Decode URL
    if (isset($this->request->get['_route_'])) {
        $parts = explode('/', $this->request->get['_route_']);

        foreach ($parts as $part) {
            $query = $this->db->query("SELECT * FROM " . DB_PREFIX . "url_alias WHERE keyword = '" . $this->db->escape($part) . "'");

            if ($query->num_rows) {
                $url = explode('=', $query->row['query']);

                if ($url[0] == 'product_id') {
                    $this->request->get['product_id'] = $url[1];
                }

                if ($url[0] == 'category_id') {
                    if (!isset($this->request->get['path'])) {
                        $this->request->get['path'] = $url[1];
                    } else {
                        $this->request->get['path'] .= '_' . $url[1];
                    }
                }   

                if ($url[0] == 'manufacturer_id') {
                    $this->request->get['manufacturer_id'] = $url[1];
                }

                if ($url[0] == 'information_id') {
                    $this->request->get['information_id'] = $url[1];
                }   
            } else {
                $this->request->get['route'] = 'error/not_found';   
            }
        }
                    /* SEO Custom URL */
                    if ( $_s = $this->setURL($this->request->get['_route_']) ) {
                            $this->request->get['route'] = $_s;
                    }/* SEO Custom URL */

        if (isset($this->request->get['product_id'])) {
            $this->request->get['route'] = 'product/product';
        } elseif (isset($this->request->get['path'])) {
            $this->request->get['route'] = 'product/category';
        } elseif (isset($this->request->get['manufacturer_id'])) {
            $this->request->get['route'] = 'product/manufacturer/info';
        } elseif (isset($this->request->get['information_id'])) {
            $this->request->get['route'] = 'information/information';
        }

        if (isset($this->request->get['route'])) {
            return $this->forward($this->request->get['route']);
        }
    }
}

public function rewrite($link) {
    $url_info = parse_url(str_replace('&', '&', $link));

    $url = ''; 

    $data = array();

    parse_str($url_info['query'], $data);

    foreach ($data as $key => $value) {
        if (isset($data['route'])) {
            if (($data['route'] == 'product/product' && $key == 'product_id') || (($data['route'] == 'product/manufacturer/info' || $data['route'] == 'product/product') && $key == 'manufacturer_id') || ($data['route'] == 'information/information' && $key == 'information_id')) {
                $query = $this->db->query("SELECT * FROM " . DB_PREFIX . "url_alias WHERE `query` = '" . $this->db->escape($key . '=' . (int)$value) . "'");

                if ($query->num_rows) {
                    $url .= '/' . $query->row['keyword'];

                    unset($data[$key]);
                }                   
            } elseif ($key == 'path') {
                $categories = explode('_', $value);

                foreach ($categories as $category) {
                    $query = $this->db->query("SELECT * FROM " . DB_PREFIX . "url_alias WHERE `query` = 'category_id=" . (int)$category . "'");

                    if ($query->num_rows) {
                        $url .= '/' . $query->row['keyword'];
                    }                           
                }

                unset($data[$key]);
            }
                                    /* SEO Custom URL */
                                    if( $_u = $this->getURL($data['route']) ){
                                        $url .= $_u;
                                        unset($data[$key]);
                                    }/* SEO Custom URL */       


        }
    }

    if ($url) {
        unset($data['route']);

        $query = '';

        if ($data) {
            foreach ($data as $key => $value) {
                $query .= '&' . $key . '=' . $value;
            }

            if ($query) {
                $query = '?' . trim($query, '&');
            }
        }

        return $url_info['scheme'] . '://' . $url_info['host'] . (isset($url_info['port']) ? ':' . $url_info['port'] : '') . str_replace('/index.php', '', $url_info['path']) . $url . $query;
    } else {
        return $link;
    }
}   
    /* SEO Custom URL */
    public function getURL($route) {
            if( count($this->url_list) > 0) {
                 foreach ($this->url_list as $key => $value) {
                    if($route == $key) {
                        return '/'.$value;
                    }
                 }
            }
            return false;
    }
    public function setURL($_route) {
            if( count($this->url_list) > 0 ){
                 foreach ($this->url_list as $key => $value) {
                    if($_route == $value) {
                        return $key;
                    }
                 }
            }
            return false;
    }/* SEO Custom URL */
}
?>

Re: URL Amigável - não funciona nos produtos e departamentos

Enviado: 12 Nov 2014, 21:51
por reds
Nosfox escreveu:Salve, reds! Aparecendo de novo pra dar uma mão aí... valeu!

Eu tinha colocado ponto no .htaccess porque era fim de frase. Mas enfim, descobri o problema.

O arquivo catalog/controller/common/seo_url.php estava escrito de alguma forma que não permitia as URLs amigáveis cadastradas no sistema, alterando apenas as escritas no próprio arquivo (que seriam as comuns, como checkout, conta, e outras). Este arquivo eu peguei no tutorial aqui do site. Acredito que era incompatível com o site em https, mas não tenho certeza.

Procurei um novo arquivo seo_url.php, e juntei com a lista de páginas do que eu utilizava, e tudo está certo agora.

Pra quem quiser, segue o código que estou usando:
Código: Selecionar todos
<?php 
class ControllerCommonSeoUrl extends Controller {
    /* SEO Custom URL */
private $url_list = array(
'common/home' => 'home',
'checkout/cart' => 'carrinho',
'account/register' => 'cadastre-se',
'account/wishlist' => 'lista-de-desejo',
'checkout/checkout' => 'checkout',
'account/logout' => 'sair',
'account/login' => 'login',
'product/special' => 'especial',
'affiliate/account' => 'afiliado',
'checkout/voucher' => 'vale-presente',
'product/manufacturer' => 'fabricante',
'account/newsletter' => 'newsletter',
'account/order' => 'meus-pedidos',
'account/account' => 'minha-conta',
'information/contact' => 'contato',
'information/sitemap' => 'mapa-do-site',
'account/forgotten' => 'lembrar-senha',
'account/download' => 'meus-download',
'account/return' => 'minhas-devolucoes',
'account/transaction' => 'minhas-indicacoes',
'account/password' => 'alterar-senha',
'account/edit' => 'alterar-informacoes',
'account/address' => 'alterar-enderecos',
'account/reward' => 'pontos-de-fidelidade',
);
    /* SEO Custom URL */

public function index() {
    // Add rewrite to url class
    if ($this->config->get('config_seo_url')) {
        $this->url->addRewrite($this);
    }

    // Decode URL
    if (isset($this->request->get['_route_'])) {
        $parts = explode('/', $this->request->get['_route_']);

        foreach ($parts as $part) {
            $query = $this->db->query("SELECT * FROM " . DB_PREFIX . "url_alias WHERE keyword = '" . $this->db->escape($part) . "'");

            if ($query->num_rows) {
                $url = explode('=', $query->row['query']);

                if ($url[0] == 'product_id') {
                    $this->request->get['product_id'] = $url[1];
                }

                if ($url[0] == 'category_id') {
                    if (!isset($this->request->get['path'])) {
                        $this->request->get['path'] = $url[1];
                    } else {
                        $this->request->get['path'] .= '_' . $url[1];
                    }
                }   

                if ($url[0] == 'manufacturer_id') {
                    $this->request->get['manufacturer_id'] = $url[1];
                }

                if ($url[0] == 'information_id') {
                    $this->request->get['information_id'] = $url[1];
                }   
            } else {
                $this->request->get['route'] = 'error/not_found';   
            }
        }
                    /* SEO Custom URL */
                    if ( $_s = $this->setURL($this->request->get['_route_']) ) {
                            $this->request->get['route'] = $_s;
                    }/* SEO Custom URL */

        if (isset($this->request->get['product_id'])) {
            $this->request->get['route'] = 'product/product';
        } elseif (isset($this->request->get['path'])) {
            $this->request->get['route'] = 'product/category';
        } elseif (isset($this->request->get['manufacturer_id'])) {
            $this->request->get['route'] = 'product/manufacturer/info';
        } elseif (isset($this->request->get['information_id'])) {
            $this->request->get['route'] = 'information/information';
        }

        if (isset($this->request->get['route'])) {
            return $this->forward($this->request->get['route']);
        }
    }
}

public function rewrite($link) {
    $url_info = parse_url(str_replace('&', '&', $link));

    $url = ''; 

    $data = array();

    parse_str($url_info['query'], $data);

    foreach ($data as $key => $value) {
        if (isset($data['route'])) {
            if (($data['route'] == 'product/product' && $key == 'product_id') || (($data['route'] == 'product/manufacturer/info' || $data['route'] == 'product/product') && $key == 'manufacturer_id') || ($data['route'] == 'information/information' && $key == 'information_id')) {
                $query = $this->db->query("SELECT * FROM " . DB_PREFIX . "url_alias WHERE `query` = '" . $this->db->escape($key . '=' . (int)$value) . "'");

                if ($query->num_rows) {
                    $url .= '/' . $query->row['keyword'];

                    unset($data[$key]);
                }                   
            } elseif ($key == 'path') {
                $categories = explode('_', $value);

                foreach ($categories as $category) {
                    $query = $this->db->query("SELECT * FROM " . DB_PREFIX . "url_alias WHERE `query` = 'category_id=" . (int)$category . "'");

                    if ($query->num_rows) {
                        $url .= '/' . $query->row['keyword'];
                    }                           
                }

                unset($data[$key]);
            }
                                    /* SEO Custom URL */
                                    if( $_u = $this->getURL($data['route']) ){
                                        $url .= $_u;
                                        unset($data[$key]);
                                    }/* SEO Custom URL */       


        }
    }

    if ($url) {
        unset($data['route']);

        $query = '';

        if ($data) {
            foreach ($data as $key => $value) {
                $query .= '&' . $key . '=' . $value;
            }

            if ($query) {
                $query = '?' . trim($query, '&');
            }
        }

        return $url_info['scheme'] . '://' . $url_info['host'] . (isset($url_info['port']) ? ':' . $url_info['port'] : '') . str_replace('/index.php', '', $url_info['path']) . $url . $query;
    } else {
        return $link;
    }
}   
    /* SEO Custom URL */
    public function getURL($route) {
            if( count($this->url_list) > 0) {
                 foreach ($this->url_list as $key => $value) {
                    if($route == $key) {
                        return '/'.$value;
                    }
                 }
            }
            return false;
    }
    public function setURL($_route) {
            if( count($this->url_list) > 0 ){
                 foreach ($this->url_list as $key => $value) {
                    if($_route == $value) {
                        return $key;
                    }
                 }
            }
            return false;
    }/* SEO Custom URL */
}
?>
;) Este arquivo esta muito bom mesmo,vou testar por aqui....
por isto eu tenha gostado a cada dia mais e mais de #Opencart e do fórun
#Obrigado pela partilha amigo :arrow: #Nosfox

Re: URL Amigável - não funciona nos produtos e departamentos

Enviado: 15 Nov 2014, 12:11
por carlos jose
Bom dia ...amigo..vc poderia me passar qual o tema que vc está utilizando....estou com um projeto para abertura de uma loja....
Desde já agradeço sua atenção.. outro detalhe.....a tradução é complicada...
sds
carlos jose

Re: URL Amigável - não funciona nos produtos e departamentos

Enviado: 28 Nov 2014, 14:55
por Nosfox
Carlos Jose, como o tema é pago acho que eu não posso mandar por aqui, te mandei uma MP com o link.

Abraço!