Как заставить быть активной дополнительную кнопку меню?

Автор Stern, 19 января 2011, 14:24:58

« назад - далее »

0 Пользователи и 1 гость просматривают эту тему.

Stern

САБЖ.
Хотим мы, к примеру, вынести в меню отдельную кнопку, ведущую либо определённую тему, либо на определённый раздел форума, либо на статическую страницу в симплепортале.
Как эту кнопку заставить быть активной? (т.е. чтобы при переходе по ней она подсвечивалась?)?

Пример.

                                // Show the [home] button.
echo '<li><a' , $current_action=='home' ? ' class="current"' : '' , ' href="', $scripturl, '"><span>' , $txt[103] , '</span></a></li>';

// Show the [portfolio] button.
echo '<li><a' , $current_action=='mgallery' ? ' class="current"' : '' , ' href="', $scripturl, '?action=mgallery"><span>' , 'Портфолио' , '</span></a></li>';

                         // Show the [form] button.
echo '<li><a' , $current_action=='form' ? ' class="current"' : '' , ' href="', $scripturl, '?action=form;id=1"><span>' , 'Форма' , '</span></a></li>';

// Show the [contax] button.
echo '<li><a' , $current_action=='contax' ? ' class="current"' : '' , ' href="', $scripturl, '?page=contax"><span>' , 'Контакты' , '</span></a></li>';
 


При этом дополнительные кнопки прописаны в предшествующей конструкции в коде:

if (in_array($context['current_action'], array('contax', 'invite', 'mgallery', 'search', 'admin', 'calendar', 'profile', 'mlist', 'register', 'login', 'help', 'pm', 'forum', 'form')))
$current_action = $context['current_action'];


Дополнительных кнопок здесь 2 - form и contax

Первая - работает корректно, вторая - нет (при переходе при нажатии на неё подсвечивается кнопка "Домой")
МышЫ плакали, кололись, но продолжали жрать кактус...

Mavn

да по идее и не должна работать. тыже указываешь action а у тебя страница поэтомуи нет подсветки
SimpleMachines Russian Community Team
п.1 Пройду курсы гадалок для определения исходного кода по скриншоту.

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

Stern

Цитата: Mavn от 20 января 2011, 07:38:56
да по идее и не должна работать. тыже указываешь action а у тебя страница поэтомуи нет подсветки
если указывать page - в логе сыпятся ошибки(
МышЫ плакали, кололись, но продолжали жрать кактус...

0daliska

#3


            // Show the [contax] button.
$active_page = $_REQUEST['page'];
            echo '<li><a' , $active_page =='contax' ? ' class="current"' : '' , ' href="', $scripturl, '?page=contax"><span>Контакты</span></a></li>';

Только мне вот это' , 'Контакты' , '
<span>' , 'Портфолио' , '</span>
и так далее и тому подобное...
в вашем коде покоя не дает...
Это у Вас так и написано? Зачем?
Если в php блоке симплпортала, то <span>Контакты</span> - все чинно и гладко (см. код выше)...


А если в коде шаблонов, то уж сорри, но лучше переменные вводить, а именно:
           
$active_page = $_REQUEST['page'];
echo '<li><a' , $active_page =='contax' ? ' class="current"' : '' , ' href="', $scripturl, '?page=contax"><span>', $txt['contax'], '</span></a></li>';

Тогда добавляем сии языковые переменные в Modification.russian[-utf8].php
$txt['contax'] = 'Контакты';
и в Modification.english.php
$txt['contax'] = 'Contact';
Уехала отдыхать. Сейчас без интернета до 1 августа. Приеду - выполню все обещания
® For members of Russian community (simplemachines.ru) only

Stern

Ай, спасибо, 0daliska! - не такая уж и вредная, как это можно было бы предположить из подписи!)))
В ланг-файлы лезть лениво (да и не особо нужно), а вот за запятые-апострофы - спасибо, мог бы сам догадаться!

Только вот остаётся одна неувязочка - при переходе на "contax" подсвечивается и главная кнопка (одновременно с новой).
Т.е. "home" остаётся активной.
В логах начинают появляться ошибки (Undefined index: page)
Насколько припоминаю - всё это проходили года 3 назад - результата не достиг, плюнул и забыл.
А сейчас хочется-таки заставить все ресурсы работать должным образом - продолжим эксперименты?)

Кстати, как правильнее:
$active_page =='contax'
или
$active_page=='contax'

Ругань в логе ошибок идёт именно на эту строчку - хоть так, хоть сяк(
МышЫ плакали, кололись, но продолжали жрать кактус...

GeorG

ЦитироватьКстати, как правильнее:
$active_page =='contax'
или
$active_page=='contax'
Не понял, а в чем разница, в пробеле? Вообще, надо б, так -    if($x == y)
Или я непонял вопроса.
Верстка тем по шаблону, их доработка/переработка, переделка тем с версии smf 1.1 на smf 2.0. Примеры работ - insidestyle.ru
Установка модов (заточка под ваш форум); Моды под заказ; Обновление форума; Правильный перенос; Удаление/лечение вирусов; Устранения ошибок.
Обращаться в ЛС
Мой форум
Модуль анти-спама CleanTalk, сам пользуюсь
Сервера которыми сам пользуюсь - cadedic.ru

Stern

Вопрос, озвученный в заголовке темы, в свете последних советов переформулируется:
"Как заставить быть активной дополнительную кнопку меню, чтобы при этом не была активной кнопка "home"?"
МышЫ плакали, кололись, но продолжали жрать кактус...

0daliska

Цитата: Geor'G от 20 января 2011, 21:10:59
Не понял, а в чем разница, в пробеле? Вообще, надо б, так -    if($x == y)
Или я непонял вопроса.
if($x == 'y') {} else {}
это то же самое, что и:
$x =='y' ? '' : ''

Цитата: Stern от 20 января 2011, 20:55:13
Кстати, как правильнее:
$active_page =='contax'
или
$active_page=='contax'

Для php - без разницы, только читабельность кода и правила хорошего тона в написании кода... Не более того...

Цитата: Stern от 20 января 2011, 20:55:13

Только вот остаётся одна неувязочка - при переходе на "contax" подсвечивается и главная кнопка (одновременно с новой).
Т.е. "home" остаётся активной.
В логах начинают появляться ошибки (Undefined index: page)
Насколько припоминаю - всё это проходили года 3 назад - результата не достиг, плюнул и забыл.
А сейчас хочется-таки заставить все ресурсы работать должным образом - продолжим эксперименты?)

Надо видеть файл, где вы код написали...

Если же у Вас эта кнопка есть на всем форуме и прописана в код одного из шаблонов, то надо проверить на то, на странице ли мы находимся...
То есть код будет следующий:

if (isset($_REQUEST['page']))
{
$active_page = $_REQUEST['page'];
echo '<li><a' , $active_page =='contax' ? ' class="current"' : '' , ' href="', $scripturl, '?page=contax"><span>', $txt['contax'], '</span></a></li>';
}
else
{
echo '<li><a href="', $scripturl, '?page=contax"><span>', $txt['contax'], '</span></a></li>';
}

Ну а по поводу активной кнопки home, так смотрите, где-то ранее она назначается активной, если вы на любой странице находитесь... Выложите файл темы, где формирование менюшки происходит, попробую подсказать, где надо подправить...
Уехала отдыхать. Сейчас без интернета до 1 августа. Приеду - выполню все обещания
® For members of Russian community (simplemachines.ru) only

GeorG

Цитировать$x =='y' ? '' : ''
Это естественно, понятно

Цитировать"Как заставить быть активной дополнительную кнопку меню, чтобы при этом не была активной кнопка "home"?"
Как и сказала 0далиска надо видеть код, целиком, плюс css (возможно)
Верстка тем по шаблону, их доработка/переработка, переделка тем с версии smf 1.1 на smf 2.0. Примеры работ - insidestyle.ru
Установка модов (заточка под ваш форум); Моды под заказ; Обновление форума; Правильный перенос; Удаление/лечение вирусов; Устранения ошибок.
Обращаться в ЛС
Мой форум
Модуль анти-спама CleanTalk, сам пользуюсь
Сервера которыми сам пользуюсь - cadedic.ru

Stern

Цитата: 0daliska от 20 января 2011, 21:39:06

Надо видеть файл, где вы код написали...
Поскольку задачу хотелось бы решить в общем виде - дабы все могли пользоваться (удивляет, кстати - ужель  до сих пор чёткого и внятного ответа - что, где и как подправить, чтобы доп.кнопки работали, как и остальные, - нету?), нужна единая последовательность действий.

Код не самописный - просто доработанный).
Поскольку тема не дефолтная, но тоже достаточно часто встречающаяся (кстати, в её коде разобраться легче), можно попробовать на ней.
Тема DS-Natural, исходник (не правленая).
Вот кусок кода, отвечающий за вывод кнопок:

// Show the menu up top. Something like [home] [help] [profile] [logout]...
function template_menu()
{
global $context, $settings, $options, $scripturl, $txt;

// Work out where we currently are.
$current_action = 'home';
if (in_array($context['current_action'], array('admin', 'ban', 'boardrecount', 'cleanperms', 'detailedversion', 'dumpdb', 'featuresettings', 'featuresettings2', 'findmember', 'maintain', 'manageattachments', 'manageboards', 'managecalendar', 'managesearch', 'membergroups', 'modlog', 'news', 'optimizetables', 'packageget', 'packages', 'permissions', 'pgdownload', 'postsettings', 'regcenter', 'repairboards', 'reports', 'serversettings', 'serversettings2', 'smileys', 'viewErrorLog', 'viewmembers')))
$current_action = 'admin';
if (in_array($context['current_action'], array('search', 'admin', 'calendar', 'profile', 'mlist', 'register', 'login', 'help', 'pm')))
$current_action = $context['current_action'];
if ($context['current_action'] == 'search2')
$current_action = 'search';
if ($context['current_action'] == 'theme')
$current_action = isset($_REQUEST['sa']) && $_REQUEST['sa'] == 'pick' ? 'profile' : 'admin';

// Are we using right-to-left orientation?
if ($context['right_to_left'])
{
$first = 'last';
$last = 'first';
}
else
{
$first = 'first';
$last = 'last';
}

// Show the start of the tab section.
echo '
<div id="topmenu">
<ul>';
// Show the [home] button.
echo '<li><a' , $current_action=='home' ? ' class="current"' : '' , ' href="', $scripturl, '"><span>' , $txt[103] , '</span></a></li>';

// Show the [help] button.
echo '<li><a' , $current_action=='help' ? ' class="current"' : '' , ' href="', $scripturl, '?action=help"><span>' , $txt[119] , '</span></a></li>';

// How about the [search] button?
if ($context['allow_search'])
echo '<li><a' , $current_action=='search' ? ' class="current"' : '' , ' href="', $scripturl, '?action=search"><span>' , $txt[182] , '</span></a></li>';

// The [calendar]!
if ($context['allow_calendar'])
echo '<li><a' , $current_action=='calendar' ? ' class="current"' : '' , ' href="', $scripturl, '?action=calendar"><span>' , $txt['calendar24'] , '</span></a></li>';

// Is the user allowed to administrate at all? ([admin])
if ($context['allow_admin'])
echo '<li><a' , $current_action=='admin' ? ' class="current"' : '' , ' href="', $scripturl, '?action=admin"><span>' , $txt[2] , '</span></a></li>';

// Edit Profile... [profile]
if ($context['allow_edit_profile'])
echo '<li><a' , $current_action=='profile' ? ' class="current"' : '' , ' href="', $scripturl, '?action=profile"><span>' , $txt[79] , '</span></a></li>';

// Go to PM center... [pm]
if ($context['user']['is_logged'] && $context['allow_pm'])
echo '<li><a' , $current_action=='pm' ? ' class="current"' : '' , ' href="', $scripturl, '?action=pm"><span>' , $txt['pm_short'] , ' ', $context['user']['unread_messages'] > 0 ? '[<strong>'. $context['user']['unread_messages'] . '</strong>]' : '' , '</span></a></li>';

// the [member] list button
if ($context['allow_memberlist'])
echo '<li><a ' , $current_action=='mlist' ? ' class="current"' : '' , ' href="', $scripturl, '?action=mlist"><span>' , $txt[331] , '</span></a></li>';

// If the user is a guest, show [login] button.
if ($context['user']['is_guest'])
echo '<li><a ' , $current_action=='login' ? ' class="current"' : '' , ' href="', $scripturl, '?action=login"><span>' , $txt[34] , '</span></a></li>';

// If the user is a guest, also show [register] button.
if ($context['user']['is_guest'])
echo '<li><a ' , $current_action=='register' ? ' class="current"' : '' , ' href="', $scripturl, '?action=register"><span>' , $txt[97] , '</span></a></li>';

// Otherwise, they might want to [logout]...
if ($context['user']['is_logged'])
echo '<li><a ' , $current_action=='logout' ? ' class="current"' : '' , 'href="', $scripturl, '?action=logout;sesc=', $context['session_id'], '"><span>' , $txt[108] , '</span></a></li>';

echo '
</ul>
</div>';

}

// Generate a strip of buttons.
function template_button_strip($button_strip, $direction = 'top', $force_reset = false, $custom_td = '')
{
global $settings, $buttons, $context, $txt, $scripturl;

// Create the buttons...
foreach ($button_strip as $key => $value)
{
if (isset($value['test']) && empty($context[$value['test']]))
{
unset($button_strip[$key]);
continue;
}
elseif (!isset($buttons[$key]) || $force_reset)
$buttons[$key] = '<a href="' . $value['url'] . '" ' .( isset($value['custom']) ? $value['custom'] : '') . '>' . $txt[$value['text']] . '</a>';

$button_strip[$key] = $buttons[$key];
}

if (empty($button_strip))
return '<td>&nbsp;</td>';

echo '
<td class="', $direction == 'top' ? 'main' : 'mirror', 'tab_' , $context['right_to_left'] ? 'last' : 'first' , '">&nbsp;</td>
<td class="', $direction == 'top' ? 'main' : 'mirror', 'tab_back">', implode(' &nbsp;|&nbsp; ', $button_strip) , '</td>
<td class="', $direction == 'top' ? 'main' : 'mirror', 'tab_' , $context['right_to_left'] ? 'first' : 'last' , '">&nbsp;</td>';
}


Задача.

Сделать так, чтобы ЛЮБАЯ (не только action) кнопка отображалась корректно будучи как активной (выбранной), так и пассивной (невыбранной), и при этом не активировалась кнопка "домой".

Для примера - берём предложенный Одалиской код кнопки "Контакты":

// Show the [contax] button.
$active_page = $_REQUEST['page'];
            echo '<li><a' , $active_page =='contax' ? ' class="current"' : '' , ' href="', $scripturl, '?page=contax"><span>Контакты</span></a></li>';

Ставим её, предположим, на второе место (между home и help)

Какие конструкции в каких местах кода нужно прописать дополнительно ?

P.S. Спасибо всем, кто включился в обсуждение проблемы!
МышЫ плакали, кололись, но продолжали жрать кактус...

Bugo

Цитата: Stern от 20 января 2011, 21:27:09
Вопрос, озвученный в заголовке темы, в свете последних советов переформулируется:
"Как заставить быть активной дополнительную кнопку меню, чтобы при этом не была активной кнопка "home"?"
Воспользуйтесь готовым решением => http://dragomano.ru/page/custom-action-mod

Stern

Цитата: Bugo от 20 января 2011, 23:10:39
Воспользуйтесь готовым решением => http://dragomano.ru/page/custom-action-mod
Спасибо, Bugo, но у нас везде симпле- или тини- порталы стоят, задача гораздо Уже - нужны адекватные кнопы)))
Причём, насколько я понимаю, вами она решена?
МышЫ плакали, кололись, но продолжали жрать кактус...

0daliska

Цитата: Stern от 20 января 2011, 23:25:18
Спасибо, Bugo, но у нас везде симпле- или тини- порталы стоят, задача гораздо Уже - нужны адекватные кнопы)))
Причём, насколько я понимаю, вами она решена?
Этот мод позволяет создавать адекватные кнопы...
Stern, Вы тем что выдаете инфу не ту, что просят, только отодвигаете решение Вашей проблемы...
Я не просила мне показать код из чистой темы, я просила показать код того, как у Вас в настоящее время есть...
страницы в чистой теме по умолчанию не могут быть прописаны!!! Без портала это невозможно...
А посему, то, что Вы предоставили, ценности никакой не имеет...
Уехала отдыхать. Сейчас без интернета до 1 августа. Приеду - выполню все обещания
® For members of Russian community (simplemachines.ru) only

Stern

Цитата: 0daliska от 20 января 2011, 23:45:54
Этот мод позволяет создавать адекватные кнопы...
Stern, Вы тем что выдаете инфу не ту, что просят, только отодвигаете решение Вашей проблемы...
Я не просила мне показать код из чистой темы, я просила показать код того, как у Вас в настоящее время есть...
страницы в чистой теме по умолчанию не могут быть прописаны!!! Без портала это невозможно...
А посему, то, что Вы предоставили, ценности никакой не имеет...
Хм, Одалиска, спасибо вам за ответы и готовность поспособствовать, но:

а.) страницы могут быть прописаны где угодно - хоть в чистом форуме (мод Буго тому пример)
б.) задачу /к сож., приходится повторяться((/ хотелось бы решить в общем виде
с.) если бы между ДО и ПОСЛЕ установки симплепортала были кардинальные различия... впрочем, вот ПОСЛЕ (то, что сейчас):

// Show the menu up top. Something like [home] [help] [profile] [logout]...
function template_menu()
{
global $context, $settings, $options, $scripturl, $txt;

// Work out where we currently are.
$current_action = 'home';
if (in_array($context['current_action'], array('admin', 'ban', 'boardrecount', 'cleanperms', 'detailedversion', 'dumpdb', 'featuresettings', 'featuresettings2', 'findmember', 'maintain', 'manageattachments', 'manageboards', 'managecalendar', 'managesearch', 'membergroups', 'modlog', 'news', 'optimizetables', 'packageget', 'packages', 'permissions', 'pgdownload', 'postsettings', 'regcenter', 'repairboards', 'reports', 'serversettings', 'serversettings2', 'smileys', 'viewErrorLog', 'viewmembers')))
$current_action = 'admin';
if (in_array($context['current_action'], array('contax', 'mgallery', 'search', 'admin', 'calendar', 'profile', 'mlist', 'register', 'login', 'help', 'pm', 'forum', 'form')))
$current_action = $context['current_action'];
if ($context['current_action'] == 'search2')
$current_action = 'search';
if ($context['current_action'] == 'theme')
$current_action = isset($_REQUEST['sa']) && $_REQUEST['sa'] == 'pick' ? 'profile' : 'admin';

// Are we using right-to-left orientation?
if ($context['right_to_left'])
{
$first = 'last';
$last = 'first';
}
else
{
$first = 'first';
$last = 'last';
}

// Show the start of the tab section.
echo '
<div id="topmenu">
<ul>';
// Show the [home] button.
echo '<li><a' , $current_action=='home' ? ' class="current"' : '' , ' href="', $scripturl, '"><span>' , $txt[103] , '</span></a></li>';

// Show the [portfolio] button.
echo '<li><a' , $current_action=='mgallery' ? ' class="current"' : '' , ' href="', $scripturl, '?action=mgallery"><span>' , 'Портфолио' , '</span></a></li>';

// Show the [form] button.
echo '<li><a' , $current_action=='form' ? ' class="current"' : '' , ' href="', $scripturl, '?action=form;id=1"><span>' , 'Сделать заказ' , '</span></a></li>';

// Show the [contax] button.
echo '<li><a' , $current_action=='contax' ? ' class="current"' : '' , ' href="', $scripturl, '?page=contax"><span>' , 'Контакты' , '</span></a></li>';
 
// Show the [about] button.
echo '<li><a' , $current_action=='about' ? ' class="current"' : '' , ' href="', $scripturl, '?page=about"><span>' , 'О себе' , '</span></a></li>';

// Show the [forum] button.
echo '<li><a' , $current_action=='forum' ? ' class="current"' : '' , ' href="http://xxxxxxxxxxxxxxxxxxx.ru/index.php/board,4.0.html"><span>' , 'Отзывы' , '</span></a></li>';

// How about the [search] button?
// if ($context['allow_search'])
// echo '<li><a' , $current_action=='search' ? ' class="current"' : '' , ' href="', //$scripturl, '?action=search"><span>' , $txt[182] , '</span></a></li>';
//
// The [calendar]!
if ($context['allow_calendar'])
echo '<li><a' , $current_action=='calendar' ? ' class="current"' : '' , ' href="', $scripturl, '?action=calendar"><span>' , $txt['calendar24'] , '</span></a></li>';

// Is the user allowed to administrate at all? ([admin])
if ($context['allow_admin'])
echo '<li><a' , $current_action=='admin' ? ' class="current"' : '' , ' href="', $scripturl, '?action=admin"><span>' , $txt[2] , '</span></a></li>';

// Edit Profile... [profile]
// if ($context['allow_edit_profile'])
// echo '<li><a' , $current_action=='profile' ? ' class="current"' : '' , ' href="', $scripturl, '?action=profile"><span>' , $txt[79] , '</span></a></li>';
//
// Go to PM center... [pm]
// if ($context['user']['is_logged'] && $context['allow_pm'])
// echo '<li><a' , $current_action=='pm' ? ' class="current"' : '' , ' href="', //$scripturl, '?action=pm"><span>' , $txt['pm_short'] , ' ', $context['user']//['unread_messages'] > 0 ? '[<strong>'. $context['user']['unread_messages'] . //'</strong>]' : '' , '</span></a></li>';
//
// If the user is a guest, show [login] button.
// if ($context['user']['is_guest'])
// echo '<li><a ' , $current_action=='login' ? ' class="current"' : '' , ' href="', $scripturl, '?action=login"><span>' , $txt[34] , '</span></a></li>';
//
// If the user is a guest, also show [register] button.
// if ($context['user']['is_guest'])
// echo '<li><a ' , $current_action=='register' ? ' class="current"' : '' , ' //href="', $scripturl, '?action=register"><span>' , $txt[97] , '</span></a></li>';
//
// Otherwise, they might want to [logout]...
// if ($context['user']['is_logged'])
// echo '<li><a ' , $current_action=='logout' ? ' class="current"' : '' , 'href="', $scripturl, '?action=logout;sesc=', $context['session_id'], '"><span>' , $txt[108] , '</span></a></li>';

echo '
</ul>
</div>';

}

// Generate a strip of buttons.
function template_button_strip($button_strip, $direction = 'top', $force_reset = false, $custom_td = '')
{
global $settings, $buttons, $context, $txt, $scripturl;

// Create the buttons...
foreach ($button_strip as $key => $value)
{
if (isset($value['test']) && empty($context[$value['test']]))
{
unset($button_strip[$key]);
continue;
}
elseif (!isset($buttons[$key]) || $force_reset)
$buttons[$key] = '<a href="' . $value['url'] . '" ' .( isset($value['custom']) ? $value['custom'] : '') . '>' . $txt[$value['text']] . '</a>';

$button_strip[$key] = $buttons[$key];
}

if (empty($button_strip))
return '<td>&nbsp;</td>';

echo '
<td class="', $direction == 'top' ? 'main' : 'mirror', 'tab_' , $context['right_to_left'] ? 'last' : 'first' , '">&nbsp;</td>
<td class="', $direction == 'top' ? 'main' : 'mirror', 'tab_back">', implode(' &nbsp;|&nbsp; ', $button_strip) , '</td>
<td class="', $direction == 'top' ? 'main' : 'mirror', 'tab_' , $context['right_to_left'] ? 'first' : 'last' , '">&nbsp;</td>';
}
МышЫ плакали, кололись, но продолжали жрать кактус...

0daliska

#14
Вот этот кусок кода мне был нужен о Вас и именно с темы, как она имеется сейчас, ибо могли дополнительные моды видоизменить этот кусок и где-то еще внести изменения:
// Work out where we currently are.
   $current_action = 'home';
   if (in_array($context['current_action'], array('admin', 'ban', 'boardrecount', 'cleanperms', 'detailedversion', 'dumpdb', 'featuresettings', 'featuresettings2', 'findmember', 'maintain', 'manageattachments', 'manageboards', 'managecalendar', 'managesearch', 'membergroups', 'modlog', 'news', 'optimizetables', 'packageget', 'packages', 'permissions', 'pgdownload', 'postsettings', 'regcenter', 'repairboards', 'reports', 'serversettings', 'serversettings2', 'smileys', 'viewErrorLog', 'viewmembers')))
      $current_action = 'admin';
   if (in_array($context['current_action'], array('contax', 'mgallery', 'search', 'admin', 'calendar', 'profile', 'mlist', 'register', 'login', 'help', 'pm', 'forum', 'form')))
      $current_action = $context['current_action'];
   if ($context['current_action'] == 'search2')
      $current_action = 'search';
   if ($context['current_action'] == 'theme')
      $current_action = isset($_REQUEST['sa']) && $_REQUEST['sa'] == 'pick' ? 'profile' : 'admin';

Вот это объявляет Вашу кнопку home активной на всех возможных страницах, где не задано текущее местоположение...
   $current_action = 'home';


Кстати, портального кода у Вас здесь нет, хотя он пишется именно сюда...
Поскольку в силу установленных модов могут быть существенные различия, которые Вы можете посчитать несущественными, но которые все же влияют на то, что Вам посоветовать...
Когда задаете вопрос и хотите получить ответ, предоставляйте информацию без перепирательств... Если спрашивают, значит, надо... Я ж не из любопытства, наверное, спросила, а чтобы увидеть код в целом и писать в то, что у Вас есть, а не в то, что гипотетически может вдруг у Вас образоваться...

Какой мод Буго? У Буго появился новый мод, прописывающий активные кнопки? Или Вы сочли, что Custom Action Mod - это мод Буго? Внимательно посмотрите...

Теперь как В вашем случае должен выглядеть код:

Вот этот кусок кода:

// Work out where we currently are.
if (!
   $current_action = 'home';
if (in_array($context['current_action'], array('admin', 'ban', 'boardrecount', 'cleanperms', 'detailedversion', 'dumpdb', 'featuresettings', 'featuresettings2', 'findmember', 'maintain', 'manageattachments', 'manageboards', 'managecalendar', 'managesearch', 'membergroups', 'modlog', 'news', 'optimizetables', 'packageget', 'packages', 'permissions', 'pgdownload', 'postsettings', 'regcenter', 'repairboards', 'reports', 'serversettings', 'serversettings2', 'smileys', 'viewErrorLog', 'viewmembers')))
      $current_action = 'admin';
   if (in_array($context['current_action'], array('contax', 'mgallery', 'search', 'admin', 'calendar', 'profile', 'mlist', 'register', 'login', 'help', 'pm', 'forum', 'form')))
      $current_action = $context['current_action'];

Заменяем на этот:
// Work out where we currently are.
if ((isset($_REQUEST['page'])) && ($_REQUEST['page'] == 'contax'))
{
$current_action = 'contax';
}
else
{
$current_action = 'home';
}
if (in_array($context['current_action'], array('admin', 'ban', 'boardrecount', 'cleanperms', 'detailedversion', 'dumpdb', 'featuresettings', 'featuresettings2', 'findmember', 'maintain', 'manageattachments', 'manageboards', 'managecalendar', 'managesearch', 'membergroups', 'modlog', 'news', 'optimizetables', 'packageget', 'packages', 'permissions', 'pgdownload', 'postsettings', 'regcenter', 'repairboards', 'reports', 'serversettings', 'serversettings2', 'smileys', 'viewErrorLog', 'viewmembers')))
      $current_action = 'admin';
   if (in_array($context['current_action'], array('mgallery', 'search', 'admin', 'calendar', 'profile', 'mlist', 'register', 'login', 'help', 'pm', 'forum', 'form')))
      $current_action = $context['current_action'];



Менюшка при этом должна выглядеть в том виде, в каком она у Вас в коде сделана (там менять уже ничего не нужно!!!):
То есть все, что советовала писать ранее (в предыдущих топиках) - писать не надо, все должно и так заработать правильно с учетом изменений, которые внесены... и на основании кода Вашего форума, который Вы предоставили
Уехала отдыхать. Сейчас без интернета до 1 августа. Приеду - выполню все обещания
® For members of Russian community (simplemachines.ru) only

Stern

Преогромнейшее вам спасибо, Odaliska!
Не отвлекаясь на вопросы, не имеющие никакого отношения к обсуждаемой нами (а интересной, смею предположить, всем без исключения пользователям SMF) теме, идём далее.

Следующий код.
В нём СимплеПортал прописался.

И, если в предыдущем варианте, чтобы корректно отобразить, к примеру, кнопку Галереи, достаточно было добавить media (mgallery) в перечень actions в строчке  if (in_array($context['current_action'], array('search', 'admin',...,
то в данном случае сделать её активной во ВСЕХ местах Галереи удалось только прописыванием отдельной конструкции:

if ($context['current_action'] == 'media')
$current_action = 'media';

      
Вопрос:
Как в этом случае правильно прописать кнопки доп. страниц?
      
Сорри, забыл упомянуть, что речь, естественно, о файле index.template.php из папки рабочей темы форума.

// Show the menu up top. Something like [home] [help] [profile] [logout]...
function template_menu()
{
global $context, $settings, $options, $scripturl, $txt;

// Work out where we currently are.
global $modSettings;
$current_action = $modSettings['sp_portal_mode'] == 3 && empty($context['standalone']) && empty($context['disable_sp']) ? 'forum' : 'home';
if (in_array($context['current_action'], array('admin', 'ban', 'boardrecount', 'cleanperms', 'detailedversion', 'dumpdb', 'featuresettings', 'featuresettings2', 'findmember', 'maintain', 'manageattachments', 'manageboards', 'managecalendar', 'managesearch', 'membergroups', 'modlog', 'news', 'optimizetables', 'packageget', 'packages', 'permissions', 'pgdownload', 'postsettings', 'regcenter', 'repairboards', 'reports', 'serversettings', 'serversettings2', 'smileys', 'viewErrorLog', 'viewmembers')))
$current_action = 'admin';
if (in_array($context['current_action'], array('search', 'admin', 'calendar', 'profile', 'mlist', 'register', 'login', 'help', 'pm', 'forum', 'invite', 'links', 'public', 'about')))
$current_action = $context['current_action'];
if ($context['current_action'] == 'search2')
$current_action = 'search';
if (empty($context['disable_sp']) && (isset($_GET['board']) || isset($_GET['topic']) || in_array($context['current_action'], array('unread', 'unreadreplies', 'recent', 'stats', 'who'))) && in_array($modSettings['sp_portal_mode'], array(1, 3)))
$current_action = 'forum';
if ($context['current_action'] == 'media')
$current_action = 'media';
if ($context['current_action'] == 'links')
$current_action = 'links';
if ($context['current_action'] == 'theme')
$current_action = isset($_REQUEST['sa']) && $_REQUEST['sa'] == 'pick' ? 'profile' : 'admin';

// Are we using right-to-left orientation?
if ($context['right_to_left'])
{
$first = 'last';
$last = 'first';
}
else
{
$first = 'first';
$last = 'last';
}

// Show the start of the tab section.
echo '
  <ul>';

// Show the [home] button.
echo '<li', $current_action == 'home' ? ' id="active"' : '', '><a href="', $scripturl, '">' , 'Старт' , '</a></li>';

// The [about]!
echo '<li', $current_action == 'about' ? ' id="active"' : '', '><a href="', $scripturl, '?page=about">' , 'Эбаут' , '</a></li>';

// Show the [forum] button.
echo '<li', $current_action == 'forum' ? ' id="active"' : '', '><a href="', $scripturl, '?action=forum">' , 'Тексты' , '</a></li>';

// Show the [media] button.
// Aeva Media
// Recalculate number of unseen items
global $user_info;

if (!empty($user_info['aeva_unseen']) && $user_info['aeva_unseen'] == -1)
{
global $sourcedir;
require_once($sourcedir . '/Aeva-Subs.php');
aeva_loadSettings();
}

$aeva_unseen = !allowedTo('aeva_access_unseen') || empty($user_info['aeva_unseen']) || $user_info['aeva_unseen'] == -1 ? 0 : $user_info['aeva_unseen'];

if (allowedTo('aeva_access'))
echo '<li', $current_action == 'media' ? ' id="active"' : '', '><a href="', $scripturl, '?action=media">' , 'Фото' , $aeva_unseen ? '</a> <a href="' . $scripturl . '?action=media;sa=unseen">[<b>' . $aeva_unseen . '</b>]' : '', '</a></li>';

// The [calendar]!
if ($context['allow_calendar'])
echo '<li', $current_action == 'calendar' ? ' id="active"' : '', '><a href="', $scripturl, '?action=calendar">' , 'Даты' , '</a></li>';

    // The [public]!
echo '<li', $current_action == 'public' ? ' id="active"' : '', '><a href="', $scripturl, '?page=public_release">' , 'Пресса' , '</a></li>';

// The [links]!
echo '<li', $current_action == 'links' ? ' id="active"' : '', '><a href="', $scripturl, '?page=links">' , 'Линки' , '</a></li>';

// Invite MOD.
if (allowedTo('invite'))
    echo '<li', $current_action == 'invite' ? ' id="active"' : '', '><a href="', $scripturl, '?action=invite">' , 'Вэлкам' , '</a></li>';

// How about the [search] button?
if ($context['allow_search'])
echo '<li', $current_action == 'search' ? ' id="active"' : '', '><a href="', $scripturl, '?action=search">' , $txt[182] , '</a></li>';

// Show the [help] button.
echo '<li', $current_action == 'help' ? ' id="active"' : '', '><a href="', $scripturl, '?action=help">' , 'Хелп' , '</a></li>';

// Is the user allowed to administrate at all? ([admin])
if ($context['allow_admin'])
echo '<li', $current_action == 'admin' ? ' id="active"' : '', '><a href="', $scripturl, '?action=admin">' , 'Админ' , '</a></li>';

// Edit Profile... [profile]
if ($context['allow_edit_profile'])
echo '<li', $current_action == 'profile' ? ' id="active"' : '', '><a href="', $scripturl, '?action=profile">' , $txt[79] , '</a></li>';

// Go to PM center... [pm]
if ($context['user']['is_logged'] && $context['allow_pm'])
echo '<li', $current_action == 'pm' ? ' id="active"' : '', '><a href="', $scripturl, '?action=pm">' , 'ЛС' , ' ', $context['user']['unread_messages'] > 0 ? '[<strong>'. $context['user']['unread_messages'] . '</strong>]' : '' , '</a></li>';

// If the user is a guest, show [login] button.
if ($context['user']['is_guest'])
echo '<li', $current_action == 'login' ? ' id="active"' : '', '><a href="', $scripturl, '?action=login">' , $txt[34] , '</a></li>';

// If the user is a guest, also show [register] button.
// if ($context['user']['is_guest'])
// echo '<li', $current_action == 'register' ? ' id="active"' : '', '><a href="', //$scripturl, '?action=register">' , $txt[97] , '</a></li>';
//
// Otherwise, they might want to [logout]...
if ($context['user']['is_logged'])
echo '<li', $current_action == 'logout' ? ' id="active"' : '', '><a href="', $scripturl, '?action=logout;sesc=', $context['session_id'], '">' , $txt[108] , '</a></li>';
echo '
  </ul>';

}

// Generate a strip of buttons.
function template_button_strip($button_strip, $direction = 'top', $force_reset = false, $custom_td = '')
{
global $settings, $buttons, $context, $txt, $scripturl;

// Create the buttons...
foreach ($button_strip as $key => $value)
{
if (isset($value['test']) && empty($context[$value['test']]))
{
unset($button_strip[$key]);
continue;
}
elseif (!isset($buttons[$key]) || $force_reset)
$buttons[$key] = '<a href="' . $value['url'] . '" ' .( isset($value['custom']) ? $value['custom'] : '') . '>' . $txt[$value['text']] . '</a>';

$button_strip[$key] = $buttons[$key];
}

if (empty($button_strip))
return '<td> </td>';

echo '
<td class="', $direction == 'top' ? 'main' : 'mirror', 'tab_' , $context['right_to_left'] ? 'last' : 'first' , '"> </td>
<td class="', $direction == 'top' ? 'main' : 'mirror', 'tab_back">', implode('  |  ', $button_strip) , '</td>
<td class="', $direction == 'top' ? 'main' : 'mirror', 'tab_' , $context['right_to_left'] ? 'first' : 'last' , '"> </td>';
}

МышЫ плакали, кололись, но продолжали жрать кактус...

0daliska

Цитата: Stern от 21 января 2011, 16:17:45
      
Вопрос:
Как в этом случае правильно прописать кнопки доп. страниц?
      
Сорри, забыл упомянуть, что речь, естественно, о файле index.template.php из папки рабочей темы форума.

Вот это изменить:
// Show the menu up top. Something like [home] [help] [profile] [logout]...
function template_menu()
{
global $context, $settings, $options, $scripturl, $txt;

// Work out where we currently are.
global $modSettings;
$current_action = $modSettings['sp_portal_mode'] == 3 && empty($context['standalone']) && empty($context['disable_sp']) ? 'forum' : 'home';

на вот это:
// Show the menu up top. Something like [home] [help] [profile] [logout]...
function template_menu()
{
global $context, $settings, $options, $scripturl, $txt;

// Work out where we currently are.
global $modSettings;
if ((isset($_REQUEST['page'])) && in_array($_REQUEST['page'], array('about', 'public_release', 'links')))
{
$current_action = $_REQUEST['page'];
}
else
{
$current_action = $modSettings['sp_portal_mode'] == 3 && empty($context['standalone']) && empty($context['disable_sp']) ? 'forum' : 'home';
}

;)
Уехала отдыхать. Сейчас без интернета до 1 августа. Приеду - выполню все обещания
® For members of Russian community (simplemachines.ru) only

Stern

Преогромнейшее спасибо, Odaliska!

Завершающий вопрос в данной теме:

а если нам требуется дать прямую ссылку не на action, не на page, а на определённый раздел форума ( к примеру - http://xxxxxxxxxxxxxxx.ru/index.php/board,4.0.html) - возможно ли воспользоваться советом по второму варианту, или это решается другим способом?
МышЫ плакали, кололись, но продолжали жрать кактус...

0daliska

Цитата: Stern от 21 января 2011, 19:56:27
Преогромнейшее спасибо, Odaliska!

Завершающий вопрос в данной теме:

а если нам требуется дать прямую ссылку не на action, не на page, а на определённый раздел форума ( к примеру - http://xxxxxxxxxxxxxxx.ru/index.php/board,4.0.html) - возможно ли воспользоваться советом по второму варианту, или это решается другим способом?
Почти также, только проверку через $context['current_board']  делать лучше в этом случае...
Это Вам в качестве контрольной работы по пройденному материалу и будет домашним заданием...
Сделаете, получите рабочий вариант - поделитесь здесь решением...
Все, что Вам требуется для решения данной задачи у Вас имеется :)
Удачи! Ждем результатов  ;)
Уехала отдыхать. Сейчас без интернета до 1 августа. Приеду - выполню все обещания
® For members of Russian community (simplemachines.ru) only