Moodle多选:链接项目

时间:2014-10-10 00:08:49

标签: moodle

我尝试在Moodle数据库中使用多选表单元素来生成标记列表。我希望这些标签链接到显示过滤结果的相关搜索页面。

以下模板代码适用于单个标记的项目,但对于包含多个标记的项目则无效:

<a href='/view.php?mode=list&filter=[[Tags]]'>[[Tags]]</a>

有没有办法在多选中循环项目?类似的东西:

[[for Tag in Tags]] <a href='/view.php?mode=list&filter=[[Tag]]'>[[Tag]]</a> [[/for]]

2 个答案:

答案 0 :(得分:0)

我不确定使用上述方法有一种简单的方法可以做到这一点。虽然,我已经破解了一些javascript来完成同样的事情:

function init() {
    var tags = document.getElementsByClassName('tags');
    for (var i=0; i<tags.length; i++) {
        tags[i].innerHTML = tags[i].innerHTML.replace(/\w[\w\s]+?(?=<br>)/g, function(n) {
            return "<a href='view.php?d=16&mode=list&perpage=10&filter=1&f_81%5B%5D="+ escape(n) + "'>" + n + "</a>";
        });
    }
};
window.onload = init;

答案 1 :(得分:0)

假设你有edit_form.php这样的东西

defined('MOODLE_INTERNAL') || die;

require_once($CFG->libdir . '/formslib.php');

class edit_form extends moodleform {

    public function definition() {
        $mform =& $this->_form;

        $options = array('red' => 'red', 'blue' => 'blue', 'green' => 'green');
        $select = $mform->addElement('select', 'tags', get_string('tags'), $options);
        $select->setMultiple(true);

        $this->add_action_buttons(false, get_string('submit'));
    }

}

然后在edit.php文件

中使用此功能
require_once(dirname(__FILE__) . '/edit_form.php');

...

$mform = new edit_form();

$mform->display();

if ($formdata = $mform->get_data()) {
    foreach ($formdata->tags as $tag) {
        $url = new moodle_url('/view.php', array('mode' => 'list', 'tag' => $tag));
        echo html_writer::link($url, $tag);
    }
}