Перейти до вмісту
Пошук в
  • Детальніше...
Шукати результати, які ...
Шукати результати в ...

ЧПУ работает не везде


EIKA

Recommended Posts

OC 2302.

 

Родное ЧПУ работает в каталоге, в Информации, но не работает в автогенерируемых страницах, таких как

 

/index.php?route=information/contact

/index.php?route=information/sitemap

И так далее.

 

Есть способ это решить, кроме как руками изобретать новые правила через mod_rewrite?

Змінено користувачем EIKA
Надіслати
Поділитися на інших сайтах


  • 1 year later...

Проблему можно решить дописав код в файле  catalog\controller\common\seo_url.php в методе rewrite()

(добавленный код выделен белым цветом):

    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 && $query->row['keyword']) {
                  $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 && $query->row['keyword']) {
                     $url .= '/' . $query->row['keyword'];
                  } else {
                     $url = '';

                     break;
                  }
               }

               unset($data[$key]);
            }
//-------------- Если маршрут до этого не был найден, то поищем его в таблице url_alias -----------
            else {
                    $query = $this->db->query("SELECT * FROM " . DB_PREFIX . "url_alias WHERE `query` = '" . $this->db->escape($data['route']) . "'");
                    //В отличие от условия выше мы не делаем проверку на непустое значение(&& $query->row['keyword'])
                    //а значит мы обработаем и маршрут главной страницы common/home (у которой keyword='')
                    if ($query->num_rows){
                        $url .= '/' . $query->row['keyword'];
                    } else {
                        $url = '';
                    }

                }
//---------------------------------------------
         }
      }

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

         $query = '';

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

            if ($query) {
               $query = '?' . str_replace('&', '&', 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;
      }
   }
}
Змінено користувачем neozalex
Надіслати
Поділитися на інших сайтах


Створіть аккаунт або увійдіть для коментування

Ви повинні бути користувачем, щоб залишити коментар

Створити обліковий запис

Зареєструйтеся для отримання облікового запису. Це просто!

Зареєструвати аккаунт

Вхід

Уже зареєстровані? Увійдіть тут.

Вхід зараз
  • Зараз на сторінці   0 користувачів

    • Ні користувачів, які переглядиють цю сторінку
×
×
  • Створити...

Important Information

На нашому сайті використовуються файли cookie і відбувається обробка деяких персональних даних користувачів, щоб поліпшити користувальницький інтерфейс. Щоб дізнатися для чого і які персональні дані ми обробляємо перейдіть за посиланням . Якщо Ви натиснете «Я даю згоду», це означає, що Ви розумієте і приймаєте всі умови, зазначені в цьому Повідомленні про конфіденційність.