@kamisarlapsha

Как сделать правильный url в Opencart 2.3?

Привет! Я добавил в контроллере manufacturer.php новую функцию types.
В результате у меня такой url:
сейчас такой url
site.com/index.php?route=product/manufacturer/types&manufact_id=11


Вопрос в том, как я могу сделать url следующего типа:
должен быть такой url
site.com/название-производителя/types

Заранее спасибо
  • Вопрос задан
  • 1013 просмотров
Решения вопроса 1
@kamisarlapsha Автор вопроса
Не знаю насколько правильно. Теперь страница открывается по /тут-производитель/types&manufact_id=11
но не открывается вот так /index.php?route=product/manufacturer/types&manufact_id=11
И открывается ещё так /types?manufact_id=11
Получился костыль ?

в таблицу oc_url_alias добавляем новую запись product/manufacturer/types(это новая страница) types(это новая страница)

Потом в 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);
			}
//Дальше остальной код
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы
CTRL+ Москва
от 250 000 до 320 000 ₽
CTRL+ Москва
от 200 000 до 300 000 ₽
CTRL+ Белград
от 250 000 до 320 000 ₽
22 нояб. 2024, в 02:56
10000 руб./за проект
22 нояб. 2024, в 00:55
500 руб./за проект
21 нояб. 2024, в 23:30
300000 руб./за проект