Любой плагин может создавать как дополнительные публичные страницы сайта, так и персональные личные страницы пользователей. В первом случае не мешало бы сделать интеграцию в уровни хлебных крошек, во втором - вывод ссылки на страницу в меню пользователя.
Как в MaxSite CMS плагину добавить свои пункты в меню пользователя и свои уровни в breadcrumbs?
Эта задача так или иначе всплывала раньше и решал ее через пень-колоду. Формальную постановку задачи получилось сделать при разработке плагина "Загрузка файлов комъюзерами". Плагин создает как страницу для просмотра загрузок другими пользователями, так и страницу для управления пользователем своими загрузками.
Свой пункт в меню комюзера для MaxSite CMS.
Эта задача решается на удивление легко.
Давайте посмотрим на содержимое файла-компонента _menu.php - можем это сделать прямо из админки.
Видно, что наша цель достигается при помощи хука "main_menu_add_comuser".
Пропишем в файле index.php плагина строчки:
# функция автоподключения плагина
function comuser_uploader_autoload($args = array())
{
mso_hook_add( 'main_menu_add_comuser', 'comuser_uploader_menu'); // добавление в меню ссылки на загрузки
*******
*******
*******
}
function comuser_uploader_menu()
{
*******
*******
*******
return NR . $profile_slug . '/uploads | ' . $uploads_title;
}
В результате чего получим красивый результат:

Добавление своих пунктов в хлебные крошки.
С хлебными крошками немного сложнее.
Посмотрим на содержимое файла-компонента _breadcrumbs.php - там нет ничего такого, что нам нужно.
Добавим несколько строчек кода (можем это сделать прямо из админки):
if (isset($breadcrumbs2))
{
echo $breadcrumbs2;
if (isset($breadcrumbs3))
{
echo $breadcrumbs3;
if (isset($breadcrumbs4))
{
echo $breadcrumbs4;
}
}
}
Теперь в файле, который в плагине отвечает за генерацию страницы сайта, пропишем строчки:
// для компонента хлебных крошек
$breadcrumbs2 = '<a class="i-angle-right mar10-l" href="' . getinfo('siteurl') . $profiles_slug . '">' . $options_template['profiles_title'] . '</a>';
$breadcrumbs3 = '<span class="i-angle-right mar10-l">' . $options_template['uploads_title'] .'</span>';
$breadcrumbs4 = '<span class="i-angle-right mar10-l bold">' . $comusers_nik .'</span>';
// начало вывода
require(getinfo('shared_dir') . 'main/main-start.php');
echo NR . '<div class="type type_users_form">' . NR;
Строчки должны быть обязательно перед вызовом main-start.php.
Теперь мы можем видеть такое:
Конечно, после каждого обновления MaxSite CMS необходимо будет снова добавлять строчки в компонент _breadcrumbs.php. Ну или же создать свой компонент.
Модифицированные компоненты из шаблона default MaxSiteCMS-103.
В архиве компоненты top1_1, _menu1 и _breadcrumbs1.
Скачать: components_tmb.zip.
Компонент _breadcrumbs1 выводит, заданные заранее переменные $breadcrumbs2(-4).
Компонент _menu1 содержит меню с перенесенным вправо пунктом меню пользователя.

Компоненты top1_1 изменен лишь для того чтобы он выводил не базовые, а измененные компоненты.
Версия MaxSite 106.
В текущей версии MaxSite (106) появился компонент breadcrumbs (не путать с рассмотренным выше _breadcrumbs).
Этот компонент позволяет добавлять свои элементы в вывод хлебных крошек (github.com/maxsite/cms/issues/393).
Поэтому пришлось добавить поддержку такого варианта в плагины: comuser_uploader, dialog, profile.
Получилось сразу три способа вывода хлебных крошек.
Вывод хлебных крошек шаблонными файлами самого плагина можно отключить, если осуществляется вывод компонентом.
В итоге код формирования хлебных крошек получился такой:
// хлебные крошки
$discussion_link = '<a href="' . $siteurl . $options['discussion_slug'] .'/' . $comment_discussion_id . '">' . $discussion_title . '</a>';
$comment_link = '<a href="' . $siteurl . $options['goto_slug'] . dialog_get_url($comment_discussion_id , $comment_id) . '" title ="' . $options['comment_page'] . '">' . $options['comment_number'] . $comment_id . '</a>';
// вывод отключается по опции
if ($options['bread_out'])
echo '<div class="breadcrumbs">' . $main_link . $options['breadcrumbs_razd'] . $discussion_link . $options['breadcrumbs_razd'] . $comment_link . $options['breadcrumbs_razd'] . $options['title_edit_comment_form'] . '</div>';
// для компонента хлебных крошек top1_1
$breadcrumbs2 = '<span class="i-angle-right mar10-l">' . $main_link .'</span>';
$breadcrumbs3 = '<span class="i-angle-right mar10-l">' . $discussion_link .'</span>';
$breadcrumbs4 = '<span class="i-angle-right mar10-l">' . $comment_link .'</span>';
$breadcrumbs3 = '<span class="i-angle-right mar10-l bold">' . $options['title_edit_comment_form'] .'</span>';
// для компонента хлебных крошек breadcrumbs
$comp_breadcrumbs_add = array();
$comp_breadcrumbs_add[$options['name']] = $siteurl . $options['main_slug'];
$comp_breadcrumbs_add[$discussion_title] = $siteurl . $options['discussion_slug'] .'/' . $comment_discussion_id;
$comp_breadcrumbs_add[$options['comment_number'] . $comment_id] = $siteurl . $options['goto_slug'] . dialog_get_url($comment_discussion_id , $comment_id);
$comp_breadcrumbs_add[$options['title_edit_comment_form']] = '';
// переворачиваем, если указано в опциях
if ($options['reverse_breadcrumbs']) array_reverse($comp_breadcrumbs_add);
mso_set_val('comp_breadcrumbs_add', $comp_breadcrumbs_add);












