加載我有2名選擇列表Moodle的HTML Quickform選擇選項不正確
- ausers - 列出所有可用的用戶
- susers - 顯示選定的用戶
我用moodles global $SESSION
變量來存儲用戶選擇項目 ,然後使用將所選項目加載到用戶列表中 變量。 當用戶點擊「Add user」按鈕時會發生這種情況。
我正在使用會話變量來保存選擇,因爲我需要多次發佈 表單。 (表單將有另一個當然選擇列表)
我不能使用JavaScript來實現這一點,因爲我的客戶希望腳本在沒有js支持的情況下運行。
注:
我的代碼加載正確的選項 但顯示當前
$SESSION
數據 並在 選擇list.I以前$SESSION
數據認爲問題可能是的刷新問題選擇元素。 我用下面的語句來加載所選用戶在susers元素$susers_el->load($susers);
爲了更好地說明問題:
「添加用戶」按鈕,單擊
選擇用戶(ausers) 1.Joe 2.James 選擇列表(susers) 1.Joe 2.James
當我想添加其他用戶到susers列出以下情況: 「添加用戶」 按鈕,單擊
選定的用戶(ausers) 3.Lance 選擇列表(susers) 1.Joe 2.James 1.Joe 2.詹姆斯 3.蘭斯
以下是當前的代碼,任何幫助或建議,非常感謝。
class learner_progress_form extends moodleform {
function definition() {
global $SESSION, $CFG;
fb('Create form');
$mform = & $this->_form;
//User Section
$mform->addElement('header', 'site_users', 'Site Users');
$objs[] = array();
$ausers[] = array();
//All users & courses sessions
$SESSION->all_users = $this->get_all_users();
//Available users $ courses
$ausers = $SESSION->all_users;
//Form design
$objs[0] =& $mform->createElement('select', 'ausers', 'Available users', $ausers, 'size="15"');
$objs[0]->setMultiple(true);
$objs[1] =& $mform->createElement('select', 'susers', 'Selected users', null, 'size="15"');
$objs[1]->setMultiple(true);
$grp =& $mform->addElement('group', 'usersgrp', 'Users', $objs, ' ', false);
$objs = array();
$objs[] =& $mform->createElement('submit', 'uaddsel','Add');
$objs[] =& $mform->createElement('submit', 'uremovesel', 'Remove');
$grp =& $mform->addElement('group', 'ubuttonsgrp', null, $objs, array(' ', '<br />'), false);
$renderer =& $mform->defaultRenderer();
$template = '<label class="qflabel" style="vertical-align:top">{label}</label> {element}';
$renderer->setGroupElementTemplate($template, 'usersgrp');
//Button Section
$mform->addElement('header','actions','Generate report');
$objs = array();
$objs[] =& $mform->createElement('submit', 'submit', 'Go');
$mform->addElement('group', 'actionsgrp', 'Generate report with selected data', $objs, ' ', false);
}
function definition_after_data() {
global $SESSION;
fb('definition after data');
$mform =& $this->_form;
//Get users group and elements
$usersgrp =& $mform->getElement('usersgrp')->getElements();
//Selected Users
$susers_el =& $usersgrp[1]; //selected users
$susers = $SESSION->susers;
$susers_el->load($susers);
}
function get_all_users() {
global $SESSION, $CFG;
$ausers = array();
$userlist = get_records_sql(
"select id, firstname, lastname, email
from {$CFG->prefix}user
where id NOT IN (0,1,2)"); //exclude empty,admin & guest
foreach($userlist as $user){
if (!empty($user)) {
$ausers[$user->id] = $user->firstname." ".$user->lastname;
}
}
//sort($ausers);
return $ausers;
}
/**
* Add user(s) selections to list
* $SESSION->s_users : Stores previous selections
* TBD : Seems to be a refresh bug
* TOFIX : Duplication - possible refresh bug
**/
function set_user_selections() {
global $SESSION, $CFG;
$usergrp =& $this->_form->getElement('usersgrp')->getElements();
$ausers_el =& $usergrp[0];
$susers_el =& $usergrp[1];
$susers = $ausers_el->getSelected();
$ausers = $SESSION->all_users;
$users = array();
//build selected users array
foreach ($susers as $user=>$id) {
$users[$id] = $ausers[$id];
}
//Check selected user sessions
if (isset($SESSION->susers))
{
//Remove duplicate selections
foreach ($SESSION->susers as $id=>$val) {
if (in_array($id, $users))
{
unset($SESSION->susers[$id]);
}
}
$users = $SESSION->susers + $users;
}
$SESSION->susers = $users;
//asort($users);
fb('User being loaded in select list');
fb($users);
$susers_el->load($users);
}
什麼'get_all_users'嗎?碼? – cweiske 2011-05-02 14:18:24
嗨,我已經將get_all_users函數添加到上面的代碼示例。 – QCar 2011-05-02 16:42:46
對不起,我沒有看到你的問題的任何理由。如果您可以在可以單獨運行的腳本上重現問題,那將會很不錯。我也可以運行它。 – cweiske 2011-05-04 08:58:19