На этот раз у меня ЧПУ у новостей «отвалилось», хотя здесь сложно сказать, что оно именно отвалилось, если оно изначально даже не прицепилось. Есть форум, где обсуждают сей модуль, там же нашёл решение. И тут понеслось. Первое – в моей версии Opencart не был установлен SeoPro (ЧПУ при этом работало и на стандартном модуле).
Установил, теперь собственно, что стало поводом для этого обзора, то что файлы модуля SeoPro оказались совсем в другом каталоге. Перед тем, как приступить – обязательно сделайте резервную копию!
По обзору, что я читал они должны, были быть в каталоге:
catalog/controller/common/seo_pro.php
у меня же файл оказался по другому пути:
catalog/controller/startup/seo_pro.php
Далее, поиск строки в обзоре ничего не дал, потому что пробелы образовались, которых в файле модуля не было, без пробелов ищем так:
foreach($data as $key => $value) {
Перед этой строкой добавляем:
$is_news = false;
После чего ищем(здесь, как в обзоре):
case 'path':
Перед, добавляем:
case 'news_id':
$queries[] = $key . '=' . $value;
unset($data[$key]);
$postfix = 1;
$is_news = true;
break;
upd.: добавлю ещё пару моментов в этом же файле, ищем:
} elseif (isset($this->request->get['information_id'])) {
$this->request->get['route'] = 'information/information';
добавляем:
} elseif (isset($this->request->get['news_id'])) {
$this->request->get['route'] = 'information/news';
Теперь ищем:
$seo_url .= '/' . rawurlencode($aliases[$query]);
Меняем на:
if ($is_news) {
$seo_url .= '/all-news/' . rawurlencode($aliases[$query]);
} else {
$seo_url .= '/' . rawurlencode($aliases[$query]);
}
Теперь правим файл админ-панели, путь отличается, Вам сюда:
admin/controller/catalog/news.php
(в оригинале статьи вместо catalog указано module)
И этот блок:
if (isset($this->request->post['keyword'])) {
$this->data['keyword'] = $this->request->post['keyword'];
} elseif (isset($news_info)) {
$this->data['keyword'] = $news_info['keyword'];
} else {
$this->data['keyword'] = '';
}
Заменяем на этот:
function translitIt($str)
{
$tr = array
(
"А"=>"a","Б"=>"b","В"=>"v","Г"=>"g",
"Д"=>"d","Е"=>"e","Ж"=>"j","З"=>"z","И"=>"i",
"Й"=>"y","К"=>"k","Л"=>"l","М"=>"m","Н"=>"n",
"О"=>"o","П"=>"p","Р"=>"r","С"=>"s","Т"=>"t",
"У"=>"u","Ф"=>"f","Х"=>"h","Ц"=>"ts","Ч"=>"ch",
"Ш"=>"sh","Щ"=>"sch","Ъ"=>"","Ы"=>"yi","Ь"=>"",
"Э"=>"e","Ю"=>"yu","Я"=>"ya","а"=>"a","б"=>"b",
"в"=>"v","г"=>"g","д"=>"d","е"=>"e","ж"=>"j",
"з"=>"z","и"=>"i","й"=>"y","к"=>"k","л"=>"l",
"м"=>"m","н"=>"n","о"=>"o","п"=>"p","р"=>"r",
"с"=>"s","т"=>"t","у"=>"u","ф"=>"f","х"=>"h",
"ц"=>"ts","ч"=>"ch","ш"=>"sh","щ"=>"sch","ъ"=>"y",
"ы"=>"yi","ь"=>"","э"=>"e","ю"=>"yu","я"=>"ya"
);
$seo_name = preg_replace('/\%/', ' procent ', strtr($str, $tr));
$seo_name = preg_replace('/\@/', ' sobaka ', $seo_name);
$seo_name = preg_replace('/\&/', ' i ', $seo_name);
$seo_name = preg_replace('/\+/', ' plus ', $seo_name);
$seo_name = preg_replace('/\s[\s]+/', '-', $seo_name);
$seo_name = preg_replace('/[\s\W]+/', '-', $seo_name);
$seo_name = preg_replace('/^[\-]+/', '', $seo_name);
$seo_name = preg_replace('/[\-]+$/', '', $seo_name);
return $seo_name;
}
if (isset($this->request->post['keyword'])){
$this->data['keyword'] = utf8_strtolower($this->request->post['keyword']);
}elseif (!empty($news_info['keyword'])){
$this->data['keyword'] = utf8_strtolower($news_info['keyword']);
}else{
if (!empty($this->data['news_description'][1]['title'])){
$this->data['keyword'] = utf8_strtolower(translitIt($this->data['news_description'][1]['title']));
}else{
$this->data['keyword'] = '';
}
}
Кстати очень рекомендую проверить совпадают ли кодировки Вашего сервера и этого файла (для примера, у меня на сервере кодировка UTF-8, а модуль по умолчанию установился с кодировкой ANSI), оно как бы ничего страшного просто у Вас при несовпадении кодировок вместо кириллицы кракозёбры выплывут, подумаешь, велика беда.
Последний этап.
Открываем ПУ базой данных (PHPMyAdmin (Mysql)) и вводим следующий запрос:
INSERT INTO префикс_url_alias (query, keyword) VALUES ('information/news', 'all-news');
Вместо слова «префикс_» подставьте префикс, который Вы использовали при создании магазина. Если Вы не имеете опыта программиста и даже малейшего представления, как работает база данных MySQL – оооооооооочень рекомендую – обратитесь к специалисту, лезть в эту воду, не зная броду – не то, на чём следует экономить.
Далее, удаляем файлы кэша, путь system/storage/cache.
Открываем Админ-панель Opencart > Модификаторы > Очистить/Обновить.
У Вас «слетит» модуль новостей, не пугайтесь, открываем Модули > Новости, новый добавлять не надо – редактируем уже созданный, нажимаем сохранить, вернётся модуль обратно в каталог.
Если у Вас уже были созданы материалы в модуле – зайдите в каждый и «сохраните», чтобы система переписала к нему путь (ЧПУ).
Проверяем.
З.ы. за основу обзора взял инфу отсюда: ссылка на источник