Moodle multi-select:链接项目

Moodle multi-select:链接项目,moodle,Moodle,我试图在Moodle数据库中使用multi-select表单元素来生成标记列表。我希望这些标签链接到显示过滤结果的相关搜索页面 以下模板代码适用于单个标记的项目,但不适用于具有多个标记的项目: <a href='/view.php?mode=list&filter=[[Tags]]'>[[Tags]]</a> 有没有一种方法可以在多选模式中循环项目?比如: [[for Tag in Tags]] <a href='/view.php?mode=list

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

以下模板代码适用于单个标记的项目,但不适用于具有多个标记的项目:

<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]]
[[for Tags in Tags][[/for]]

我不确定使用上述方法是否有一种简单的方法来实现这一点。尽管如此,我还是拼凑了一些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;
函数init(){
var tags=document.getElementsByClassName('tags');

对于(var i=0;i,假设您有一个
edit\u 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);
    }
}