Формирование URL

Возможно?

#1 8 сентября 2011 в 10:27
Доброе время суток. Вот озаботился такой темой. Как известно не рекомендуется для улучшения продвижения сайта делать слишком большую вложенность статей.

Ну, например, мойсайт.ru/category1/subcategory1/subcategory2/post1.html — не есть хорошо.
Гораздо лучше мойсайт.ru/post1.html

Но при этом в навигации сайта должны остаться все эти категории и подкатегории, чтобы например вывести список статей в оределенной категории.

Встает вопрос. А можно ли так сделать??? Вырезание части url ???
#2 8 сентября 2011 в 11:48
Правльно ли я понимаю, что для этого можно поиграться с полем seolink в таблице cms_content. Необходимо, чтобы туда записывался путь без категорий. Для этого берем файл /component/content/model.php и редактируем вот это

  1. public function getSeoLink($article){
  2.  
  3. $seolink = '';
  4.  
  5. $category = $this->inDB->get_fields('cms_category', "id={$article['category_id']}", 'NSLeft, NSRight');
  6.  
  7. $left_key = $category['NSLeft'];
  8. $right_key = $category['NSRight'];
  9.  
  10. $path_list = $this->getCategoryPath($left_key, $right_key);
  11.  
  12. if ($path_list){
  13. foreach($path_list as $pcat){
  14. if ($pcat['id']!=1){
  15. $seolink .= cmsCore::strToURL(($pcat['url'] ? $pcat['url'] : $pcat['title'])) . '/';
  16. }
  17. }
  18. }
  19.  
  20. $seolink .= cmsCore::strToURL(($article['url'] ? $article['url'] : $article['title']));
  21.  
  22. if ($article['id']){
  23. $where = ' AND id<>'.$article['id'];
  24. } else {
  25. $where = '';
  26. }
  27.  
  28. $is_exists = $this->inDB->rows_count('cms_content', "seolink='{$seolink}'".$where, 1);
  29.  
  30. if ($is_exists) { $seolink .= '-' . $article['id']; }
  31.  
  32. return $seolink;
  33.  
  34. }
Для нашей задачи эта функция выглядела бы так:

  1. public function getSeoLink($article){
  2.  
  3. $seolink = '';
  4.  
  5. $seolink .= cmsCore::strToURL(($article['url'] ? $article['url'] : $article['title']));
  6.  
  7. if ($article['id']){
  8. $where = ' AND id<>'.$article['id'];
  9. } else {
  10. $where = '';
  11. }
  12.  
  13. $is_exists = $this->inDB->rows_count('cms_content', "seolink='{$seolink}'".$where, 1);
  14.  
  15. if ($is_exists) { $seolink .= '-' . $article['id']; }
  16.  
  17. return $seolink;
  18.  
  19. }
Все ли верно?

Но тогда наверное можно наткнуться на какие-то подводные камни. Вдруг еще где-то эта функция работает и там нужен полный путь??
#3 22 сентября 2011 в 02:19
На первый и второй камень я сегодня наткнулся

Камень первый
Сделал по примеру как у вас, доюавлял новости как положено, URL были вида site.ru/moyanovost.html

Затем в разделе новостей заметил что выводятся новости в обратном порядке не как на главной и решил сменить вывод по убыванию, и все ссылки слетели, стали вида site.ru/novosti/razdel/moyanovost.html ну и естественно с ПС все вылетело, теперь каждую новость редактирую что бы ссылки вернуть как были.

Как можно обойти эту проблему??

Камень второй, в новостях типа site.ru/novost.html не отображаются sidebar maintop и т.д. Т.е хочу баннер впихнуть в sidebar а он не появляется. Что делать не понятно, работает только если поставить галочку отоброжать на всех.
#4 22 сентября 2011 в 03:52
А меня интересует как с помощью этого сделать ссылку типа сайт.ru/nikitka вместо того что сейчас сайт.ru/users/nikitka! Кто может помочь отзовитесь!
#5 22 сентября 2011 в 15:25
Nikitka, так просто у вас ничего не получится. Дело в том, для всех компонентов, кроме content, по ури определяется компонент. Т.е. в вашем случае /users/ определяет, что нужно открыть компонент "Профили пользователей". Если вы уберете с ури эту часть, то будет искаться раздел статей под названием "никитка".
Ну, если уж так вам хочется, то можете подредактировать файл /core/cms.php строки где-то 1565 в методе detectComponent() со следующим кодом
  1.  
  2. //если компонент не существует, считаем это content
  3. $this->uri = 'content/'.$this->uri;
  4. $this->is_content = true;
  5. return 'content';
проверяте ури на логин пользователя и если совпадает, то добавляете в ури /users/ и возвращаете компонент 'users'
#6 8 февраля 2012 в 13:56

Как известно не рекомендуется для улучшения продвижения сайта делать слишком большую вложенность статей.

Ну, например, мойсайт.ru/category1/subcategory1/subcategory2/post1.html — не есть хорошо.
Гораздо лучше мойсайт.ru/post1.html

Но при этом в навигации сайта должны остаться все эти категории и подкатегории, чтобы например вывести список статей в оределенной категории.

densvi
У меня та же потребность и по той же причине. Есть, правда, мнение, что урлы давно уже не влияют на индексацию сайта. Утверждать и спорить не буду, но на основании консультации с профи, которому [у меня] есть основания доверять, вижу это целесообразным. К тому же так просто эстетичнее — ничего лишнего)).

Здесь Till даёт решение для урлов статей. Всё вроде замечательно работает. Но кроме статей есть ещё урлы блогов, профилей пользователей, групп… Пользователь nedoriko предлагает скинуться и заплатить тому, кто возьмётся за доработку…
#7 9 февраля 2012 в 17:07
В таком случае навязывается вопрос. Как сделать чтоб URL формировались не из пути по сайту-модулям а в видео свободной реализации URL
#8 9 февраля 2012 в 20:44

В таком случае навязывается вопрос. Как сделать чтоб URL формировались не из пути по сайту-модулям а в виде свободной реализации URL

sofcom
Это было бы замечательно. Я видел подобный сервис в Дискуз (китайская CMS). Там можно урлы формировать по своему усмотрению. И не приходится даже спорить о целесообразности того или иного варианта))).
Вы не можете отвечать в этой теме.
Войдите или зарегистрируйтесь, чтобы писать на форуме.
Используя этот сайт, вы соглашаетесь с тем, что мы используем файлы cookie.