Moodle 2.7 Нужно уметь создавать пользовательское меню для разных групп пользователей

0

Я работал над областью moodle 2.7, мое требование: я хотел показать 2 разных пользовательских меню для роли Учителя и Студента, в настоящее время я создал собственное меню в вариантах шаблона, но я понятия не имею, как создать несколько настраиваемых меню в moodle, до сих пор я пытался сделать это, выполнив поиск идентификатора группы, а затем применил оператор if для назначения пользовательского меню, но все равно никакого вывода, поэтому я прошу кто-нибудь помочь мне разобраться с этими проблемами.

Теги:
moodle

2 ответа

0
Лучший ответ

Вы можете расширить пользовательское меню - https://docs.moodle.org/dev/Extending_the_theme_custom_menu

Затем используйте has_capability() чтобы увидеть, может ли пользователь видеть элемент меню.

Что-то вроде этого (я не пробовал)

// theme/themename/renderers.php
class theme_themename_core_renderer extends core_renderer {

    protected function render_custom_menu(custom_menu $menu) {

        $context = context_system::instance();
        if (has_capability('local_plugin/menuname:view', $context)) {
            $branchlabel = get_string('menuname', 'local_myplugin');
            $branchurl   = new moodle_url('/local/myplugin/index.php');
            $branchtitle = $branchlabel;
            $branchsort  = 10000;

            $branch = $menu->add($branchlabel, $branchurl, $branchtitle, $branchsort);
         }

        return parent::render_custom_menu($menu);
    }
}
  • 0
    Рассел, сначала все .. Большое спасибо за то, что нашли время и дали идею, .. но позвольте мне попробовать это на моей машине ... так что я отредактировал файл renderers.php и изменил его правильно? я попробую сегодня и вернусь к вам
0

Рассел, ниже - код от renderes.php

<?php

/*

Эта программа является свободным программным обеспечением: вы можете распространять ее и/или изменять ее в соответствии с GNU General Public License, опубликованной Фондом свободного программного обеспечения, либо версией 3 Лицензии, либо (по вашему выбору) любой более поздней версии.

Эта программа распространяется в надежде, что она будет полезна, но БЕЗ КАКИХ-ЛИБО ГАРАНТИЙ; даже без подразумеваемой гарантии КОММЕРЧЕСКОЙ ЦЕННОСТИ или ПРИГОДНОСТИ ДЛЯ ОПРЕДЕЛЕННОЙ ЦЕЛИ. Дополнительную информацию см. В GNU General Public License.

Этот плагин является частью темы Archaius. @copyright 2013 Даниэль Мунэра Санчес

*/

class theme_archaius_core_renderer extends core_renderer {

/**
 * Prints a nice side block with an optional header.
 *
 * The content is described
 * by a {@link block_contents} object.
 *
 * @param block_contents $bc HTML for the content
 * @param string $region the region the block is appearing in.
 * @return string the HTML to be output.
 */
function block(block_contents $bc, $region) {

    $bc = clone($bc); // Avoid messing up the object passed in.
    if (empty($bc->blockinstanceid) || !strip_tags($bc->title)) {
        $bc->collapsible = block_contents::NOT_HIDEABLE;
    }
    if ($bc->collapsible == block_contents::HIDDEN) {
        $bc->add_class('hidden');
    }
    if (!empty($bc->controls)) {
        $bc->add_class('block_with_controls');
    }

    $skiptitle = strip_tags($bc->title);
    if (empty($skiptitle)) {
        $output = '';
        $skipdest = '';
    } else {
        $output = html_writer::tag('a', get_string('skipa', 'access', $skiptitle), array('href' => '#sb-' . $bc->skipid, 'class' => 'skip-block'));
        $skipdest = html_writer::tag('span', '', array('id' => 'sb-' . $bc->skipid, 'class' => 'skip-block-to'));
    }

     $title = '';
    if ($bc->title) {
        $title = html_writer::tag('h2', $bc->title);
    }

    $controlshtml = $this->block_controls($bc->controls);

    if ($title || $controlshtml) {
        $output .= html_writer::tag('div', html_writer::tag('div',  $title , array('class' => 'title')), array('class' => 'header-tab'));
    }

    $output .= html_writer::start_tag('div', $bc->attributes);

    if ($title || $controlshtml) {
        $output .= html_writer::tag('div', html_writer::tag('div', html_writer::tag('div', '', array('class'=>'block_action')). $title . $controlshtml, array('class' => 'title')), array('class' => 'header'));
    }

    $output .= html_writer::start_tag('div', array('class' => 'content'));
    if (!$title && !$controlshtml) {
        $output .= html_writer::tag('div', '', array('class'=>'block_action notitle'));
    }
    $output .= $bc->content;

    if ($bc->footer) {
        $output .= html_writer::tag('div', $bc->footer, array('class' => 'footer'));
    }

    $output .= html_writer::end_tag('div');


    $output .= html_writer::end_tag('div');

    if ($bc->annotation) {
        $output .= html_writer::tag('div', $bc->annotation, array('class' => 'blockannotation'));
    }
    $output .= $skipdest;

    $this->init_block_hider_js($bc);

    return $output;
}


/*
 * From boostrapbase
 * Overriding the custom_menu function ensures the custom menu is
 * always shown, even if no menu items are configured in the global
 * theme settings page.
 */
public function custom_menu($custommenuitems = '') {
    global $CFG;

    //TODO: Check this in a different way
    $langs = get_string_manager()->get_list_of_translations();
    if ( (count($langs) < 2) and (empty($CFG->custommenuitems))) {
        return '';
    }else{
        if (!empty($CFG->custommenuitems))
            $custommenuitems .= $CFG->custommenuitems;
        $custommenu = new custom_menu($custommenuitems, current_language());
        return $this->render_custom_menu($custommenu);
    }
}

// http://docs.moodle.org/dev/Extending_the_theme_custom_menu
protected function render_custom_menu(custom_menu $menu) {

    global $CFG;
    require_once($CFG->dirroot.'/course/lib.php');

    //navigation mycourses is no supported since 2.4
    if (isloggedin() && !isguestuser() && 
        $mycourses = enrol_get_my_courses(NULL, 'visible DESC, fullname ASC')) {  

        $branchlabel = get_string('mycourses') ;
        $branchurl   = new moodle_url('/course/index.php');
        $branchtitle = $branchlabel;
        $branchsort  = 8000 ;
        $branch = $menu->add($branchlabel, $branchurl, $branchtitle, $branchsort);

        foreach ($mycourses as $mycourse) {
            $branch->add($mycourse->shortname, new moodle_url(
                '/course/view.php', 
                array('id' => $mycourse->id)), 
                $mycourse->fullname
            );
        }
    }

    $course_id = $this->page->course->id;
    if (isloggedin() && $course_id > 1) {
        $branchlabel = get_string('grades');
        $branchurl   = new moodle_url('/grade/report/index.php?id='.$this->page->course->id);
        $branchtitle = $branchlabel;
        $branchsort  = 9000;
        $branch = $menu->add($branchlabel, $branchurl, $branchtitle, $branchsort);
    }

    //From boostrapbase

    // TODO: eliminate this duplicated logic, it belongs in core, not
    // here. See MDL-39565.
    $addlangmenu = true;
    $langs = get_string_manager()->get_list_of_translations();
    if (
        count($langs) < 2
        or empty($CFG->langmenu)
        or ($this->page->course != SITEID 
        and !empty($this->page->course->lang))) {

        $addlangmenu = false;
    }

    if ($addlangmenu) {
        $branchlabel =  get_string('language');
        $branchurl = new moodle_url('#');
        $branch = $menu->add($branchlabel, $branchurl, $branchlabel, 10000);

        foreach ($langs as $langtype => $langname) {
            $branch->add($langname, 
                new moodle_url(
                    $this->page->url, 
                    array('lang' => $langtype)
                ), 
                $langname
            );
        }
    }
    return parent::render_custom_menu($menu);
}

protected function render_custom_menu_item(custom_menu_item $menunode) {
    $transmutedmenunode = new theme_archaius_transmuted_custom_menu_item($menunode);
    return parent::render_custom_menu_item($transmutedmenunode);
}

}

  • 0
    Рассел, я хочу показать меню, как показано ниже. пример: Учитель Меню: Главная | Курсы | Классы | Календарь | Отчеты ученика Меню: Главная | Курсы | Классы | Профиль | Пожалуйста, дайте мне знать, как я могу сделать это из вашего кода ..
  • 0
    Привет, я действительно не вижу много информации о Moodle, просто для того, чтобы создать несколько меню для пользователей, мы изо всех сил стараемся, но ничего не получаем ... я думаю, что Moodle не является хорошей основой ...
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню