2014-10-10 3 views
0

Я пытаюсь использовать элемент формы multi-select в базе данных Moodle для создания списка тегов. Я бы хотел, чтобы эти теги ссылались на соответствующую страницу поиска, отображающую отфильтрованные результаты.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]] 

ответ

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; 
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); 
    } 
} 
Смежные вопросы