Подменю vs якоря

Тема в разделе "Вопросы по работе с меню", создана пользователем AlbusFalco, 23.07.2009.

  1. Offline

    AlbusFalco Недавно здесь

    Регистрация:
    23.07.2009
    Сообщения:
    5
    Симпатии:
    0
    Joomla 1.5.12

    Всего один материал, разбираюсь с подменю: создал меню "Menu" и, скажем, подменю "SubMenu" с родительским элементом "Menu" и типом "Стандартный шаблон материала". все прекрасно, меню раскрывается. Хочу добится следующего: при клике на меню - переход на начало материала, при клике на подменю - переход на указанный якорь в материале. где можно указать якорь? Ссылку менять не дает.
    ссылка - вида "index.php?option=com_content&view=article&id=1", если в адресной строке добавляю #якорь - работает... попробовал прямо в БД добавить якорь к ссылке - так при клике добавляется еще и "&Itemid=номер_меню", так что даже такой извращенный способ не помог....
     
  2.  
  3. Dead Krolik
    Offline

    Dead Krolik специалист

    Регистрация:
    13.04.2007
    Сообщения:
    3 688
    Симпатии:
    101
    Пол:
    Мужской
    Либо ковырять mod_mainmenu, либо фигачить яваскрипт, который бы делал скролл до нужной отметки. Вариантов нет.
     
  4. Offline

    AlbusFalco Недавно здесь

    Регистрация:
    23.07.2009
    Сообщения:
    5
    Симпатии:
    0
    вот те на.... никак не ожидал такого поворота, думал, что-то пропустил... :(
    тогда попробую убрать из mainmenu добавление к ссыли окончания "&Itemid=..."
     
  5. Offline

    AlbusFalco Недавно здесь

    Регистрация:
    23.07.2009
    Сообщения:
    5
    Симпатии:
    0
    ммм... костыль конечно... но, т.к. я не пишу на php, может кто и красивше сделает.
    /www/modules/mod_mainmenu/helper.php:
    Код (PHP):
    1. $tmp->url = $router->getMode() == JROUTER_MODE_SEF ? 'index.php?Itemid='.$tmp->id : $tmp->link.'&Itemid='.$tmp->id;

    заменил на:
    Код (PHP):
    1. if ($router->getMode() == JROUTER_MODE_SEF)
    2.                 {
    3.                 $tmp->url ='index.php?Itemid='.$tmp->id;
    4.                 }
    5.                 else
    6.                 {
    7.                     if (substr_count($tmp->link,"#")==0)
    8.                     {
    9.                     $tmp->url =$tmp->link.'&Itemid='.$tmp->id;
    10.                     }
    11.                     else
    12.                     {
    13.                     $tmp->url =$tmp->link;
    14.                     }
    15.                 }

    строку разбил, чтобы мозг не вскипел, не обессудьте. добавил якоря напрямую в базе (prefix_menu->link), но можно и сменить тип меню на внешнюю ссылку, и добавить непосредственно в панели управления.

    P.S. Если кто-то все же знает человеческий способ, прошу отозваться.
     
  6. Offline

    AlbusFalco Недавно здесь

    Регистрация:
    23.07.2009
    Сообщения:
    5
    Симпатии:
    0
    блин, чет не меняется последний пост... изменил еще раз, вот вся конструкция:
    Код (PHP):
    1. switch ($tmp->type)
    2.         {
    3.             case 'separator' :
    4.                 return '<span class="separator">'.$image.$tmp->name.'</span>';
    5.                 break;
    6.  
    7.             case 'url' :
    8.                 if ((strpos($tmp->link, 'index.php?') === 0) && (strpos($tmp->link, 'Itemid=') === false)) {
    9.                     if (substr_count($tmp->link,"#")==0)
    10.                     {
    11.                     $tmp->url = $tmp->link.'&amp;Itemid='.$tmp->id;
    12.                     }
    13.                     else
    14.                     {
    15.                     $tmp->url = $tmp->link;
    16.                     }
    17.                 } else {
    18.                     $tmp->url = $tmp->link;
    19.                 }
    20.                 break;
    21.  
    22.             default :
    23.                 $router = JSite::getRouter();
    24.                 // $tmp->url = $router->getMode() == JROUTER_MODE_SEF ? 'index.php?Itemid='.$tmp->id : $tmp->link.'&Itemid='.$tmp->id;
    25.                 if ($router->getMode() == JROUTER_MODE_SEF)
    26.                 {
    27.                 $tmp->url ='index.php?Itemid='.$tmp->id;
    28.                 }
    29.                 else
    30.                 {
    31.                     if (substr_count($tmp->link,"#")==0)
    32.                     {
    33.                     $tmp->url =$tmp->link.'&Itemid='.$tmp->id;
    34.                     }
    35.                     else
    36.                     {
    37.                     $tmp->url =$tmp->link;
    38.                     }
    39.                 }
    40.                 break;
    41.         }
     

Поделиться этой страницей

Загрузка...