Ссылки внутри документа "#" в superfish menu

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

Аватар пользователя alias612 alias612 29 января 2012 в 20:10

Приветствую уважаемые!
Столкнулся тут с такой неприятностью: всем привлекательный модуль superfish menu,
только напрочь игнорирует ссылки вида o-kompanii#karta, o-kompanii#kadry и т.д.
остается только o-kompanii.

Решил проблему следующим образом: посмотрел в коде модуля функцию,
отвечающую за генерацию линков, theme_superfish_build($variables)
перебросил ее в template.php.
Посмотрел с помощью devel где обретается искомый хвост #kadry и дополнил функцию ...

цитирую от комментария, так как фунция очч. большая.

// Render the menu item.
// добавил переменную со старым урлом
$menu_my_link = $menu_item['link']['link_path'];
// если в массиве fragment что-то есть, типа #kadry то добиваем хвост в урл
if (array_key_exists('fragment', $menu_item['link']['options'])) {
$menu_my_link .= '#'.$menu_item['link']['options']['fragment'];
};

$output['content'] .= '

  • ' : '>';
    $output['content'] .= ($megamenu_column) ? '
    ' : '';
    $output['content'] .= isset($whl[0]) ? $whl[0] : '';
    // Исходная строка, оставил на всякий случай
    // $output['content'] .= l($menu_item['link']['title'], $menu_item['link']['link_path'], $link_options);
    // формируем урл из переменной выше
    $output['content'] .= l($menu_item['link']['title'], $menu_my_link, $link_options);
    $output['content'] .= isset($whl[1]) ? $whl[1] : '';
    $output['content'] .= ($megamenu_wrapper) ? '
    • ' : '';
      $output['content'] .= ($show_children) ? (isset($wul[0]) ? $wul[0] : '') : '';
      $output['content'] .= ($show_children) ? (($megamenu_content) ? '
        ' : '
        ') : '';
        $output['content'] .= ($show_children) ? $children['content'] : '';
        $output['content'] .= ($show_children) ? (($megamenu_content) ? '

        ' : '

      ') : '';
      $output['content'] .= ($show_children) ? (isset($wul[1]) ? $wul[1] : '') : '';
      $output['content'] .= ($megamenu_wrapper) ? '

    ' : '';
    $output['content'] .= ($megamenu_column) ? '

    ' : '';
    $output['content'] .= '

  • ';
    //казалось бы все все хорошо, только api друпала преобразовывает # в %23 и мы получаем
    //"страница не найдена" щелкнув по ссылке
    //вероятно есть способ дать понять api что я от него хочу, но честно говоря влом. поэтому --
    $output['content'] = str_replace("%23","#",$output['content']);

    }
    }
    $output['total_children'] = $total_children;
    $output['parent_children'] = $parent_children;
    $output['single_children'] = $single_children;

    return $output;

    вот и все, как ни странно все заработало. сам от себя не ожидал.

    Буду рад, если кому пригодиться.

    Комментарии

    Аватар пользователя KA4AH KA4AH 1 мая 2012 в 17:19

    Спасибо большое за пост... пригодился очень... проблема не идентичная, но очень похожая... суперфиш резал параметры гет-запросов для пользовательских фильтров фьюхи... с небольшими изменениями адаптировал ваше решение... ещё раз спасибо...