2016-04-07 3 views
0

I Moodle 2.7 bin mit und habe den folgend benutzerdefiniertes Feld für die Kurse in der Datenbanktabelle mdl_course_info_field:hinzufügen Link auf Kursseite je nach Kurs benutzerdefinierten Feld

Vollständiger Name: Schule Kurs

Schrot Name: Schule

Typ: Auswahlmenü

Choices:

  • Gymnasium Kurs

  • Prepschool Kurs

Das Ziel war es, den Link auf jeder Kursseite zu zeigen, wo unter den Einstellungen die chechbox für Highschool-Kurs wird verwendet. In der Datei mymoodle/local/link/functions.js gibt es den Link:

if($('#page-course-view-topcollmytheme .orangebar p')) { 
    $('#page-course-view-topcollmytheme #section-0 .content > .summary').append('<button class="highschoollink">Hig school course</button>'); 
} 

Wie kann man überprüfen, ob die Checkbox ein gewählt werden dann den Link auf der Kursseite zu zeigen?

+0

Wo möchten Sie das Feld angezeigt werden? Im Kurs Header? –

Antwort

1

können Sie einen Renderer verwenden, um einen Kurs Header anzuzeigen:

https://tracker.moodle.org/browse/MDL-36048

So könnte man die Schule Link im Laufe Headers - hier ein Beispiel:

In /course/format/formatname/lib.php

Fügen Sie diese Funktion zu class format_formatname

/** 
* Display's a header at the top of the sections. 
* 
* @return renderable class 
*/ 
public function course_content_header() { 
    global $DB, $PAGE, $USER; 

    if (!isset($PAGE)) { 
     return null; 
    } 

    // Only display if we are on the course-view page. 
    if (strpos($PAGE->pagetype, 'course-view-') !== 0) { 
     return null; 
    } 

    $sql = "SELECT d.data 
      FROM {course_info_field} f 
      JOIN {course_info_data} d ON d.fieldid = f.id AND d.courseid = :courseid 
      WHERE f.shortname = :shortname"; 
    $params = array('courseid' => $this->courseid, 'shortname' => 'school'); 
    $schoolname = $DB->get_field_sql($sql, $params); 
    $schoolurl = ''; 
    // You should store the school url in the database somewhere. 
    // Using switch code for this example. 
    switch ($schoolname) { 
     case 'high school' : 
      $schoolurl = new moodle_url('http://www.schoolsite.com'); 
      break; 
     ... 
    } 

    return new format_formatname_coursecontentheader($schoolname, $schoolurl); 
} 
hinzu 10

Auch diese Klasse /course/format/formatname/lib.php

class format_formatname_coursecontentheader implements renderable { 
    /** 
    * School name 
    * 
    * @var string $schoolname 
    */ 
    public $schoolname; 

    /** 
    * School url 
    * 
    * @var string $schoolurl 
    */ 
    public $schoolurl; 

    /** 
    * Class storing information to be passed and displayed in the course content header 
    * 
    * @param string $schoolname 
    * @param moodle_url $schoolurl 
    */ 
    public function __construct($schoolname, $schoolurl) { 
     $this->schoolname = $schoolname; 
     $this->schoolurl = $fields->schoolurl; 
    } 
} 

Dann fügen Sie in /course/format/formatname/renderer.php

diese Funktion In den class format_formatname_renderer

/** 
* Renders course header 
* 
* @param renderable $courseheader 
* @return string 
*/ 
public function render_format_formatname_coursecontentheader($courseheader) { 
    $output = ''; 

    $schoolname = $courseheader->schoolname; 
    $schoolurl = $courseheader->schoolurl; 

    $link = html_writer::link($schoolurl, $schoolname); 

    $output .= html_writer::div($link, 'format-formatname-schoollink'); 

    return $output; 
} 
+0

Erstaunlich! Das hat funktioniert! – StartVader

0

Ich schlage vor, dass Sie den Link zum Kurs als URL-Ressource hinzufügen.

Stellen Sie dann sicher, dass "bedingte Aktivitäten" für die Site aktiviert sind.

Schließlich bearbeiten Sie die URL-Aktivität, um den Zugriff auf Benutzer mit dem korrekten Benutzerprofilfeld zu beschränken.

Weitere Details finden Sie unter https://docs.moodle.org/27/en/Conditional_activities_settings.

+0

Hallo, danke für den Vorschlag, aber es ist nicht als URL-Aktivität, sondern im Code in der functions.js. Meine Fragen waren, wie man das 'high school course'-customfield bekommt und abhängig davon den Link anzeigt? Es ist kein benutzerdefiniertes Feld, sondern ein benutzerdefiniertes Feld und eine "Schule" mit param1 "Highschool course". – StartVader

Verwandte Themen