Из коробки OcStore создает ЧПУ с вложенностью, например:
Но для категорий нет такой настройки и проходится делать доработку что бы ссылка на категорию была сайт/конечная-категория без вложенности и промежуточных категорий.
Как это сделать что бы хлебные крошки были полные а ссылка короткая?
Первое, переходим в catalog/controller/common/seopro.php (catalog/controller/startup/seopro.php, system/library/seopro.php) и строки
надо заменить на
После чего у нас ЧПУ станет коротким, в котором будет только последняя категория. Однако, при таком подходе ломаются хлебные крошки, в которых пропадает полный путь к категории. Для того что бы сделать полные хлебные крошки, нам надо позаимствовать один метод из seopro.
Для этого открываем файл - catalog/controller/product/category.php где вставляем метод формирования правильного пути к категории:
После чего находим в этом же файле строку
И заменяем на
Таким образом у нас ссылка будет только с последней категорией а хлебные крошки полные.
Информация взята тут
- Страница категории: сайт/категория/подкатегория1/подкатегория2/...и т.д.
- Страница товара: сайт/категория/подкатегория/товар
Но для категорий нет такой настройки и проходится делать доработку что бы ссылка на категорию была сайт/конечная-категория без вложенности и промежуточных категорий.
Как это сделать что бы хлебные крошки были полные а ссылка короткая?
Первое, переходим в catalog/controller/common/seopro.php (catalog/controller/startup/seopro.php, system/library/seopro.php) и строки
PHP:
foreach ($categories as $category) {
$queries[] = 'category_id=' . $category;
}
PHP:
$queries[] = 'category_id=' . end($categories);
После чего у нас ЧПУ станет коротким, в котором будет только последняя категория. Однако, при таком подходе ломаются хлебные крошки, в которых пропадает полный путь к категории. Для того что бы сделать полные хлебные крошки, нам надо позаимствовать один метод из seopro.
Для этого открываем файл - catalog/controller/product/category.php где вставляем метод формирования правильного пути к категории:
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];
}
После чего находим в этом же файле строку
PHP:
$parts = explode('_', (string)$this->request->get['path']);
И заменяем на
PHP:
$parts = explode('_', $this->getPathByCategory($this->request->get['path']));
Таким образом у нас ссылка будет только с последней категорией а хлебные крошки полные.
Информация взята тут