| 1: | <?php
|
| 2: | namespace Opencart\Catalog\Controller\Startup;
|
| 3: | |
| 4: | |
| 5: | |
| 6: | |
| 7: |
|
| 8: | class SeoUrl extends \Opencart\System\Engine\Controller {
|
| 9: | |
| 10: | |
| 11: |
|
| 12: | public function index() {
|
| 13: |
|
| 14: | if ($this->config->get('config_seo_url')) {
|
| 15: | $this->url->addRewrite($this);
|
| 16: |
|
| 17: | $this->load->model('design/seo_url');
|
| 18: |
|
| 19: |
|
| 20: | if (isset($this->request->get['_route_'])) {
|
| 21: | $parts = explode('/', $this->request->get['_route_']);
|
| 22: |
|
| 23: |
|
| 24: | if (oc_strlen(end($parts)) == 0) {
|
| 25: | array_pop($parts);
|
| 26: | }
|
| 27: |
|
| 28: | foreach ($parts as $key => $value) {
|
| 29: | $seo_url_info = $this->model_design_seo_url->getSeoUrlByKeyword($value);
|
| 30: |
|
| 31: | if ($seo_url_info) {
|
| 32: | $this->request->get[$seo_url_info['key']] = html_entity_decode($seo_url_info['value'], ENT_QUOTES, 'UTF-8');
|
| 33: |
|
| 34: | unset($parts[$key]);
|
| 35: | }
|
| 36: | }
|
| 37: |
|
| 38: | if (!isset($this->request->get['route'])) {
|
| 39: | $this->request->get['route'] = $this->config->get('action_default');
|
| 40: | }
|
| 41: |
|
| 42: | if ($parts) {
|
| 43: | $this->request->get['route'] = $this->config->get('action_error');
|
| 44: | }
|
| 45: | }
|
| 46: | }
|
| 47: |
|
| 48: | return null;
|
| 49: | }
|
| 50: |
|
| 51: | |
| 52: | |
| 53: | |
| 54: | |
| 55: | |
| 56: | |
| 57: |
|
| 58: | public function rewrite(string $link): string {
|
| 59: | $url_info = parse_url(str_replace('&', '&', $link));
|
| 60: |
|
| 61: |
|
| 62: | $url = '';
|
| 63: |
|
| 64: | if ($url_info['scheme']) {
|
| 65: | $url .= $url_info['scheme'];
|
| 66: | }
|
| 67: |
|
| 68: | $url .= '://';
|
| 69: |
|
| 70: | if ($url_info['host']) {
|
| 71: | $url .= $url_info['host'];
|
| 72: | }
|
| 73: |
|
| 74: | if (isset($url_info['port'])) {
|
| 75: | $url .= ':' . $url_info['port'];
|
| 76: | }
|
| 77: |
|
| 78: | parse_str($url_info['query'], $query);
|
| 79: |
|
| 80: |
|
| 81: | $paths = [];
|
| 82: |
|
| 83: |
|
| 84: | $parts = explode('&', $url_info['query']);
|
| 85: |
|
| 86: | foreach ($parts as $part) {
|
| 87: | $pair = explode('=', $part);
|
| 88: |
|
| 89: | if (isset($pair[0])) {
|
| 90: | $key = (string)$pair[0];
|
| 91: | }
|
| 92: |
|
| 93: | if (isset($pair[1])) {
|
| 94: | $value = (string)$pair[1];
|
| 95: | } else {
|
| 96: | $value = '';
|
| 97: | }
|
| 98: |
|
| 99: | $result = $this->model_design_seo_url->getSeoUrlByKeyValue((string)$key, (string)$value);
|
| 100: |
|
| 101: | if ($result) {
|
| 102: | $paths[] = $result;
|
| 103: |
|
| 104: | unset($query[$key]);
|
| 105: | }
|
| 106: | }
|
| 107: |
|
| 108: | $sort_order = [];
|
| 109: |
|
| 110: | foreach ($paths as $key => $value) {
|
| 111: | $sort_order[$key] = $value['sort_order'];
|
| 112: | }
|
| 113: |
|
| 114: | array_multisort($sort_order, SORT_ASC, $paths);
|
| 115: |
|
| 116: |
|
| 117: | $url .= str_replace('/index.php', '', $url_info['path']);
|
| 118: |
|
| 119: | foreach ($paths as $result) {
|
| 120: | $url .= '/' . $result['keyword'];
|
| 121: | }
|
| 122: |
|
| 123: |
|
| 124: | if ($query) {
|
| 125: | $url .= '?' . str_replace(['%2F'], ['/'], http_build_query($query));
|
| 126: | }
|
| 127: |
|
| 128: | return $url;
|
| 129: | }
|
| 130: | }
|
| 131: | |