Убираем лишние ссылки в глубиномере

+9
1.86K

Запись устарела, для релиза 1.8 неактуально!

Навеяно вот этим постом и проблемами с лишними ссылками в глубиномере на своем сайте.
В общем суть в том, что при проверке ссылки на то, что она уже есть в глубиномере, зачем-то дополнительно кроме link проверяется еще и title. В результате, если название раздела отличается от названия соответствующего пункта меню, в глубиномере появляется 2 ссылки на 1 и тот же адрес. Дополнительно добавил проверку, чтобы в глубиномер не добавлялись ссылки на промежуточные пункты меню с адресом "#".
Правим все тот же файлик /core/classes/page.class.php, функцию public function addPathway($title, $link='') приводим к следующему виду:
  1. public function addPathway($title, $link=''){
  2. //Если ссылка не указана, берем текущий URI
  3. if (empty($link)) { $link = $_SERVER['REQUEST_URI']; }
  4. //Проверяем, есть ли уже в глубиномере такое звено
  5. $already = false;
  6. foreach($this->pathway as $key => $val){
  7. if ($this->pathway[$key]['link'] == $link){
  8. $already = true;
  9. }
  10. }
  11. //Если такого звена еще нет, добавляем его
  12. if(!$already){
  13. $this->pathway[] = array('title'=>$title, 'link'=>$link);
  14. }
  15. return true;
  16. }
и если Вы используете промежуточные пункты в меню правим также public function addMenuPathway($menuid):
  1. public function addMenuPathway($menuid){
  2.  
  3. $inCore = cmsCore::getInstance();
  4. $inDB = cmsDatabase::getInstance();
  5.  
  6. //Получаем путь к пункту меню
  7. $rs_item = $inDB->query("SELECT * FROM cms_menu WHERE id = $menuid");
  8.  
  9. if ($inDB->num_rows($rs_item)){
  10. $current_item = $inDB->fetch_assoc($rs_item);
  11.  
  12. $left_key = $current_item['NSLeft'];
  13. $right_key = $current_item['NSRight'];
  14.  
  15. $sql = "SELECT id, title, link, linktype
  16. FROM cms_menu
  17. WHERE NSLeft <= $left_key AND NSRight >= $right_key AND parent_id > 0
  18. ORDER BY NSLeft";
  19.  
  20. $rs_rows = $inDB->query($sql);
  21.  
  22. while($item=$inDB->fetch_assoc($rs_rows)){
  23. if ($item['id']>1 && $item['link'] !=='#'){
  24. $this->addPathway($item['title'], $inCore->menuSeoLink($item['link'], $item['linktype'], $item['id']));
  25. }
  26. }
  27. }
  28.  
  29. return true;
  30.  
  31. }
Все:)
Ах, да чуть не забыл: не гарантируется 100% работоспособность данного кода на Ваших рабочих проектах, проверялось на полупустом сайте!, перед применением обязательно делаем бекап!
0
lokanaft lokanaft 13 лет назад #
0
googlebot googlebot 13 лет назад #
по вашей ссылке все ок, ctrl+f5 нажмите, наверно кеш браузера видите
0
googlebot googlebot 13 лет назад #
А вижу лишний вьетнам затесался и порядок изменен. Видимо еще остались ошибки в addPathway.
0
Soviet-Girl Soviet-Girl 13 лет назад #
Спасибо большое, работает.

Еще от автора

Контекстные ссылки v2.2
Предистория тут и тут
Плагин "Контекстные ссылки" v2.1
Модификация плагина Марата версии 2.0 (с хаком /admin/applets/plugins.php) Основные отличия: 1.
Используя этот сайт, вы соглашаетесь с тем, что мы используем файлы cookie.