Любой плагин может создавать как дополнительные публичные страницы сайта, так и персональные личные страницы пользователей. В первом случае не мешало бы сделать интеграцию в уровни хлебных крошек, во втором - вывод ссылки на страницу в меню пользователя.
Как в 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);