【问题标题】:Link directly to Moodle courses from PHP script从 PHP 脚本直接链接到 Moodle 课程
【发布时间】:2021-03-25 06:39:12
【问题描述】:

由于论坛中的优秀答案,我能够通过 sql 找出某个 Moodle 用户注册了哪些 Moodle 课程。

我现在已经在一个 PHP 脚本中使用了这个帮助,它也非常好用。

//Jetzt erfolgt die Überprüfung und Ausgabe, in welchen Kursen der Benutzer eingeschrieben ist. Die User-Identifikation erfolgt anhzand der user_id
                $sql = mysqli_query($db,"
                                    SELECT DISTINCT CONCAT(u.firstname, ' ' ,u.lastname) AS Student, course.fullname AS Course
                                    FROM mdl_course AS course 
                                    JOIN mdl_enrol AS en ON en.courseid = course.id
                                    JOIN mdl_user_enrolments AS ue ON ue.enrolid = en.id
                                    JOIN mdl_user AS u ON ue.userid = u.id
                                    WHERE u.id = '$user_id[$i]'"
                                    );
            
                
                $sql_durchfuehren=mysqli_fetch_row($sql);                   
                //echo is_array($sql_durchfuehren) ? "Ja-Array" : "Nein kein Array";
                if (is_array($sql_durchfuehren))
                {   
                    echo "Der Benutzer ist in die folgenden Kurse eingeschrieben: <br>";                
                    while($row = mysqli_fetch_array($sql))
                    {
                $course_name = $row['Course'];
                    echo $course_name." <br>";      
                    }   
                }
                else 
                {
                    echo "<br>Der Benutzer ".$first_name[$i]." ".$last_name[$i]." ist in keinen Kurs eingeschrieben!<br>";
                }

现在我使用脚本输出各个用户注册的课程。

挑战:现在我想直接链接用户注册的课程。

所以: 用户 Tim Müller 已注册商务英语课程。 通过点击“商务英语”,您应该直接进入课程。

我怎样才能做到这一点?

感谢和最好的问候 你很棒!!! D-T

【问题讨论】:

  • 好吧,您需要让 PHP 回显一个指向该课程 URL 的 HTML 超链接。除此之外,我们无法真正帮助您,因为我们不知道 URL 格式。此外,您是否知道如何制作超链接也不清楚(但如果不知道,您可以在任何 HTML 指南中查找语法)。

标签: php html hyperlink moodle


【解决方案1】:

如果这是 Moodle 代码,那么您已经编写的内容存在许多问题 - 您确实应该使用内置数据库 API 来触发 SQL 查询,而不是 mysqli_* 函数。这部分是从安全角度考虑的(例如,您的第一个 SQL 查询看起来有受到 SQL 注入攻击的风险,除非您提前做一些工作来清理 $user_id[$i]),但它也有助于您的支持 Moodle 本身支持的所有可能的数据库引擎的代码。

你需要的第一件事就是 courseid,所以我建议你更新你的 SQL SELECT 语句来添加:

 ..., course.fullname AS Course, course.id AS courseid

关于生成课程的 URL,如果您正在编写 Moodle 代码,那么“正确”的解决方案是使用此代码:

$format = course_get_format($row['courseid']);
$url = $format->get_view_url(null);
echo html_writer::link($url, $course_name);

对此的一个小捷径(适用于我在 Moodle 中遇到的每种课程格式)是:

$url = new moodle_url('/course/view.php', ['id' => $row['courseid']]);
echo html_writer::link($url, $course_name);

或者,如果您根本不使用 Moodle 代码,而只是编写一些直接从 Moodle 数据库中提取数据的东西:

$siteurl = 'put the URL of your site here, without the ending /';
$url = $siteurl.'/course/view.php?id='.$row['courseid'];
echo '<a href="'.$url.'">'.$course_name.'</a>';

【讨论】:

  • 嘿,你太棒了。明天我将测试代码。我希望我能再问一次,如果有什么问题... ...谢谢!
【解决方案2】:

我一直在尝试类似的东西(但试图获得特定的课程)并找到了这个:

 $courses = enrol_get_my_courses();

获取用户当前注册的所有课程,并以数组的形式输出信息。

 print_object($courses);

输出:

    Array
(
    [4] => stdClass Object
        (
            [id] => 4
            [category] => 1
            [sortorder] => 10001
            [shortname] => course3
            [fullname] => Course 3
            [idnumber] => 
            [startdate] => 1234567890
            [visible] => 1
            [groupmode] => 0
            [groupmodeforce] => 0
            [cacherev] => 1234567890
            [showactivitydates] => 1
            [showcompletionconditions] => 1
        )

    [2] => stdClass Object
        (
            [id] => 2
            [category] => 1
            [sortorder] => 10003
            [shortname] => MyCourse
            [fullname] => My Course Long Name
            [idnumber] => 
            [startdate] => 1234567890
            [visible] => 1
            [groupmode] => 0
            [groupmodeforce] => 0
            [cacherev] => 1234567890
            [showactivitydates] => 1
            [showcompletionconditions] => 1
        )

)

从那里,您可以使用 $course->id 和 $course->shortname 或 $course->fullname 执行 foreach 循环,以填充您用于在每个课程循环时生成 url 的代码。

  foreach($courses as $course){ 
      /**
       *your preferred url code style goes here 
       *with $course->id $course->shortname or $course->fullname
       *populating the url dynamically.
       */
   }

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多