Добавление кнопки в подменю на главной 2.0

Автор chilly86, 06 января 2012, 18:25:04

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

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

chilly86

Частенько мне приходится менять тему оформления для себя, что бы посмотреть, корректно ли все устанавливается и в других темах оформления. Поэтому я решил себе облегчить труд и добавить ссылку "Внешний вид форума" в меню "Профиль" на Главной странице.

Решил написать небольшой мануальчик, по добавлению кнопки в подменю на главной странице



Эта инструкция верна для дефолтной темы оформления и версии форума 2.0 и выше.

За вывод кнопок и подкнопок отвечает этот кусок кода в файле Subs.php

// All the buttons we can possible want and then some, try pulling the final list of buttons from cache first.
if (($menu_buttons = cache_get_data('menu_buttons-' . implode('_', $user_info['groups']) . '-' . $user_info['language'] . '-' . empty($context['disable_sp']), $cacheTime)) === null || time() - $cacheTime <= $modSettings['settings_updated'])
{
$buttons = array( //Главная
'home' => array(
'title' => $txt['home'],
'href' => $modSettings['sp_portal_mode'] == 3 && empty($context['disable_sp']) ? $modSettings['sp_standalone_url'] : $scripturl,
'show' => true,
'sub_buttons' => array(
),
'is_last' => $context['right_to_left'],
),
'forum' => array( //Форум
'title' => empty($txt['sp-forum']) ? 'Forum' : $txt['sp-forum'],
'href' => $scripturl . ($modSettings['sp_portal_mode'] == 1 && empty($context['disable_sp']) ? '?action=forum' : ''),
'show' => in_array($modSettings['sp_portal_mode'], array(1, 3)) && empty($context['disable_sp']),
'sub_buttons' => array(
),
),
'help' => array( //Помощь
'title' => $txt['help'],
'href' => $scripturl . '?action=help',
'show' => true,
'sub_buttons' => array(
),
),
'search' => array( //Поиск
'title' => $txt['search'],
'href' => $scripturl . '?action=search',
'show' => $context['allow_search'],
'sub_buttons' => array(
),
),
'admin' => array( //Админка
'title' => $txt['admin'],
'href' => $scripturl . '?action=admin',
'show' => $context['allow_admin'],
'sub_buttons' => array(
'featuresettings' => array(
'title' => $txt['modSettings_title'],
'href' => $scripturl . '?action=admin;area=featuresettings',
'show' => allowedTo('admin_forum'),
),
'packages' => array(
'title' => $txt['package'],
'href' => $scripturl . '?action=admin;area=packages',
'show' => allowedTo('admin_forum'),
),
'errorlog' => array(
'title' => $txt['errlog'],
'href' => $scripturl . '?action=admin;area=logs;sa=errorlog;desc',
'show' => allowedTo('admin_forum') && !empty($modSettings['enableErrorLogging']),
),
'permissions' => array(
'title' => $txt['edit_permissions'],
'href' => $scripturl . '?action=admin;area=permissions',
'show' => allowedTo('manage_permissions'),
),
),
),
'moderate' => array( //Модерация
'title' => $txt['moderate'],
'href' => $scripturl . '?action=moderate',
'show' => $context['allow_moderation_center'],
'sub_buttons' => array(
'modlog' => array(
'title' => $txt['modlog_view'],
'href' => $scripturl . '?action=moderate;area=modlog',
'show' => !empty($modSettings['modlog_enabled']) && !empty($user_info['mod_cache']) && $user_info['mod_cache']['bq'] != '0=1',
),
'poststopics' => array(
'title' => $txt['mc_unapproved_poststopics'],
'href' => $scripturl . '?action=moderate;area=postmod;sa=posts',
'show' => $modSettings['postmod_active'] && !empty($user_info['mod_cache']['ap']),
),
'attachments' => array(
'title' => $txt['mc_unapproved_attachments'],
'href' => $scripturl . '?action=moderate;area=attachmod;sa=attachments',
'show' => $modSettings['postmod_active'] && !empty($user_info['mod_cache']['ap']),
),
'reports' => array(
'title' => $txt['mc_reported_posts'],
'href' => $scripturl . '?action=moderate;area=reports',
'show' => !empty($user_info['mod_cache']) && $user_info['mod_cache']['bq'] != '0=1',
'is_last' => true,
),
),
),
'profile' => array( //Профиль
'title' => $txt['profile'],
'href' => $scripturl . '?action=profile',
'show' => $context['allow_edit_profile'],
'sub_buttons' => array(
'summary' => array(
'title' => $txt['summary'],
'href' => $scripturl . '?action=profile',
'show' => true,
),
'account' => array(
'title' => $txt['account'],
'href' => $scripturl . '?action=profile;area=account',
'show' => allowedTo(array('profile_identity_any', 'profile_identity_own', 'manage_membergroups')),
),
'profile' => array(
'title' => $txt['forumprofile'],
'href' => $scripturl . '?action=profile;area=forumprofile',
'show' => allowedTo(array('profile_extra_any', 'profile_extra_own')),
'is_last' => true,
),
),
),
'pm' => array( //Личные сообщения
'title' => $txt['pm_short'],
'href' => $scripturl . '?action=pm',
'show' => $context['allow_pm'],
'sub_buttons' => array(
'pm_read' => array(
'title' => $txt['pm_menu_read'],
'href' => $scripturl . '?action=pm',
'show' => allowedTo('pm_read'),
),
'pm_send' => array(
'title' => $txt['pm_menu_send'],
'href' => $scripturl . '?action=pm;sa=send',
'show' => allowedTo('pm_send'),
'is_last' => true,
),
),
),
'calendar' => array( //Календарь
'title' => $txt['calendar'],
'href' => $scripturl . '?action=calendar',
'show' => $context['allow_calendar'],
'sub_buttons' => array(
'view' => array(
'title' => $txt['calendar_menu'],
'href' => $scripturl . '?action=calendar',
'show' => allowedTo('calendar_post'),
),
'post' => array(
'title' => $txt['calendar_post_event'],
'href' => $scripturl . '?action=calendar;sa=post',
'show' => allowedTo('calendar_post'),
'is_last' => true,
),
),
),
'login' => array( //Вход
'title' => $txt['login'],
'href' => $scripturl . '?action=login',
'show' => $user_info['is_guest'],
'sub_buttons' => array(
),
),
'register' => array( //Регистрация
'title' => $txt['register'],
'href' => $scripturl . '?action=register',
'show' => $user_info['is_guest'],
'sub_buttons' => array(
),
'is_last' => !$context['right_to_left'],
),
'logout' => array( //Выход
'title' => $txt['logout'],
'href' => $scripturl . '?action=logout;%1$s=%2$s',
'show' => !$user_info['is_guest'],
'sub_buttons' => array(
),
'is_last' => !$context['right_to_left'],
),
);


Разберем на запчасти один из блоков, например "Профиль":

'profile' => array( //Профиль-----------------------------------------------/
            'title' => $txt['profile'],                                     /    Главная кнопка "Профиль"
            'href' => $scripturl . '?action=profile',------------/   
            'show' => $context['allow_edit_profile'],-------/
            'sub_buttons' => array(  ------------------------------------  все что ниже - подменю "Профиля": "Основная информация"
               'summary' => array(
                  'title' => $txt['summary'],
                  'href' => $scripturl . '?action=profile',
                  'show' => true,
               ),
               'account' => array( ////////////////////////// Настройки аккаунта
                  'title' => $txt['account'],
                  'href' => $scripturl . '?action=profile;area=account',
                  'show' => allowedTo(array('profile_identity_any', 'profile_identity_own', 'manage_membergroups')),
               ),
               'profile' => array(//////////////////////////// Настройки профиля
                  'title' => $txt['forumprofile'],
                  'href' => $scripturl . '?action=profile;area=forumprofile',
                  'show' => allowedTo(array('profile_extra_any', 'profile_extra_own')),
                  'is_last' => true,
               ),

Т.е. нашу новую ссылку в подменю нужно вставлять ниже 'sub_buttons' => array(

Итак, что нам нужно:
1. Узнать ссылку на нужную Вам страницу (в моем случае ?action=profile;area=theme )
2. Придумать переменную для Вашего подменю (в моем случае forumview )
3. Подставить эти значения в блок (можно скопировать соседний), но из этого же подменю

вот что получилось у меня

'forumview' => array(
'title' => $txt['forumview'],
'href' => $scripturl . '?action=profile;area=theme',
'show' => true,
),


4. В файлик index.russian-utf8.php добавить перевод для forumview

$txt['forumview'] = 'Внешний вид форума';

Конечный код кнопки Профиль с подкнопками:

'profile' => array(
'title' => $txt['profile'],
'href' => $scripturl . '?action=profile',
'show' => $context['allow_edit_profile'],
'sub_buttons' => array(
'summary' => array(
'title' => $txt['summary'],
'href' => $scripturl . '?action=profile',
'show' => true,
),
'account' => array(
'title' => $txt['account'],
'href' => $scripturl . '?action=profile;area=account',
'show' => allowedTo(array('profile_identity_any', 'profile_identity_own', 'manage_membergroups')),
),
'profile' => array(
'title' => $txt['forumprofile'],
'href' => $scripturl . '?action=profile;area=forumprofile',
'show' => allowedTo(array('profile_extra_any', 'profile_extra_own')),
'is_last' => true,
),
'forumview' => array(
'title' => $txt['forumview'],
'href' => $scripturl . '?action=profile;area=theme',
'show' => true,
),
),
),


Гуру, если где то неверно написал - подправьте, плиз
to live is to die

0daliska

Как-то так:

    'profile' => array(
'title' => $txt['profile'],
'href' => $scripturl . '?action=profile',
'show' => $context['allow_edit_profile'],
'sub_buttons' => array(
'summary' => array(
'title' => $txt['summary'],
'href' => $scripturl . '?action=profile',
'show' => true,
),
'account' => array(
'title' => $txt['account'],
'href' => $scripturl . '?action=profile;area=account',
'show' => allowedTo(array('profile_identity_any', 'profile_identity_own', 'manage_membergroups')),
),
'profile' => array(
'title' => $txt['forumprofile'],
'href' => $scripturl . '?action=profile;area=forumprofile',
'show' => allowedTo(array('profile_extra_any', 'profile_extra_own')),
),
'forumview' => array(
'title' => $txt['forumview'],
'href' => $scripturl . '?action=profile;area=theme',
'show' => true,
'is_last' => true,
),
),
    ),

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

chilly86

ага, кажется понял
is last переносится в добавленные строки
а что это меняет? у меня и так работает

сорьки, за индекс.инглиш забыл :(
to live is to die

0daliska

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

chilly86

to live is to die