Почему
По умолчанию движок генерирует ссылки на статьи, включая в путь категории.при смене категории — меняется урл статьи, она может выпасть из поиска, или чего похуже.
Подумав, было решено на нашем проекте сократить ссылки, убрав из них промежуточные категории
из
site.ru/eda/pervoe/salat.html
сделать
site.ru/salat.html
Как
В базе хранятся 2 урла статьи: url и seolinkurl — адрес страницы, seolink — путь + адрес страницы
например:
site.ru/eda/pervoe/salat.html
url — salat.html
seolink — eda/pervoe/salat.html
При вводе адреса, движок выбирает из базы статью с соответствующим seolink.
Всё что нам нужно — при создании либо редактировании статьи записывать одно и тоже значение url как в url, так и в seolink.
Для этого, в файле
components/content/model.php
правим функцию
public function addArticle($article){
$sql = "INSERT INTO cms_content (category_id, user_id, pubdate, enddate, is_end, title, description, content, published, hits, meta_desc, meta_keys, showtitle, showdate, showlatest, showpath, ordering, comments, seolink, canrate, pagetitle, url, tpl) VALUES ('{$article['category_id']}', '{$article['user_id']}', '{$article['pubdate']}', '{$article['enddate']}', '{$article['is_end']}', '{$article['title']}', '{$article['description']}', '{$article['content']}', '{$article['published']}', 0, '{$article['meta_desc']}', '{$article['meta_keys']}', '{$article['showtitle']}', '{$article['showdate']}', '{$article['showlatest']}', '{$article['showpath']}', {$ordering}, '{$article['comments']}', '{$article['url']}', '{$article['canrate']}', '{$article['pagetitle']}', '{$article['url']}', '{$article['tpl']}')";
чуть ниже в этой же функции нужно закомментировать строки, обновляющие seolink
//$article['seolink'] = $this->getSeoLink($article); //$this->inDB->query("UPDATE cms_content SET seolink='{$article['seolink']}' WHERE id = '{$article['id']}'");
чуть ниже, функция
public function updateArticle($id, $article, $not_upd_seo = false){
if(!$not_upd_seo){ if ($article['url']) { $article['url'] = cmsCore::strToURL($article['url']); } /*$article['seolink'] = $this->getSeoLink($article); $article_seo_sql = "url='{$article['url']}', seolink='{$article['seolink']}',"; */ $article['seolink']=$article['url']; }
И я не проверял что будет если добавить 2 статьи с одинаковым урл. По идее база не сохранит, но будет ли при этом выводиться какая-то ошибка — не проверял.