我试图从 URL 中提取一些数据并将其存储到我在 Moodle 中创建的表中,它在标题中显示了错误。我的目标是提取 cursos>curso 上属性“nome”内的所有值并将它们放在我的表 ecoclipaluno 上。 示例链接。构建 URL 的参数在更改时可以提供更多值来存储。或更少。
https://clip.unl.pt/sprs?lg=pt&year=2013&uo=97747&srv=rsu&p=1&tp=s&md=3&rs=8145&it=5&it=1030123459
function buildURL($year, $period, $typeperiod,$course)
{
return 'https://clip.unl.pt/sprs?lg=pt&year='.$year.'&uo=97747&srv=rsu&p='.$period.'&tp='.$typeperiod.'&md=3&rs='.$course.'&it=5&it=1030123459';
}
function doRequest_with_FileGetContents($url)
{
return file_get_contents($url);
}
function processXMLforCourse($xmlContent){
$xmlObj= new SimpleXMLElement($xmlContent);
$result=array();
foreach($xmlObj->unidade_curricular->cursos->curso as $curso){
$result[]= $curso->attributes()->nome;
}
return $result;
}
$context=get_context_instance(CONTEXT_COURSE,$courseid);
//$shortname=$course->shortname;
$idnumber=$course->idnumber;
$timecreated=$course->startdate;
$typeperiod='s';
if(date("m",$timecreated) >07 && date("m",$timecreated) <13){
$period='1';
$url=buildURL(date("Y",strtotime('+1 year',$timecreated)),$period,$typeperiod,$idnumber); // 1st semester
}
else{
$period='2';
$url=buildURL(date("Y",$timecreated),$period,$typeperiod,$idnumber); // 2nd semester
}
$content_b=doRequest_with_FileGetContents($url);
$dataClipCourse= processXMLforCourse($content_b);
$DB->insert_record('ecoclipaluno',$dataClipCourse);
从数据操作的Moodle API来看,方法insert_record有4个参数,最后2个是可选的,但它们都没有指定字段。我想将 $dataClipCourse 插入到字段 coursename 中。我怎样才能做到这一点?
array(8) { [0]=> object(SimpleXMLElement)#37 (1) { [0]=> string(54) "Licenciatura em Engenharia Informatica (Tronco comum)"} 1 => object(SimpleXMLElement)#36 (1) { [0]=> string(38) "Mestrado em Matemática e Aplicações"} 2 => object(SimpleXMLElement)#44 (1) { [0]=> string(92) "Mestrado em Matemática e Aplicações, Especialização em Álgebra, Lógica e Computação"} 3 => object(SimpleXMLElement)#45 (1) { [0]=> string(82) "Mestrado em Matemática e Aplicações, Especialização em Matemática Financeira"} [4]=> object(SimpleXMLElement)#46 (1) { [ 0]=> string(104) "Mestrado em Matemática e Aplicações, Especialização em Análise Numérica e Equações Diferenciais"} [5]=> object(SimpleXMLElement)#47 (1) { [0]=> string(114) "Mestrado数学和应用程序 - 专业、统计和操作研究"} [6]=> object(SimpleXMLElement)#48 (1) { [0]=> string(74) "Engenharia Informática 许可证,Perfil de Ciências da Engenharia "} [7]=> object(SimpleXMLElement)#49 (1) { [0]=> string(72) "Licenciatura em Engenharia Informatica, Perfil de Informatica Aplicada"} }
编辑:
最佳答案
insert_record() 的第二个参数需要是一个对象而不是数组,并且将字段名称作为属性。例如:
$result = new stdClass();
$result->codigo = xxx;
$result->qualificacao_atribuida = xxx;
http://docs.moodle.org/dev/Data_manipulation_API#Inserting_Records
编辑:我刚刚注意到 processXMLforCourse() 函数返回一个名称数组 - 所以也许是这样的
$dataClipCourse= processXMLforCourse($content_b);
foreach ($dataClipCourse as $nome) {
$data = new stdClass();
$data->nome = $nome->__toString();
$DB->insert_record('ecoclipaluno', $data);
}
关于moodle_database::insert_record_raw() 未找到字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22458438/