admin Опубликовано 12 марта, 2022 Поделиться Опубликовано 12 марта, 2022 Делаем краткие ЧПУ адреса с полноценные хлебными крошками Из коробки OcStore создает ЧПУ с вложенностью, например: Страница категории: сайт/категория/подкатегория/...и т.д. Страница товара: сайт/категория/подкатегория/товар В SEOPRO есть настройка, которая позволяет делать ЧПУ товара прямым без подкатегорий - сайт/товар Но для категорий нет такой настройки и проходится делать доработку что бы ссылка на категория была сайт/конечная-категория без вложенности промежуточных категорий. Как это сделать что бы хлебные крошки были полные а ссылка короткая? Первое, переходим в catalog/controller/common/seopro.php (catalog/controller/startup/seopro.php) и строки foreach ($categories as $category) { $queries[] = 'category_id=' . $category; } надо заменить на $queries[] = 'category_id=' . end($categories); После чего у нас ЧПУ станет коротким, в котором будет только последняя категория. Однако, при таком подходе поломаются хлебные крошки, в которых пропадет полный путь к категории. Для того что бы сделать полные хлебные крошки, нам надо позаимствовать один метод из seopro. Для этого открываем файл - контроллер категории catalog/caontroller/product/category.php где вставляем метод формирования правильного пути к категории: private function getPathByCategory($category_id) { $category_id = (int)$category_id; if ($category_id < 1) return false; static $path = null; if (!isset($path)) { $path = $this->cache->get('category.seopath'); if (!isset($path)) $path = array(); } if (!isset($path[$category_id])) { $max_level = 10; $sql = "SELECT CONCAT_WS('_'"; for ($i = $max_level-1; $i >= 0; --$i) { $sql .= ",t$i.category_id"; } $sql .= ") AS path FROM " . DB_PREFIX . "category t0"; for ($i = 1; $i < $max_level; ++$i) { $sql .= " LEFT JOIN " . DB_PREFIX . "category t$i ON (t$i.category_id = t" . ($i-1) . ".parent_id)"; } $sql .= " WHERE t0.category_id = '" . $category_id . "'"; $query = $this->db->query($sql); $path[$category_id] = $query->num_rows ? $query->row['path'] : false; $this->cache->set('category.seopath', $path); } return $path[$category_id]; } После чего находим в этом же файле строку $parts = explode('_', (string)$this->request->get['path']); И заменяем на $parts = explode('_', $this->getPathByCategory($this->request->get['path'])); Таким образом у нас ссылка будет только с последней категорией а хлебные крошки полные. 0 Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения
Присоединяйтесь к обсуждению
Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.