Заметки технаря GetCourse

Ниже расположены готовые наработки для настройки платформы GetCourse, которые можно использовать в своих целях (если немного "допилить" под конкретную задачу).

Важно! Авторы наработок - разные люди (в том числе и я).

С уважением, Сергей

JS: немного о перехвате метки

Что если нужно выполнить действие с пользователем на отдельной странице и перенаправить его по определенной ссылке?

Чтобы применить:

После блоков, в конце страницы вставить JS-код:

const url = window.location.href;
const refParam = url.match(/ref=([^&]+)/);

if (refParam && refParam[1] === 'link1') {
window.location.href = 'https://example.com/page1';
}
if (refParam && refParam[1] === 'link2') {
window.location.href = 'https://example.com/page2';
}
if (refParam && refParam[1] === 'link3') {
window.location.href = 'https://example.com/page3';
}

Если адресовать пользователя на эту страницу по ссылке вида:
https://example.com?ref=link3,
то после попадания на страницу, произойдет переадресация на адрес
https://example.com/page3

Т.к. мы перехватили метку, то вместо window.location.href мы можем использовать любое другое действие (например, передать в скрытое поле на странице), но это уже совсем другая история.

К началу

CSS+JS: информер - следующий урок, в котором требуется выполнить задание

Может пригодиться, если в тренинге/подтренинге много стоп-уроков или пользователю нужно подсказать, на каком уроке он остановился.

Чтобы применить:

1) В настройках вида страницы занести код CSS:

.current_lesson {
display: block;
background: #fff;
color: #000;
font-weight: 400;
}
.current_lesson:before {
content: "\f28b";
font-family: 'FontAwesome';
position: relative;
margin-right: 8px;
}
a.current_lesson:focus, a.current_lesson:hover {
opacity: 0.8;
text-decoration: none;
}

2) В настройках вида страницы занести код JS:

$(function () {
var rows = $('.stream-table > tbody > tr:not(.noaccess-mode-show)');
var i = 0;
var checkRow = function () {
var row = rows.eq(i);
var link = row.find('a').attr('href');
$.get(link, function (data) {
var pageDom = $('').append($.parseHTML(data));
var lesson_for_target = pageDom.find('.lesson-list li.user-state-need_accomplish').first().find('.link.title');
if (lesson_for_target.length == 0) {
lesson_for_target = pageDom.find('.lesson-list li.user-state-has_mission:last-child').find('.link.title');
}
if (lesson_for_target.length > 0) {
var lesson_name = lesson_for_target.text().replace(/просмотрено/g, '').trim();
var chapter_name = row.find('.stream-title').text();
$('.my_lesson_last .current_lesson').attr('href', lesson_for_target.attr('href'));
$('.my_lesson_last .current_lesson_chapter').html('"' + chapter_name + '"');
$('.my_lesson_last .current_lesson_name').html('"' + lesson_name + '"');
return;
} else {
$('.my_lesson_last').hide();
return;
}
i++;
if (i < rows.length) {
checkRow();
}
});
}
checkRow();
});

По этой ссылке находится файл скрипта с комментариями.

3) В настройках вида страницы добавить блок "HTML" и добавить ему класс html-элемента my_lesson_last. Содержание блока HTML:

<a class="current_lesson">Вам необходимо выполнить урок: <span class="current_lesson_name"></span> в подтренинге <span class="current_lesson_chapter"></span></a>

К началу

JS: отправка дз через скрипт

Может пригодиться, если в уроке не подразумевается задание, но нужно отметить действие пользователя в уроке, как будто он выполнил задание.

Чтобы применить:

В режиме редактирования урока, занести JS-код:

function sendLessonAnswer(answerText = "Текст ответа пользователя") {

const link = window.location.href;

// Проверка на нахождение внутри урока
if (link.indexOf("teach/control/lesson/") === -1) return;

// Проверка на наличие блока с заданием (если находимся в веб-браузере)
if (link.indexOf("teach/control/lesson/view") !== -1 && $("#LessonAnswer_answer_text").length == 0) return;

// Проверка на наличие блока с вкладкой "Задание" (если находимся в приложении)
if (link.indexOf("teach/control/lesson/webview") !== -1 && $("nav.mode-selector a[data-mode='mission']").length == 0) return;

// ... если проверки пройдены

// Формируем параметры запроса
const dataPost = { "LessonAnswer[answer_text]": answerText, "send-answer": "" };

// Делаем запрос (Отправка ДЗ)
$.post(link, dataPost);

}

В режиме редактирования урока, на нужный элемент добавить произвольное действие в обработчике формы. Выбрать JS и добавить код:

sendLessonAnswer();

К началу