2016-08-11 1 views
2

tl; dr; mysql 또는 공식 moodle API를 통해 코스 모듈을 통해 코스 모듈 인스턴스를 가져 오려고합니다. 결국 내 솔루션은 오히려 부 끄 러운 것, 그래서 몇 가지 조언을 싶습니다.코스 모듈의 인스턴스를 검색하고 싶습니다.

하이 무 사람들

내가 mdl_course_modules의 각 행에 해당하는 코스 모듈 인스턴스를 검색하는 것을 시도하고, 이러한 맥락에서 인스턴스 mdl_quiz, mdl_wiki 또는 다른 course_modules 인스턴스에서 하나의 행이 될 것입니다.

내가 몇 가지를 시도, 내가 작업에 예상하고 있었다 :

function get_all_course_modules($course_id) { 
    global $DB; 
    $course = $DB->get_record('course', array('id' => $course_id)); 
    $mod_info = get_fast_modinfo($course); 
} 

내가 $ mod_info를에서 코스 모듈 인스턴스를 얻을 수 없습니다.

그래서 나는 의미, 내가 미리 다른 코스 모듈을 모두 잘 모릅니다 사실에 발견은 SQL 꽤 완성되지

SELECT course.id, course.fullname, cm.course, cm.section, m.name 
FROM mdl_course AS course 
JOIN mdl_course_modules AS cm ON cm.course = course.id 
JOIN mdl_modules AS m ON m.id = cm.module 
JOIN CONCAT('mdl_', m.name) AS module_type ON ...somethingsomething 
WHERE course.id = 2; 

대신 일부 사용자 지정 mysql을을하려고 노력하는 내가 course_module의 이름을 동적으로 가입시켜야 할 인스턴스 테이블을 선택하거나, 모든 가능한 코스 모듈 인스턴스 테이블에서 LEFT JOIN을 선택해야합니다.하지만 누군가가 새로운 코스에 입장하면 영원히 걸리고 작업을 중단하게됩니다. 모듈 인스턴스.

지금 다음을 수행 메신저 :

$result = array(); 
$course_mods = get_course_mods($course_id); 

if($course_mods) { 
    foreach($course_mods as $course_mod) { 
     $DB->get_records_sql('some sql that selects the instance'); 
    } 
} 

return $result; 

코드의이 마지막 부분은 결국 일을, 내가 동적으로 $ course_mod-로 $의 course_mod 변수에서 쿼리를 만들 수 할 수있을 것이다 것> 인스턴스를 , $ course_mod-> mod_name 등등.

그러나 이것은 힘든 것 같아요. 여러분 중 누구라도 쉽게 course_module 인스턴스를 얻는 데 성공했습니다.

감사합니다.

+0

달성하고자하는 바를 정확히 설명하면 도움이 될 수 있습니다. 각 액티비티 인스턴스의 대부분의 필드는 액티비티 자체의 내부에만 관련이 있습니다. 모든 유형과 관련된 일반 필드는 get_fast_modinfo ($ courseid) -> get_cms()를 통해 사용할 수 있습니다. – davosmith

+0

코스 모듈의 시작일은 다음과 같습니다. 활동 내부에 숨겨진 내용 :-) – DenLilleMand

+0

시작 날짜는 특정 활동 유형에만 관련이 있으므로 각 활동을 처리하기 위해 사용자 정의 코드가 필요합니다. get_fast_modinfo는 강좌에 사용 된 모듈 유형의 ​​목록을 제공하고 시작 날짜를 얻으려는 모듈로 필터링 한 다음 지원하려는 모든 모듈 유형을 사용하여 동적으로 SQL 문을 작성합니다 (COALESCE를 사용하여 다른 테이블에서 시간 데이터를 수집하십시오.) – davosmith

답변

0

이것은 내가 코스 모듈 인스턴스를 검색하는 데 사용 된 함수입니다. 그 모듈은 너무 예쁘지는 않지만 무엇이든간에.

function get_all_course_modules($course_id) { 
global $DB; 
$course_mods = get_course_mods($course_id); 
$result = array(); 
if($course_mods) { 
    foreach($course_mods as $course_mod) { 
     $course_mod->course_module_instance = $DB->get_record($course_mod->modname, array('id' =>$course_mod->instance)); 
     $result[$course_mod->id] = $course_mod; 
    } 
} 
return $result; 
} 
관련 문제