[HTML, JavaScript, Веб-дизайн, Ненормальное программирование] E-learning на костылях. Исправляем курсы из Articulate Rise

Автор Сообщение
news_bot ®

Стаж: 6 лет 3 месяца
Сообщений: 27286

Создавать темы news_bot ® написал(а)
02-Июл-2020 16:31

Рынок насыщен разными программами для разработки электронных курсов — авторскими средствами (authoring tools). Есть продукты на любой вкус: хочешь прогу, чтобы просто конвертировать электронные презентации в HTML5? Да пожалуйста! Хочешь делать одностраничники в редакторе вроде Тильды? Держи! Хочешь создать игрушку в стиле Interactive Fiction? Да кто же тебе запретит, родной? Любой каприз, как говориться.
Каждое авторское средство склоняет на свою сторону простотой использования. Разработчик без какого-либо технического бекграунда может особо не напрягаясь склеить электронный курс, и опубликовать его в LMS.
Но всё ли так гладко на самом деле? Что делать, когда кажущаяся простота разворачивается и стреляет вам в колено?
Давайте препарируем несколько популярных инструментов и посмотрим, какие неприятные сюрпризы поджидают наивных Instructional Designer-ов. Сеанс чёрной магии с последующим её разоблачением, так сказать.
Эта статья посвящается Articulate Rise.
Что это такое? Облачный сервис для разработки лонгридов. Вроде Тильды, только ориентированный на e-learning. Берёте контен, берёте готовые компоненты и в визуальном редакторе создаете веб-страницу. Добавляете электронные тесты и экспортируете в нужном вам формате (по нужному стандарту). Просто, быстро, интуитивно понятно. Изюм. Вот пример.
И в чем проблема, спросите вы?
Что ж, господа. Присаживайтесь…
Как убить титульную страницу
Начнём с простого. Вот, поставьте себя на место пользователя. Идёте вы по LMS, нашли в каталоге курс, посмотрели, полюбовались картинкой на баннере, почитали описание. Поняли: хочу! Жмёте «Начать». И вместо того, чтобы сразу получить всё самое вкусное, вам предлагают ещё раз посмотреть на баннер, почитать описание и нажать «Начать». Неприятно? Меня, вот, бесит. Причём, создатели тулзы не догадались сделать в интерфейсе разработчика чекбокс «убрать титульную страницу».
Итак, первый костыль
  • Экспортируем курс.
  • Открываем файл scormdriver/indexAPI.html
  • Находим переменную strContentLocation. Это URL первой страницы, которая будет показана пользователю. По дефолту значение
    scormcontent/index.html#/preview/

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

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

Встраиваем веб-страницы
Райз позволяет встроить в курс фрейм и показывать в нем веб-страницы. Проблема в том, что это может быть либо курс собранный в Storyline (другое авторское средство от той же компании), либо сайт, доступный по абсолютному URL. А вот возможность положить веб-страницу в пакет с курсом и сослаться на неё относительно index.html нет. Более того, если вы попытаетесь прописать абсолютную ссылку, экспортировать курс, а затем поменять её на относительную, как описано выше, ничего не выйдет. Райз проверит URL перед рендерингом страницы и если в нем не будет подстроки «://» просто тихонько загнётся.
Костыль
  • Добавляем на страницу объект из Storyline
  • Узнаем его id. Либо методом научного тыка, либо через courseData.
  • Экспортируем курс. Находим в scormcontent/assets папку с соответствующим id.
  • Заменяем содержимое папки. Свою страницу сохраняем как story.html

Удаляем название курса из темы письма при переходе по ссылке mailto
Когда я впервые с этим столкнулся, я начал курить. Создатели Райза почему-то решили, что пользователь будет в восторге, если к ссылкам начинающимся на mailto без спроса добавлять сабжект с названием курса. Естественно, опции, которая это запрещает в интерфейсе нет.
Костыль
  • Экспортируем курс. Открываем scormcontent/lib/main.bundle.js.
  • Находим во всем этом месиве подстроку
    (w="mailto:".concat(E,"?subject=")).call(w,o)
  • Меняем на
    (w="mailto:".concat(E,"")).call(w,"")

Заставляем Райз отдавать в LMS больше скормовых данных и делать это лучше
Да, я до сих пор работаю по SCORM 2004 4th edition. Более того, мне нравится этот стандарт. Но мне не нравится, как его трактуют создатели некоторых авторских средств. Райз, например, отправляет в LMS жалкую кучку переменных, причем делает это исключительно перед разрывом сессии (один единственный Commit() перед Terminate(), для тех кто понимает).
Например, я хочу, чтобы курс по ходу пьесы сохранял сведения о прогрессе пользователя в LMS, чтобы выводить это значение в интерфейс LMS, а не только на счетчик на сайдбаре внутри самого курса.
Костыль
  • Экспортируем курс
  • Открываем scormcontent/index.html
  • Добавляем в массив stuffToPick значения:
    stuffToPick = [
        ...,
        "CommitData",
        "GetProgressPeasure",
        "SetProgressMeasure"
    ]
  • Объект root.Runtime дополняем методами:
    root.Runtime= {
        ...
        commitData: LMSProxy.CommitData,
        getProgressMeasure: LMSProxy.GetProgressMeasure,
        setProgressMeasure: LMSProxy.SetProgressMeasure
    }

  • Дописываем функцию setCourseProgress:
    setCourseProgress(courseProgress) {

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

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

Надеюсь, материал вам пригодится, и вы сможете сделать свои курсы красивее и удобнее.
В следующий раз мы будем издеваться над iSpring.
===========
Источник:
habr.com
===========

Похожие новости: Теги для поиска: #_html, #_javascript, #_vebdizajn (Веб-дизайн), #_nenormalnoe_programmirovanie (Ненормальное программирование), #_elearning, #_scorm, #_javascript, #_kostyli_i_velosipedy (костыли и велосипеды), #_html, #_javascript, #_vebdizajn (
Веб-дизайн
)
, #_nenormalnoe_programmirovanie (
Ненормальное программирование
)
Профиль  ЛС 
Показать сообщения:     

Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы

Текущее время: 13-Май 00:19
Часовой пояс: UTC + 5