Почему
По умолчанию движок генерирует ссылки на статьи, включая в путь категории.при смене категории — меняется урл статьи, она может выпасть из поиска, или чего похуже.
Подумав, было решено на нашем проекте сократить ссылки, убрав из них промежуточные категории
из
site.ru/eda/pervoe/salat.html
сделать
site.ru/salat.html
Как
В базе хранятся 2 урла статьи: url и seolink
url — адрес страницы, seolink — путь + адрес страницы
например:
site.ru/eda/pervoe/salat.html
url — salat.html
seolink — eda/pervoe/salat.html
При вводе адреса, движок выбирает из базы статью с соответствующим seolink.
Всё что нам нужно — при создании либо редактировании статьи записывать одно и тоже значение url как в url, так и в seolink.
Простое решение от Till
Решение оказалось довольно простым. \components\content\model.php, строка примерно 480. Закомментируйте вот этот кусок кода:
if ($path_list){ foreach($path_list as $pcat){ if ($pcat['id']!=1){ $seolink .= cmsCore::strToURL(($pcat['url'] ? $pcat['url'] : $pcat['title'])) . '/'; } } }
Для этого, в файле
components/content/model.php
правим функцию
а именно строки переменной $sql в ней:
поясню: в поле seolink изначально ничего не вставляется (""), я же вставляю в это поле {$article['url']}
чуть ниже в этой же функции нужно закомментировать строки, обновляющие seolink
С добавлением статьи разобрались, теперь, обновление.
чуть ниже, функция
заменяем блок "if(!$not_upd_seo){" на
В общем-то, уже всё, но дополнительно я сделал поле "seolink" уникальным в таблице, через phpmyadmin (правда, не посмотрел, возможно оно и было помечено как уникальное), чтобы не было 2 статей с одним урл.
И я не проверял что будет если добавить 2 статьи с одинаковым урл. По идее база не сохранит, но будет ли при этом выводиться какая-то ошибка — не проверял.
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 статьи с одинаковым урл. По идее база не сохранит, но будет ли при этом выводиться какая-то ошибка — не проверял.
После применения минихака делайте исправления: 1.10.1 Решение проблемы из-за "Убрать названия категорий из url статьи"
Реклама #
picaboo 11 лет назад #
Soul 11 лет назад #
artscripts 11 лет назад #
//$article['seolink'] = $this->getSeoLink($article);
//$this->inDB->query("UPDATE cms_content SET seolink='{$article['seolink']}' WHERE id = '{$article['id']}'");
потом сделал замену на
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'];
}
И ниче не открывается вообще. Веосия 1.10.1 Что я не так делаю.
Cruzka 11 лет назад #
Kotanol 11 лет назад #