[Решено] Как добавить rel="nofollow" к ссылке в модуле Nice Menus???

Главные вкладки

Аватар пользователя yoho yoho 9 февраля 2016 в 17:17

Как добавить rel="nofollow" к ссылке в модуле Nice Menus??? Меню находится вверху страницы Данфосс
Нужно добавить rel="nofollow" к ссылке дополнительного раскрывающегося меню, для того, чтобы поисковики не индексировали дублирующие внутренние ссылки!
Я пока только начинаю осваивать PHP, голову сломал но не получается добавить атрибут rel="nofollow" к ссылке! Народ помогите пожалуйста! Ниже кусок кода, где по моему необходимо внести изменения!

function theme_nice_menu_build($menu) {
  $output = '';

  foreach ($menu as $menu_item) {
    $mlid = $menu_item['link']['mlid'];
    // Check to see if it is a visible menu item.
    if ($menu_item['link']['hidden'] == 0) {
      // Build class name based on menu path
      // e.g. to give each menu item individual style.
      // Strip funny symbols.
      $clean_path = str_replace(array('http://', '<', '>', '&', '=', '?', ':'), '', $menu_item['link']['href']);
      // Convert slashes to dashes.
      $clean_path = str_replace('/', '-', $clean_path);
      $path_class = 'menu-path-'. $clean_path;
      // If it has children build a nice little tree under it.
      if ((!empty($menu_item['link']['has_children'])) && (!empty($menu_item['below']))) {
        // Keep passing children into the function 'til we get them all.
        $children = theme('nice_menu_build', $menu_item['below']);
        // Set the class to parent only of children are displayed.
        $parent_class = $children ? 'menuparent ' : '';
        $output .= '<li id="menu-'. $mlid .'" class="'. $parent_class . $path_class .'">'. theme('menu_item_link', $menu_item['link']);
        // Build the child UL only if children are displayed for the user.
        if ($children) {
          $output .= '<ul>';
          $output .= $children;
          $output .= "</ul>\n";
        }
        $output .= "</li>\n";
      }
      else {
        $output .= '<li id="menu-'. $mlid .'" class="'. $path_class .'">'. theme('menu_item_link', $menu_item['link']) .'</li>'."\n";
      }
    }
  }
  return $output;
}

ВложениеРазмер
Двоичные данные nice_menus.module13.01 КБ

Комментарии

Аватар пользователя yoho yoho 9 февраля 2016 в 17:58

Спасибо, я видел этот модуль, но уж сильно не хочется плодить их на сайте, если теоретически можно решить проблему небольшой доработкой кода! Этот вариант подойдёт если совсем будет глухо с ответом на данный вопрос!

Аватар пользователя sg85 sg85 9 февраля 2016 в 18:18

Это друпал 6 что ли?
$output .= '<li id="menu-'. $mlid .'" class="'. $path_class .'">'. theme('menu_item_link', $menu_item['link']) .'</li>'."\n";
попробуйте изменить на

$menu_item['link']['localized_options']['attributes']['rel'] = 'nofollow';
$output .= '<li id="menu-'. $mlid .'" class="'. $path_class .'">'. theme('menu_item_link', $menu_item['link']) .'</li>'."\n";

для 7рки localized_options пишется как #localized_options

только тут должна быть не "доработка кода", а его переопределение в теме, ибо рано или поздно модуль обновится и все эти "доработки" попросту слетят.

Аватар пользователя yoho yoho 10 февраля 2016 в 11:51

Огромное спасибо! Всё получилось! Выкладываю готовый вариант, если кому будет интересно!

function theme_nice_menu_build($menu) {
  $output = '';

  foreach ($menu as $menu_item) {
    $mlid = $menu_item['link']['mlid'];
    // Check to see if it is a visible menu item.
    if ($menu_item['link']['hidden'] == 0) {
      // Build class name based on menu path
      // e.g. to give each menu item individual style.
      // Strip funny symbols.
      $clean_path = str_replace(array('http://', '<', '>', '&', '=', '?', ':'), '', $menu_item['link']['href']);
      // Convert slashes to dashes.
      $clean_path = str_replace('/', '-', $clean_path);
      $path_class = 'menu-path-'. $clean_path;
      // If it has children build a nice little tree under it.
      if ((!empty($menu_item['link']['has_children'])) && (!empty($menu_item['below']))) {
        // Keep passing children into the function 'til we get them all.
        $children = theme('nice_menu_build', $menu_item['below']);
        // Set the class to parent only of children are displayed.
        $parent_class = $children ? 'menuparent ' : '';
        $menu_item['link']['localized_options']['attributes']['rel'] = 'nofollow';
        $output .= '<li id="menu-'. $mlid .'" class="'. $parent_class . $path_class .'">'. theme('menu_item_link', $menu_item['link']);
        // Build the child UL only if children are displayed for the user.
        if ($children) {
          $output .= '<ul>';
          $output .= $children;
          $output .= "</ul>\n";
        }
        $output .= "</li>\n";
      }
      else {
       $menu_item['link']['localized_options']['attributes']['rel'] = 'nofollow';
       $output .= '<li id="menu-'. $mlid .'" class="'. $path_class .'">'. theme('menu_item_link', $menu_item['link']) .'</li>'."\n";
      }
    }
  }
  return $output;
}

Аватар пользователя sg85 sg85 10 февраля 2016 в 16:54

по уму эту функцию надо было скопировать в template.php Вашей темы, переименовать её из theme_nice_menu_build в ИМЯ_ТЕМЫ_nice_menu_build и сбросить кеш