*/ private array $data = []; /** * Index * * @return null */ public function index() { // Add rewrite to URL class if ($this->config->get('config_seo_url')) { $this->url->addRewrite($this); $this->load->model('design/seo_url'); // Decode URL if (isset($this->request->get['_route_'])) { $parts = explode('/', $this->request->get['_route_']); // remove any empty arrays from trailing if (oc_strlen(end($parts)) == 0) { array_pop($parts); } foreach ($parts as $key => $value) { $seo_url_info = $this->model_design_seo_url->getSeoUrlByKeyword($value); if ($seo_url_info) { $this->request->get[$seo_url_info['key']] = html_entity_decode($seo_url_info['value'], ENT_QUOTES, 'UTF-8'); unset($parts[$key]); } } if (!isset($this->request->get['route'])) { $this->request->get['route'] = $this->config->get('action_default'); } if ($parts) { $this->request->get['route'] = $this->config->get('action_error'); } } } return null; } /** * Rewrite * * @param string $link * * @return string */ public function rewrite(string $link): string { $url_info = parse_url(str_replace('&', '&', $link)); // Build the url $url = ''; if ($url_info['scheme']) { $url .= $url_info['scheme']; } $url .= '://'; if ($url_info['host']) { $url .= $url_info['host']; } if (isset($url_info['port'])) { $url .= ':' . $url_info['port']; } parse_str($url_info['query'], $query); $language_id = $this->config->get('config_language_id'); // Start changing the URL query into a path $paths = []; // Parse the query into its separate parts $parts = explode('&', $url_info['query']); foreach ($parts as $part) { $pair = explode('=', $part); if (isset($pair[0])) { $key = (string)$pair[0]; } if (isset($pair[1])) { $value = (string)$pair[1]; } else { $value = ''; } $index = $key . '=' . $value; if (!isset($this->data[$language_id][$index])) { $this->data[$language_id][$index] = $this->model_design_seo_url->getSeoUrlByKeyValue((string)$key, (string)$value); } if ($this->data[$language_id][$index]) { $paths[] = $this->data[$language_id][$index]; unset($query[$key]); } } $sort_order = []; foreach ($paths as $key => $value) { $sort_order[$key] = $value['sort_order']; } array_multisort($sort_order, SORT_ASC, $paths); // Build the path $url .= str_replace('/index.php', '', $url_info['path']); foreach ($paths as $result) { $url .= '/' . $result['keyword']; } // Rebuild the URL query if ($query) { $url .= '?' . str_replace(['%2F'], ['/'], http_build_query($query)); } return $url; } }