K
K
kamisarlapsha2019-07-05 15:54:55
opencart
kamisarlapsha, 2019-07-05 15:54:55

How to make correct url in Opencart 2.3?

Hey! I added a manufacturer.phpnew function types in the controller.
As a result, I have this url:

now this url
site.com/index.php?route=product/manufacturer/types&manufact_id=11

The question is how can I make a url like this:
should be like this url
site.com/название-производителя/types

Thanks in advance

Answer the question

In order to leave comments, you need to log in

3 answer(s)
K
kamisarlapsha, 2019-07-05
@kamisarlapsha

I don't know how correct. Now the page opens at /here-manufacturer/types&manufact_id=11
but doesn't open like this /index.php?route=product/manufacturer/types&manufact_id=11
And it also opens like this /types?manufact_id=11
Got a crutch?
add a new entry to the oc_url_alias table product/manufacturer/types(this is a new page) types(this is a new page)
Then in seo_url.php:

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_']);
            
      // remove any empty arrays from trailing
      if (utf8_strlen(end($parts)) == 0) {
        array_pop($parts);
      }

      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] == 'manufact_id') {
            $this->request->get['manufact_id'] = $url[1];
          }
//Конец добавленного------------------------------------------------------------------------------------------------------------
          if ($url[0] == 'information_id') {
            $this->request->get['information_id'] = $url[1];
          }

          if ($query->row['query'] && $url[0] != 'information_id' && $url[0] != 'manufacturer_id' && $url[0] != 'category_id' && $url[0] != 'product_id') {
            $this->request->get['route'] = $query->row['query'];
          }
        } else {
          $this->request->get['route'] = 'error/not_found';

          break;
        }
      }

      if (!isset($this->request->get['route'])) {
        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['manufact_id'])) {
          $this->request->get['route'] = 'product/manufacturer/types';
        } 
//Конец добавленного------------------------------------------------------------------------------------------------------------
elseif (isset($this->request->get['information_id'])) {
          $this->request->get['route'] = 'information/information';
        }
      }

      if (isset($this->request->get['route'])) {
        return new Action($this->request->get['route']);
      }
      
      // Redirect 301	
    } elseif (isset($this->request->get['route']) && empty($this->request->post) && !isset($this->request->get['token']) && $this->config->get('config_seo_url')) {
      $arg = '';
      $cat_path = false;
      if ($this->request->get['route'] == 'product/product' && isset($this->request->get['product_id'])) {
        $query = $this->db->query("SELECT * FROM " . DB_PREFIX . "url_alias WHERE `query` = 'product_id=" . (int)$this->request->get['product_id'] . "'");	
        if ($query->num_rows && $query->row['keyword'] /**/ ) {
          $this->request->get['route'] = 'product_id=' . $this->request->get['product_id'];
        }
      } elseif ($this->request->get['route'] == 'product/category' && isset($this->request->get['path'])) {
        $categorys_id = explode('_', $this->request->get['path']);
        $cat_path = '';
        foreach ($categorys_id as $category_id) {
          $query = $this->db->query("SELECT * FROM " . DB_PREFIX . "url_alias WHERE `query` = 'category_id=" . (int)$category_id . "'");	
          if ($query->num_rows && $query->row['keyword'] /**/ ) {
            $cat_path .= '/' . $query->row['keyword'];
          } else {
            $cat_path = false;
            break;
          }
        }
        $arg = trim($cat_path, '/');
        if (isset($this->request->get['page'])) $arg = $arg . '?page=' . (int)$this->request->get['page'];
      } elseif ($this->request->get['route'] == 'product/manufacturer/info' && isset($this->request->get['manufacturer_id'])) {
        $this->request->get['route'] = 'manufacturer_id=' . $this->request->get['manufacturer_id'];
        if (isset($this->request->get['page'])) $arg = $arg . '?page=' . (int)$this->request->get['page'];
      }
//Добавил это------------------------------------------------------------------------------------------------------------
  elseif ($this->request->get['route'] == 'product/manufacturer/types' && isset($this->request->get['manufact_id'])) {
                
        $this->request->get['route'] = 'manufact_id=' . $this->request->get['manufact_id'];
        if (isset($this->request->get['page'])) $arg = $arg . '?page=' . (int)$this->request->get['page'];
                
      } 
//Конец добавленного ------------------------------------------------------------------------------------------------------------
elseif ($this->request->get['route'] == 'information/information' && isset($this->request->get['information_id'])) {
        $this->request->get['route'] = 'information_id=' . $this->request->get['information_id'];
      } elseif (sizeof($this->request->get) > 1) {
        $args = '?' . str_replace("route=" . $this->request->get['route'].'&', "", $this->request->server['QUERY_STRING']);
        $arg = str_replace('&', '&', $args);
      }
//Дальше остальной код

V
Vladimir Skibin, 2017-09-20
@megafax

RewriteCond %{QUERY_STRING} PAGEN_1=1(&.*|)$
RewriteRule (.*) /$1? [R=301,L]

So ?

E
Exploding, 2017-09-20
@Exploding

Well, there are several ways, simpler and more correct than redirects.
1. Remove get parameters from the first pagination page. The first is the first in Africa.
2. Simply write a canonical version of the page and forget about redirects.
Upd. And in general, ideally, there should be one redirect within one url. So I recommend checking this nuance! Because the one whose name cannot be called does not like to jump back and forth like a mountain goat :)

Didn't find what you were looking for?

Ask your question

Ask a Question

731 491 924 answers to any question