Русский
Русский
English
Статистика
Реклама

Из песочницы E-learning на костылях. Исправляем курсы из Articulate Rise

Рынок насыщен разными программами для разработки электронных курсов авторскими средствами (authoring tools). Есть продукты на любой вкус: хочешь прогу, чтобы просто конвертировать электронные презентации в HTML5? Да пожалуйста! Хочешь делать одностраничники в редакторе вроде Тильды? Держи! Хочешь создать игрушку в стиле Interactive Fiction? Да кто же тебе запретит, родной? Любой каприз, как говориться.

Каждое авторское средство склоняет на свою сторону простотой использования. Разработчик без какого-либо технического бекграунда может особо не напрягаясь склеить электронный курс, и опубликовать его в LMS.

Но всё ли так гладко на самом деле? Что делать, когда кажущаяся простота разворачивается и стреляет вам в колено?

Давайте препарируем несколько популярных инструментов и посмотрим, какие неприятные сюрпризы поджидают наивных Instructional Designer-ов. Сеанс чёрной магии с последующим её разоблачением, так сказать.

Эта статья посвящается Articulate Rise.

Что это такое? Облачный сервис для разработки лонгридов. Вроде Тильды, только ориентированный на e-learning. Берёте контен, берёте готовые компоненты и в визуальном редакторе создаете веб-страницу. Добавляете электронные тесты и экспортируете в нужном вам формате (по нужному стандарту). Просто, быстро, интуитивно понятно. Изюм. Вот пример.

И в чем проблема, спросите вы?

Что ж, господа. Присаживайтесь

Как убить титульную страницу


Начнём с простого. Вот, поставьте себя на место пользователя. Идёте вы по LMS, нашли в каталоге курс, посмотрели, полюбовались картинкой на баннере, почитали описание. Поняли: хочу! Жмёте Начать. И вместо того, чтобы сразу получить всё самое вкусное, вам предлагают ещё раз посмотреть на баннер, почитать описание и нажать Начать. Неприятно? Меня, вот, бесит. Причём, создатели тулзы не догадались сделать в интерфейсе разработчика чекбокс убрать титульную страницу.

Итак, первый костыль


  1. Экспортируем курс.
  2. Открываем файл scormdriver/indexAPI.html
  3. Находим переменную strContentLocation. Это URL первой страницы, которая будет показана пользователю. По дефолту значение

    scormcontent/index.html#/preview/
    

    Чтобы пользователь переходил сразу к вкусному после хеша нужно прописать идентификатор урока.

    Как его узнать? Просто открываем scormcontent/index.html в браузере переходим к первому уроку и копируем значение из урла. Всё что после хеша. Должно получиться что-то типа:

    scormcontent/index.html#/lessons/rri34kKfn2348234
    

Как исправить контент в курсе без доступа авторскому средству


Ситуация. Подписка закончилась, исходники не расшарены а уже экспортированный курс срочно нужно исправить. Бывает такое? Иногда, увы, бывает.

Костыль


  1. Экспортируем курс
  2. Открываем scormcontent/index.html, находим переменную courseData. Она содержит все данные курса в base64.
  3. Декодируем (например с помощью notepad++) и получаем уже читаемый и редактируемый JSON. С ним можно делать всякие упражнения. Я например сшивал несколько райзовских курсов в один, просто добавляя значения в массив lessons.
  4. Перед сохранением кодируем строку courseData назад в base64.
  5. Справедливости ради стоит заметить, что исправить можно не все данные. Так, например, перед рендерингом страницы Райз проверяет и изменяет гиперссылки. Об этом мы поговорим ниже.

Встраиваем веб-страницы


Райз позволяет встроить в курс фрейм и показывать в нем веб-страницы. Проблема в том, что это может быть либо курс собранный в Storyline (другое авторское средство от той же компании), либо сайт, доступный по абсолютному URL. А вот возможность положить веб-страницу в пакет с курсом и сослаться на неё относительно index.html нет. Более того, если вы попытаетесь прописать абсолютную ссылку, экспортировать курс, а затем поменять её на относительную, как описано выше, ничего не выйдет. Райз проверит URL перед рендерингом страницы и если в нем не будет подстроки :// просто тихонько загнётся.

Костыль


  1. Добавляем на страницу объект из Storyline
  2. Узнаем его id. Либо методом научного тыка, либо через courseData.
  3. Экспортируем курс. Находим в scormcontent/assets папку с соответствующим id.
  4. Заменяем содержимое папки. Свою страницу сохраняем как story.html

Удаляем название курса из темы письма при переходе по ссылке mailto


Когда я впервые с этим столкнулся, я начал курить. Создатели Райза почему-то решили, что пользователь будет в восторге, если к ссылкам начинающимся на mailto без спроса добавлять сабжект с названием курса. Естественно, опции, которая это запрещает в интерфейсе нет.

Костыль


  1. Экспортируем курс. Открываем scormcontent/lib/main.bundle.js.
  2. Находим во всем этом месиве подстроку
    (w="mailto:".concat(E,"?subject=")).call(w,o)
    
  3. Меняем на
    (w="mailto:".concat(E,"")).call(w,"")
    

Заставляем Райз отдавать в LMS больше скормовых данных и делать это лучше


Да, я до сих пор работаю по SCORM 2004 4th edition. Более того, мне нравится этот стандарт. Но мне не нравится, как его трактуют создатели некоторых авторских средств. Райз, например, отправляет в LMS жалкую кучку переменных, причем делает это исключительно перед разрывом сессии (один единственный Commit() перед Terminate(), для тех кто понимает).
Например, я хочу, чтобы курс по ходу пьесы сохранял сведения о прогрессе пользователя в LMS, чтобы выводить это значение в интерфейс LMS, а не только на счетчик на сайдбаре внутри самого курса.

Костыль


  1. Экспортируем курс
  2. Открываем scormcontent/index.html
  3. Добавляем в массив stuffToPick значения:
    stuffToPick = [    ...,    "CommitData",    "GetProgressPeasure",    "SetProgressMeasure"]
    
  4. Объект root.Runtime дополняем методами:
    root.Runtime= {    ...    commitData: LMSProxy.CommitData,    getProgressMeasure: LMSProxy.GetProgressMeasure,    setProgressMeasure: LMSProxy.SetProgressMeasure}
    

  5. Дописываем функцию setCourseProgress:

    setCourseProgress(courseProgress) {    var lastProgress = root.Runtime.getProgressMeasure();    if (lastProgress < progress.p/100) {        root.Runtime.setProgressMeasure(progress.p/100);        root.Runtime.commitData();    }}
    

  6. В качестве бонуса, можно заставить курс коммитить почаще для профилактики застревания данных при разрыве сессии. Для этого добавляем root.Runtime.commitData(); в конфе функций completeOut, и reportAnswer.

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

В следующий раз мы будем издеваться над iSpring.
Источник: habr.com
К списку статей
Опубликовано: 02.07.2020 14:05:51
0

Сейчас читают

Комментариев (0)
Имя
Электронная почта

Html

Javascript

Веб-дизайн

Ненормальное программирование

E-learning

Scorm

Костыли и велосипеды

Категории

Последние комментарии

  • Имя: Макс
    24.08.2022 | 11:28
    Я разраб в IT компании, работаю на арбитражную команду. Мы работаем с приламы и сайтами, при работе замечаются постоянные баны и лаги. Пацаны посоветовали сервис по анализу исходного кода,https://app Подробнее..
  • Имя: 9055410337
    20.08.2022 | 17:41
    поможем пишите в телеграм Подробнее..
  • Имя: sabbat
    17.08.2022 | 20:42
    Охренеть.. это просто шикарная статья, феноменально круто. Большое спасибо за разбор! Надеюсь как-нибудь с тобой связаться для обсуждений чего-либо) Подробнее..
  • Имя: Мария
    09.08.2022 | 14:44
    Добрый день. Если обладаете такой информацией, то подскажите, пожалуйста, где можно найти много-много материала по Yggdrasil и его уязвимостях для написания диплома? Благодарю. Подробнее..
© 2006-2024, personeltest.ru