<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>#SCORM &#8211; LMS Сollaborator</title>
	<atom:link href="https://collaborator.biz/blog/tag/scorm/feed/" rel="self" type="application/rss+xml" />
	<link>https://collaborator.biz</link>
	<description>платформа для корпоративного навчання персоналу</description>
	<lastBuildDate>Thu, 02 Oct 2025 14:37:00 +0000</lastBuildDate>
	<language>uk</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.9.4</generator>

<image>
	<url>https://collaborator.biz/wp-content/uploads/2021/05/cropped-Logo-Collaborator_128-32x32.png</url>
	<title>#SCORM &#8211; LMS Сollaborator</title>
	<link>https://collaborator.biz</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>Персоналізація навчання в Articulate Rise 360: практичний гайд від Селезень Олега</title>
		<link>https://collaborator.biz/blog/personalization-articulate-rise-360/</link>
		
		<dc:creator><![CDATA[Atamanenko Katya]]></dc:creator>
		<pubDate>Thu, 02 Oct 2025 12:21:56 +0000</pubDate>
				<category><![CDATA[Корпоративне навчання та розвиток]]></category>
		<category><![CDATA[#LMSCollaborator]]></category>
		<category><![CDATA[#rise360]]></category>
		<category><![CDATA[#SCORM]]></category>
		<category><![CDATA[eLearning]]></category>
		<category><![CDATA[LMS]]></category>
		<guid isPermaLink="false">https://collaborator.biz/?p=18264</guid>

					<description><![CDATA[Співробітник відкриває курс і бачить звернення на своє ім’я, текст з урахуванням його гендеру, а іноді навіть свій аватар чи фото....]]></description>
										<content:encoded><![CDATA[<p>Співробітник відкриває курс і бачить звернення на своє ім’я, текст з урахуванням його гендеру, а іноді навіть свій аватар чи фото. Звучить круто, чи не так? Для слухача це начебто дрібна деталь, а для L&amp;D фахівців – це інструмент, який суттєво підвищує залученість та ефективність навчання. Персоналізовані курси краще утримують увагу й створюють відчуття цінності: <em>«цей курс зроблено саме для мене»</em>.</p>
<p>До того ж усі дані вже зберігаються в LMS. Тож достатньо лише налаштувати так, щоб вони автоматично підвантажувались у курс.</p>
<p>Разом з Олегом Селезнем ми вже ділилися досвідом використання користувацьких даних у Articulate Storyline. Тепер розглянемо інший інструмент – <strong>Articulate Rise 360</strong>, який часто обирають за простоту, швидкість і сучасний дизайн.</p>
<p>У цій статті ми зосередимось на тому, як поєднати зручність Rise із можливостями персоналізації через LMS Collaborator. Своїм досвідом поділиться Олег Селезень – керівник відділу дистанційного навчання компанії VIYAR.</p>
<p>Переходимо від теорії до практики: які дані з <strong>LMS Collaborator</strong> можна використати для персоналізації курсів у Rise 360?</p>
<p><span id="more-18264"></span></p>
<blockquote>
<p style="text-align: center;"><strong><a href="https://www.linkedin.com/in/oleh-selezen-284717b6/" target="_blank" rel="nofollow noopener">Олег Селезень</a> – керівник відділу дистанційного навчання компанії VIYAR</strong></p>
<p><img decoding="async" class="wp-image-18267 aligncenter" src="https://collaborator.biz/wp-content/uploads/2025/10/image-9.png" alt="" width="136" height="136" srcset="https://collaborator.biz/wp-content/uploads/2025/10/image-9.png 245w, https://collaborator.biz/wp-content/uploads/2025/10/image-9-150x150.png 150w" sizes="(max-width: 136px) 100vw, 136px" /></p></blockquote>
<h2>Які параметри ми можемо отримати?</h2>
<p>Усі дані передаються з LMS Collaborator у SCORM через змінну <strong>cmi.core.student_info</strong>. Їх також можна використати для персоналізації в Articulate Rise 360.</p>
<p>На відміну від Storyline, у Rise 360 немає прямої роботи з тригерами чи умовами. Проте отримані значення можна застосовувати для персоналізації: налаштовувати сценарії навчання, відображати потрібні блоки та підлаштовувати звернення.</p>
<p>Щоб реалізувати це, знадобиться невелика взаємодія з кодом. Але не хвилюйтеся – все максимально просто.😊</p>
<p><img fetchpriority="high" decoding="async" class="wp-image-18270 aligncenter" src="https://collaborator.biz/wp-content/uploads/2025/10/image1.png" alt="" width="780" height="976" srcset="https://collaborator.biz/wp-content/uploads/2025/10/image1.png 1080w, https://collaborator.biz/wp-content/uploads/2025/10/image1-240x300.png 240w, https://collaborator.biz/wp-content/uploads/2025/10/image1-819x1024.png 819w, https://collaborator.biz/wp-content/uploads/2025/10/image1-768x960.png 768w" sizes="(max-width: 780px) 100vw, 780px" /></p>
<p>Далі покроково, як саме це виглядає на практиці.</p>
<h2>Крок 1. Форматування змінних у курсі Articulate Rise 360</h2>
<p>Щоб підтягнути дані користувача, достатньо вказати змінну з LMS Collaborator, обрамлену знаками відсотка, наприклад:</p>
<ul>
<li>user_id → <strong>%user_id%</strong></li>
<li>user_firstname → <strong>%user_firstname%</strong></li>
<li>user_email → <strong>%user_email%</strong></li>
</ul>
<p>Коли користувач відкриває курс, система автоматично замінює значення на його справжні дані.</p>
<blockquote><p><em><strong>Важливо: самі по собі вони не працюють. Якщо не додати код-зв’язку з LMS і не налаштувати публікацію під SCORM, у курсі залишиться просто %user_firstname%.</strong></em></p></blockquote>
<p><strong>Що робити далі?</strong></p>
<ol>
<li style="list-style-type: none;">
<ol>
<li>Опублікуйте курс у Rise 360: Publish → LMS, обираємо SCORM 1.2 або 2004 і зберігаємо ZIP.</li>
<li>Розпакуйте архів у будь-яку папку.</li>
<li>Знайдіть та відкрийте папку <strong>scormcontent</strong>.</li>
<li>Знайдіть файл <strong>index.html</strong> і відкрийте його у будь-якому редакторі.</li>
<li>Додайте ось цей код одразу після тега <strong>&lt;title&gt;</strong>:</li>
</ol>
</li>
</ol>
<details>
<summary><span style="color: #ff6600;"><strong>Код</strong></span></summary>
<pre><code>
&lt;script defer src="https://cdn.jsdelivr.net/gh/asimut/user-variables/selezen_v1.js"&gt;&lt;/script&gt;
</code></pre>
</details>
<p>Тепер курс підтягуватиме дані користувача.</p>
<h2>Крок 2. Фото користувача замість стандартних зображень</h2>
<p>Ще один простий спосіб персоналізації – <strong>заміна картинок на фото конкретного користувача</strong>. Це працює в будь-якому місці курсу, де є зображення.</p>
<p>Це дає відчутну персоналізацію «в обличчя» без зміни верстки блоку та працює в будь-яких місцях курсу, де є зображення.</p>
<p><strong>Як це зробити:</strong></p>
<ol>
<li>Відкрийте потрібний блок у Articulate Rise 360 та натисните <strong>Image Alt Text</strong>.</li>
<li>Уведіть <strong>replace_user_img</strong> та підтвердіть.</li>
<li>За потреби повторіть для інших зображень.</li>
</ol>
<p>При відкритті курсу система автоматично підставить фото користувача з LMS.</p>
<p><img decoding="async" class="wp-image-18273 aligncenter" src="https://collaborator.biz/wp-content/uploads/2025/10/image3.png" alt="" width="780" height="554" srcset="https://collaborator.biz/wp-content/uploads/2025/10/image3.png 1439w, https://collaborator.biz/wp-content/uploads/2025/10/image3-300x213.png 300w, https://collaborator.biz/wp-content/uploads/2025/10/image3-1024x727.png 1024w, https://collaborator.biz/wp-content/uploads/2025/10/image3-768x545.png 768w" sizes="(max-width: 780px) 100vw, 780px" /></p>
<h2>Крок 3. Звернення за гендером</h2>
<p>Коли LMS передає інформацію про стать користувача (наприклад, male або female), у курсі ми можемо автоматично змінювати слова та їх закінчення відповідно до потрібного гендера.</p>
<p>Приклад такого текстового блоку в Articulate Rise 360:</p>
<p><img loading="lazy" decoding="async" class="wp-image-18282 aligncenter" src="https://collaborator.biz/wp-content/uploads/2025/10/image2.png" alt="" width="776" height="95" srcset="https://collaborator.biz/wp-content/uploads/2025/10/image2.png 1754w, https://collaborator.biz/wp-content/uploads/2025/10/image2-300x37.png 300w, https://collaborator.biz/wp-content/uploads/2025/10/image2-1024x125.png 1024w, https://collaborator.biz/wp-content/uploads/2025/10/image2-768x94.png 768w, https://collaborator.biz/wp-content/uploads/2025/10/image2-1536x187.png 1536w" sizes="auto, (max-width: 776px) 100vw, 776px" /></p>
<p>На зображені стандартний текстовий блок. Саме у таких блоках можна налаштувати заміну, щоб звернення виглядали природно: <em>«ти завершив»</em> або <em>«ти завершила»</em>.</p>
<p>Для цього потрібно підготувати невеликий скрипт, який перевіряє отримане значення і підставляє потрібний варіант.</p>
<blockquote><p><strong>На що варто звернути увагу:</strong></p>
<p><em>За замовчуванням усі звернення можна залишати у чоловічому роді. Потім система буде змінювати їх на потрібний варіант у тих блоках, де ви це вкажете. Важливо не підключати заміну скрізь, інакше можуть випадково змінитися слова поза контекстом звернень. Це виглядатиме як помилка.</em></p></blockquote>
<p><strong>Як це зробити:</strong></p>
<p>1. Додаємо код, що отримує дані з LMS.<br />
2. Додаємо модуль для коректних звернень за гендером:</p>
<p>– підключаєте основний скрипт із логікою заміни (він виконує пошук і підміну);<br />
– у конфігурації задаємо слова, які будуть замінюватися (наприклад, <em><strong>завершив</strong></em> → <em><strong>завершила</strong></em>) та ID блоків (<strong>targetBlocks</strong>), де ці заміни дозволені.</p>
<p>У результаті система автоматично підставлятиме правильні варіанти звернень залежно від гендеру користувача.</p>
<details>
<summary><span style="color: #ff6600;"><strong>Код</strong></span></summary>
<pre><code>
&lt;script defer src="https://cdn.jsdelivr.net/gh/asimut/user_gender_replacer/selezen_v1.js"&gt;&lt;/script&gt;

&lt;script&gt;
  // Конфіг (тільки дані, ніякої логіки)
  window.GenderReplacer = {
    debug: false,
    genderReplacements: {
      female: {
        'завершив': 'завершила',
        'дізнався': 'дізналася',
        'ознайомився': 'ознайомилася',
        'зрозумів': 'зрозуміла',
        'пройшов': 'пройшла',
        'успішно завершив': 'успішно завершила',
        'готовий': 'готова',
        'вивчив': 'вивчила',
        'переглянув': 'переглянула',
        'опанував': 'опанувала',
        'засвоїв': 'засвоїла',
        'досяг': 'досягла',
        'здобув': 'здобула',
        'отримав': 'отримала',
        'виконав': 'виконала',
        'склав': 'склала',
        'закінчив': 'закінчила'
      }
    },
    targetBlocks: [
      'cmckqk51l001c357b79yaongk' 
    ]
  };
&lt;/script&gt;
</code></pre>
</details>
<p><em><strong>Важливо: нижній блок – це лише конфігурація (дані). Саму підміну виконує основний скрипт із логікою заміни, підключений рядком вище.</strong></em></p>
<h3>Робота з ідентифікаторами блоків</h3>
<p>Щоб система знала, у якому саме текстовому блоці потрібно робити заміни, ви вказуєте його у списку <strong>targetBlocks</strong>. Для цього кожен блок у Rise має свій <strong>унікальний</strong> <strong>ID</strong>.</p>
<p>Є два способи знайти ID:</p>
<p><strong>Спосіб 1.</strong><br />
Через інструменти розробника DevTools. Якщо ви впевнено користуєтеся консоллю браузера, відкрийте код сторінки й скопіюйте потрібний ідентифікатор.</p>
<p><strong>Спосіб 2.</strong><br />
За допомогою плагіна. Зручніше і швидше, особливо якщо не хочете працювати з кодом напряму.</p>
<p>Також ви можете розширювати список слів для заміни. Якщо серед наведених прикладів немає потрібних, сміливо додавайте власні варіанти у конфігурацію.</p>
<p>Щоб спростити пошук ідентифікаторів блоків, зручно користуватися плагіном.</p>
<p><strong>Як встановити плагін:</strong></p>
<ol>
<li>Відкрийте браузер і перейдіть у розділ <strong>Розширення – Керувати розширенями</strong>.</li>
<li>Увімкніть <strong>Режим розробника</strong>.</li>
<li>Завантажте архів із плагіном, розпакуйте його й додайте розширення з цієї папки у браузер;<br />
<a href="https://drive.google.com/file/d/1JV5mbwfpl4ZEwaHLqKqF4ZxBoDrcLH9Q/view?pli=1" target="_blank" rel="nofollow noopener"><em><strong>Посилання на архів</strong></em></a></li>
<li>Після цього він автоматично з’явиться у вашій сторінці редагування курсу.</li>
</ol>
<p>Плагін можна вмикати або вимикати будь-коли. З його допомогою ви швидко знаходите ID блоків і додаєте їх у конфігурацію.</p>
<p><img loading="lazy" decoding="async" class="wp-image-18288 aligncenter" src="https://collaborator.biz/wp-content/uploads/2025/10/image6.jpg" alt="" width="780" height="875" srcset="https://collaborator.biz/wp-content/uploads/2025/10/image6.jpg 1713w, https://collaborator.biz/wp-content/uploads/2025/10/image6-268x300.jpg 268w, https://collaborator.biz/wp-content/uploads/2025/10/image6-914x1024.jpg 914w, https://collaborator.biz/wp-content/uploads/2025/10/image6-768x861.jpg 768w, https://collaborator.biz/wp-content/uploads/2025/10/image6-1370x1536.jpg 1370w" sizes="auto, (max-width: 780px) 100vw, 780px" /></p>
<p>Коли ми навчилися швидко знаходити ID за допомогою плагіна, можемо використати ці ідентифікатори не лише для точкових замін, а й для керування видимістю цілих фрагментів курсу. Це дозволить показувати різним департаментам свій контент у межах одного курсу <span style="font-weight: 400;">– </span>без дублювання матеріалів і зайвих копій.</p>
<h2>Крок 4. Керування контентом для різних департаментів</h2>
<p>Ми вже маємо всі змінні з LMS, зокрема <strong>user_department</strong>. Це означає, що департамент не потрібно шукати: система зчитує його з даних користувача і на цій основі відкриває потрібні блоки курсу. Для цього потрібно лише вказати назву департаменту, який є в LMS та перелік блоків, які він має бачити. Для всіх інших працює гілка <strong>default</strong>.</p>
<details>
<summary><span style="color: #ff6600;"><strong>Код</strong></span></summary>
<pre><code>
&lt;script&gt;
  (function () {
    'use strict';
  
    // Конфіг
    // Заповни mapping під свої департаменти та їхні data-block-id
    window.DepartmentBlocks = window.DepartmentBlocks || {
      debug: false,
      mapping: {
        'назава департаменту':    ['ТУТ ВКАЖИТИ ІD БЛОКУ'], // назва має буди із меленької літери
        'default':     ['ТУТ ВКАЖИТИ ІD БЛОКУ'],     // блок для всіх інших
      },
    };
  
    const DB = window.DepartmentBlocks;
  
    const ATTR_CANDIDATES = ['data-block-id','data-blockid','data-block','blockid','data-id','id'];
    const HIDE_CLASS = 'dept-hidden-by-mapping';
    const STYLE_ID = 'dept-visibility-style';
    const OBS_CONFIG = { childList: true, subtree: true, attributes: false, characterData: false };
  
    let allListedIds = new Set();      // усі ID, що зустрічаються у mapping (для первинного приховування)
    let allowedIds = new Set();        // ID, дозволені для поточного департаменту
    let currentDept = null;            // нормалізоване значення поточного департаменту
    let initialized = false;           // щоб не ініціалізувати двічі
    let mainObserver = null;
  
    const log = (...args) =&gt; { if (DB.debug) console.log('[DepartmentBlocks]', ...args); };
    const warn = (...args) =&gt; console.warn('[DepartmentBlocks]', ...args);
  
    function normalize(str) {
      return (str == null) ? '' : String(str).toLowerCase().trim();
    }
  
    function injectStyleOnce(doc = document) {
      if (doc.getElementById(STYLE_ID)) return;
      const style = doc.createElement('style');
      style.id = STYLE_ID;
      style.textContent = `
        .${HIDE_CLASS} { display: none !important; }
      `;
      doc.head.appendChild(style);
    }
  
    function getBlockIdFromElement(el) {
      for (const attr of ATTR_CANDIDATES) {
        if (el.hasAttribute &amp;&amp; el.hasAttribute(attr)) {
          const v = el.getAttribute(attr);
          if (v &amp;&amp; v.trim()) return v.trim();
        }
      }
      return null;
    }
  
    function collectAllListedIds() {
      allListedIds = new Set();
      const map = DB.mapping || {};
      Object.values(map).forEach(arr =&gt; {
        (arr || []).forEach(id =&gt; allListedIds.add(String(id)));
      });
      log('All listed IDs:', Array.from(allListedIds));
    }
  
    function computeAllowedIdsFor(dept) {
      const mappingKey = DB.mapping?.[dept] ? dept : 'default';
      allowedIds = new Set(DB.mapping?.[mappingKey] || []);
      log('Allowed IDs for', dept, '(using mapping key:', mappingKey, '):', Array.from(allowedIds));
    }
  
    function isListed(id) {
      return allListedIds.has(id);
    }
  
    function shouldShow(id) {
      return allowedIds.has(id);
    }
  
    function hideEl(el) {
      if (!el.classList.contains(HIDE_CLASS)) {
        el.classList.add(HIDE_CLASS);
      }
    }
  
    function showEl(el) {
      if (el.classList.contains(HIDE_CLASS)) {
        el.classList.remove(HIDE_CLASS);
      }
    }
  
    function initialHideListedBlocks(root = document) {
      const candidates = root.querySelectorAll('*');
      candidates.forEach(el =&gt; {
        const id = getBlockIdFromElement(el);
        if (id &amp;&amp; isListed(id)) hideEl(el);
      });
    }
  
    function applyDepartmentVisibility(root = document) {
      const candidates = root.querySelectorAll('*');
      candidates.forEach(el =&gt; {
        const id = getBlockIdFromElement(el);
        if (!id) return;
  
        if (!isListed(id)) return;
        if (shouldShow(id)) showEl(el);
        else hideEl(el);
      });
    }
  
    function isUserDataReady() {
      const sources = [
        window.UserVariables?.data,
        window.UserVariables2?.data,
        window.userData
      ];
      return sources.some(d =&gt; d &amp;&amp; typeof d === 'object');
    }
  
    function getUserDepartment() {
      if (DB.overrideDepartment) return normalize(DB.overrideDepartment);
  
      const sources = [
        window.UserVariables?.data,
        window.UserVariables2?.data,
        window.userData
      ];
      for (const d of sources) {
        if (!d || typeof d !== 'object') continue;
        for (const key of ['user_department','department','dept','user_dept','org_unit','division']) {
          if (d[key]) return normalize(d[key]);
        }
      }
      return '';
    }
  
    function processIframe(iframe) {
      try {
        const doc = iframe?.contentDocument;
        if (!doc) return;
        injectStyleOnce(doc);
        initialHideListedBlocks(doc);
        if (currentDept) applyDepartmentVisibility(doc);
        const obs = new MutationObserver(() =&gt; {
          if (!currentDept) initialHideListedBlocks(doc);
          else applyDepartmentVisibility(doc);
        });
        obs.observe(doc.documentElement, OBS_CONFIG);
      } catch (e) {}
    }
  
    function watchIframes() {
      const iframes = document.querySelectorAll('iframe');
      iframes.forEach(ifr =&gt; {
        if (ifr._deptBound) return;
        ifr._deptBound = true;
        if (ifr.contentDocument &amp;&amp; ifr.contentDocument.readyState !== 'loading') {
          processIframe(ifr);
        } else {
          ifr.addEventListener('load', () =&gt; processIframe(ifr), { passive: true });
        }
      });
    }
  
    function applyNow(root = document) {
      injectStyleOnce(document);
      watchIframes();
      if (!currentDept) initialHideListedBlocks(root);
      else applyDepartmentVisibility(root);
    }
  
    function startObserver() {
      if (mainObserver) return;
      mainObserver = new MutationObserver(() =&gt; applyNow(document));
      mainObserver.observe(document.documentElement, OBS_CONFIG);
      ['#app','.rise-player','[data-rise]','.course-container'].forEach(sel =&gt; {
        const c = document.querySelector(sel);
        if (c &amp;&amp; !c._deptObserver) {
          const o = new MutationObserver(() =&gt; applyNow(c));
          o.observe(c, OBS_CONFIG);
          c._deptObserver = o;
        }
      });
    }
  
    function resolveDepartmentAndApply() {
      const dept = getUserDepartment();
      if (!dept) {
        log('user_department не знайдено (поки що). Працюємо у режимі initial-hide.');
        return;
      }
      if (dept === currentDept) return;
      currentDept = dept;
      computeAllowedIdsFor(currentDept);
      applyNow(document);
    }
  
    function waitForDataThenInit() {
      if (initialized) return;
      initialized = true;
      injectStyleOnce(document);
      collectAllListedIds();
      initialHideListedBlocks(document);
      watchIframes();
      startObserver();
  
      let tries = 0;
      const quick = setInterval(() =&gt; {
        tries++;
        if (isUserDataReady()) {
          resolveDepartmentAndApply();
          if (currentDept) clearInterval(quick);
        }
        if (tries &gt;= 20) clearInterval(quick);
      }, 500);
  
      setInterval(resolveDepartmentAndApply, 2000);
    }
  
    DB.forceApply = () =&gt; applyNow(document);
    DB.setDepartment = (deptName) =&gt; {
      DB.overrideDepartment = deptName;
      resolveDepartmentAndApply();
    };
  
    if (document.readyState === 'loading') {
      document.addEventListener('DOMContentLoaded', () =&gt; setTimeout(waitForDataThenInit, 50), { once: true });
    } else {
      setTimeout(waitForDataThenInit, 50);
    }
  })();
&lt;/script&gt;
</code></pre>
</details>
<p><strong>Як це працює:</strong></p>
<ul>
<li>на старті всі «керовані» тимчасово блоки приховані;</li>
<li>коли система зчитує <strong>user_department</strong>, вона показує лише ті блоки, які ви закріпили за цим департаментом;</li>
<li>блоки з інших списків залишаються прихованими, а ті, яких немає в mapping – видимі;</li>
<li>якщо департамент не знайдено або він порожній – користувач бачить <strong>default</strong>.</li>
</ul>
<p>В результаті кожен співробітник отримує тільки свій контент – без дублювання курсу та зайвих версій.</p>
<p><img loading="lazy" decoding="async" class="wp-image-18291 aligncenter" src="https://collaborator.biz/wp-content/uploads/2025/10/image9.png" alt="" width="780" height="696" srcset="https://collaborator.biz/wp-content/uploads/2025/10/image9.png 1920w, https://collaborator.biz/wp-content/uploads/2025/10/image9-300x268.png 300w, https://collaborator.biz/wp-content/uploads/2025/10/image9-1024x914.png 1024w, https://collaborator.biz/wp-content/uploads/2025/10/image9-768x685.png 768w, https://collaborator.biz/wp-content/uploads/2025/10/image9-1536x1370.png 1536w" sizes="auto, (max-width: 780px) 100vw, 780px" /></p>
<h3>Підсумуємо</h3>
<p>Тепер у вас є три готові інструменти:</p>
<ul>
<li><strong>Скрипт №1</strong> – отримує дані користувача, підтягуючи назву підрозділу або персональне фото.</li>
<li><strong>Скрипт №2</strong> – змінює слова й закінчення в тексті залежно від гендеру користувача.</li>
<li><strong>Скрипт №3</strong> – керує контентом: приховує чи відображає блоки курсу для різних департаментів.</li>
</ul>
<p><em><strong>Вам не обов’язково підключати всі одразу – використовуйте тільки ті, що справді потрібні для вашого курсу.</strong></em></p>
<p><img loading="lazy" decoding="async" class="wp-image-18294 aligncenter" src="https://collaborator.biz/wp-content/uploads/2025/10/image4.png" alt="" width="780" height="937" srcset="https://collaborator.biz/wp-content/uploads/2025/10/image4.png 1598w, https://collaborator.biz/wp-content/uploads/2025/10/image4-250x300.png 250w, https://collaborator.biz/wp-content/uploads/2025/10/image4-852x1024.png 852w, https://collaborator.biz/wp-content/uploads/2025/10/image4-768x923.png 768w, https://collaborator.biz/wp-content/uploads/2025/10/image4-1278x1536.png 1278w" sizes="auto, (max-width: 780px) 100vw, 780px" /></p>
<h2>Останній крок: пакування та завантаження курсу в LMS</h2>
<p>Коли всі зміни внесені, залишилося зробити найпростіше – правильно запакувати курс.</p>
<p><strong>Як це зробити:</strong></p>
<ol>
<li>Виділіть усі файли та папки всередині проєкту (але не саму верхню папку).</li>
<li>Запакуйте їх у форматі ZIP за допомогою будь-якого зручного архіватора.</li>
<li>Завантажте отриманий ZIP файл в LMS Collaborator.</li>
</ol>
<p><img loading="lazy" decoding="async" class="wp-image-18297 aligncenter" src="https://collaborator.biz/wp-content/uploads/2025/10/image5.png" alt="" width="779" height="749" srcset="https://collaborator.biz/wp-content/uploads/2025/10/image5.png 1773w, https://collaborator.biz/wp-content/uploads/2025/10/image5-300x288.png 300w, https://collaborator.biz/wp-content/uploads/2025/10/image5-1024x985.png 1024w, https://collaborator.biz/wp-content/uploads/2025/10/image5-768x739.png 768w, https://collaborator.biz/wp-content/uploads/2025/10/image5-1536x1477.png 1536w" sizes="auto, (max-width: 779px) 100vw, 779px" /></p>
<h2>Висновок</h2>
<p>В статті ми пройшли весь шлях: від того, як підтягувати дані з LMS і підставляти реальні фото, до зміни звернень за гендером і керування блоками курсу для різних департаментів.<br />
Тепер курс працює «з коробки» та перетворюється на багато версій без дублювання та зайвої роботи.</p>
<p>Що ви отримуєте:</p>
<ul>
<li><strong>Персоналізація</strong> – звернення по імені, фото користувача, тексти під стать.</li>
<li><strong>Контроль над контентом</strong> – показуєте різні блоки для різних департаментів.</li>
<li><strong>Економія часу</strong> – менше ручної роботи, менше дублювання.</li>
<li><strong>Зручність для команди</strong> – навчання стає зрозумілим, живим і близьким до потреб співробітників.</li>
</ul>
<p>Головна ідея проста: менше технічних маніпуляцій, більше персоналізації, гнучкості та цінності для всіх.😊</p>
<div class="try-block" style="width: 100% max-width: 750px;">
<div class="container-fluid">
<div class="try-container d-lg-flex align-items-center">
<div class="try-info" style="width: 100%; padding: 30px;">
<div class="anons">У LMS Collaborator ми допомагаємо зробити навчання більш персональним і зручним для кожного співробітника. Платформа дає можливості налаштувати курси під різні ролі, департаменти та потреби команди. Якщо хочете створювати курси, які враховують особливості користувачів і роблять навчання ефективнішим, спробуйте LMS Collaborator.</div>
<div class="anons"><strong><em><a class="button white d-flex align-items-center justify-content-center call-request-form" href="#" data-toggle="modal" data-target="#trial">Try LMS Collaborator</a></em></strong></div>
</div>
</div>
</div>
</div>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Персоналізований SCORM: гайд з прикладами від Селезень Олега</title>
		<link>https://collaborator.biz/blog/personalized-scorm-guide/</link>
		
		<dc:creator><![CDATA[Atamanenko Katya]]></dc:creator>
		<pubDate>Thu, 29 May 2025 13:37:12 +0000</pubDate>
				<category><![CDATA[Корпоративне навчання та розвиток]]></category>
		<category><![CDATA[#corporatetraining]]></category>
		<category><![CDATA[#LMSCollaborator]]></category>
		<category><![CDATA[#SCORM]]></category>
		<category><![CDATA[eLearning]]></category>
		<category><![CDATA[LMS]]></category>
		<guid isPermaLink="false">https://collaborator.biz/?p=17513</guid>

					<description><![CDATA[Уявіть: ви відкриваєте навчальний курс, а він вітає вас на ім’я, знає вашу посаду, звертається у відповідному роді й навіть підлаштовує...]]></description>
										<content:encoded><![CDATA[<p>Уявіть: ви відкриваєте навчальний курс, а він вітає вас на ім’я, знає вашу посаду, звертається у відповідному роді й навіть підлаштовує приклади під ваш підрозділ. Не магія. Не фантастика. Просто гарно налагоджена система персоналізації.</p>
<p>Це зовсім інший рівень навчання – коли контент не просто існує, а говорить безпосередньо до тебе. Коли замість універсального підходу ти отримуєш відчуття, що курс створено саме для тебе. Це не тільки приємно, а ще й суттєво впливає на залученість, мотивацію й результат.</p>
<p>Але як змусити SCORM працювати більш «людяно»? Або навіть більше – адаптувати контент під посаду користувача та автоматично сформувати іменний сертифікат у кінці навчання?</p>
<p>Цим питанням зацікавився <strong>Олег Селезень, керівник відділу дистанційного навчання компанії VIYAR</strong>. І разом із командою LMS Collaborator знайшли рішення та розробили підхід, який дозволяє «витягувати» додаткові дані з SCORM і адаптувати контент курсу прямо в процесі проходження.</p>
<p>У цій статті – реальний кейс, покрокова інструкція, приклади коду та прості пояснення, які допоможуть вам зробити подібне у своїх курсах.</p>
<p><span id="more-17513"></span></p>
<h2>З чого все почалося?</h2>
<p>Історія почалася не з великої ідеї, а з простого, але дуже влучного запиту.<br />
Приблизно рік тому Олег Селезень звернувся до команди LMS Collaborator з проханням: <strong><em>«А можна якось витягнути зі SCORM-курсу більше, ніж просто ім’я та email?»</em></strong>. Адже для справжньої персоналізації цього явно замало.</p>
<p>Ідея нас зачепила і ми вирішили експериментувати. Створили тестовий навчальний портал і почали гратись із межами SCORM. Так з’явилася <strong>кастомна змінна cmi.core.student_info</strong>. Технічно її немає ні в SCORM 1.2, ні в SCORM 2004, але вона дозволяє передавати додаткові дані: стать, посаду, підрозділ, тощо – усе, що може вплинути на адаптацію контенту.</p>
<p>Олег тим часом написав власний <strong>JavaScript-код</strong>, який підтягує ці дані з LMS, зберігає їх у змінних і використовує їх уже всередині курсу.</p>
<p>Таким чином ми отримали:</p>
<ul>
<li>звернення до користувача в потрібному роді;</li>
<li>відображення різних блоків залежно від посади;</li>
<li>налаштування навчальну логіку під роль у компанії.</li>
</ul>
<p>З простого запиту виріс повноцінний підхід, який сьогодні вже використовується на реальних проєктах. Як саме все працює – далі крок за кроком розповість сам Олег.</p>
<blockquote>
<p style="text-align: center;"><strong><a href="https://www.linkedin.com/in/oleh-selezen-284717b6/" target="_blank" rel="noopener">Олег Селезень</a> – керівник відділу дистанційного навчання компанії VIYAR</strong></p>
<p><img loading="lazy" decoding="async" class="wp-image-17516 aligncenter" src="https://collaborator.biz/wp-content/uploads/2025/05/image-1.png" alt="" width="133" height="133" srcset="https://collaborator.biz/wp-content/uploads/2025/05/image-1.png 718w, https://collaborator.biz/wp-content/uploads/2025/05/image-1-300x300.png 300w, https://collaborator.biz/wp-content/uploads/2025/05/image-1-150x150.png 150w" sizes="auto, (max-width: 133px) 100vw, 133px" /></p></blockquote>
<h2>Як отримати й використати дані з LMS</h2>
<p>Щоб не витрачати час на здогадки, я зібрав повний список змінних, які LMS Collaborator передає через <strong>cmi.core.student_info</strong>. А також підготував JavaScript-код, який допоможе зчитати ці дані у курсі.</p>
<p>На стороні LMS Collaborator уже налаштована передача розширеної інформації про користувача. Зокрема, його посада, підрозділ, email, стать, навіть лінк на фото. Уся ця інформація надходить через змінну <strong>cmi.core.student_info</strong>.</p>
<p>Щоб ці дані працювали у вашому курсі, потрібно створити в Articulate Storyline змінні з правильними назвами та типами. Тоді ви зможете керувати контентом курсу відповідно до профілю кожного користувача.</p>
<p><strong>Змінні, які потрібно створити в Articulate Storyline:</strong></p>
<p><img loading="lazy" decoding="async" class="wp-image-17519 aligncenter" src="https://collaborator.biz/wp-content/uploads/2025/05/nazva-zminnoyi.png" alt="Articulate Storyline" width="579" height="724" srcset="https://collaborator.biz/wp-content/uploads/2025/05/nazva-zminnoyi.png 1080w, https://collaborator.biz/wp-content/uploads/2025/05/nazva-zminnoyi-240x300.png 240w, https://collaborator.biz/wp-content/uploads/2025/05/nazva-zminnoyi-819x1024.png 819w, https://collaborator.biz/wp-content/uploads/2025/05/nazva-zminnoyi-768x960.png 768w" sizes="auto, (max-width: 579px) 100vw, 579px" /></p>
<h3>Як це виглядає на практиці: готовий приклад SCORM-курсу з персоналізацією</h3>
<p>Для наочності я підготував <strong>приклад курсу з вбудованим кодом</strong>. У ньому показано, як саме реалізується персоналізація контенту на основі даних із LMS. Усе, про що я розповідав вище:</p>
<p>– звертання до користувача по імені;<br />
– адаптація тексту залежно від статі;<br />
– автоматичне виведення посади та назви підрозділу на екран;<br />
– підвантаження фото користувача з його профілю в LMS;<br />
– генерація іменного сертифіката з автоматичним підставленням персональних даних.</p>
<div style="width: 1280px;" class="wp-video"><video class="wp-video-shortcode" id="video-17513-1" width="1280" height="720" preload="metadata" controls="controls"><source type="video/mp4" src="https://collaborator.biz/wp-content/uploads/2025/05/scorm-1.mp4?_=1" /><a href="https://collaborator.biz/wp-content/uploads/2025/05/scorm-1.mp4">https://collaborator.biz/wp-content/uploads/2025/05/scorm-1.mp4</a></video></div>
<p>Ви можете легко адаптувати цей приклад під свої курси. Достатньо змінити тексти, кольори чи стилі оформлення.</p>
<blockquote><p><em><strong>Завантажуйте приклад файлу, щоб протестувати все на власному курсі або використати його як основу для своїх проєктів: <a href="https://drive.google.com/drive/folders/1NW9mPLJtm8TKIMAlyFNwdpPw4F5KLgNu?usp=drive_link" target="_blank" rel="noopener">завантажити файл</a></strong></em></p></blockquote>
<h2>Практична частина: як налаштувати персоналізацію</h2>
<p>Тепер – до технічної реалізації.</p>
<p><span style="font-weight: 400;">Перше – </span>підготовка прикладу JavaScript-коду, який зчитує розширені дані з LMS Collaborator та передає їх у змінні вашого курсу, створеного в Articulate Storyline.</p>
<p>Код працює однаково коректно як у SCORM 1.2, так і в SCORM 2004 – тож вам не доведеться нічого додатково допрацьовувати. Достатньо один раз вставити його у проєкт, і курс буде готовий до публікації в будь-якому з цих форматів.</p>
<details>
<summary><span style="color: #ff6600;"><strong>Приклад готового скрипта</strong></span></summary>
<p>function findLMSAPI(win) {<br />
if (win.hasOwnProperty(&#8220;API&#8221;)) return win.API;<br />
else if (win.parent == win) return null;<br />
else return findLMSAPI(win.parent);<br />
}</p>
<p>function getSCORMValue(element) {<br />
try {<br />
var lmsAPI = findLMSAPI(this);<br />
if (lmsAPI) {<br />
let value = null;<br />
if (typeof lmsAPI.LMSGetValue === &#8220;function&#8221;) {<br />
value = lmsAPI.LMSGetValue(element);<br />
}<br />
if (value === &#8220;&#8221; || value === null) {<br />
}<br />
return value;<br />
} else {<br />
return null;<br />
}<br />
} catch (error) {<br />
return null;<br />
}<br />
}</p>
<p>function setArticulateVar(variable, value) {<br />
var p = GetPlayer();<br />
if (p &amp;&amp; typeof p.SetVar === &#8220;function&#8221;) {<br />
p.SetVar(variable, value);<br />
let checkValue = p.GetVar(variable);<br />
}<br />
}</p>
<p>function checkAndSetArticulateVars(studentData) {<br />
var p = GetPlayer();<br />
if (p &amp;&amp; typeof p.SetVar === &#8220;function&#8221;) {<br />
const mappings = {<br />
user_id: String(studentData.id),<br />
user_uid: String(studentData.uid),<br />
user_is_chief: studentData.is_chief,<br />
user_position_rank: studentData.position_rank,<br />
user_email: studentData.email,<br />
user_fullname: studentData.fullname,<br />
user_gender: studentData.gender,<br />
user_city: studentData.city,<br />
user_position: studentData.position,<br />
user_department: studentData.department,<br />
user_firstname: studentData.firstname,<br />
user_secondname: studentData.secondname,<br />
user_patronymic: studentData.patronymic,<br />
user_international_name: studentData.international_name,<br />
user_photo_thumb: studentData.photo_thumb,<br />
user_big_photo_thumb: studentData.big_photo_thumb<br />
};</p>
<p>for (const articulateVar in mappings) {<br />
const value = mappings[articulateVar] !== null &amp;&amp; mappings[articulateVar] !== undefined ? mappings[articulateVar] : &#8220;&#8221;;<br />
setArticulateVar(articulateVar, value);<br />
}<br />
} else {<br />
setTimeout(checkAndSetArticulateVars, 500, studentData);<br />
}<br />
}</p>
<p>function Script1() {<br />
try {<br />
var lmsAPI = findLMSAPI(this);<br />
if (lmsAPI) {<br />
var student_info = getSCORMValue(&#8220;cmi.core.student_info&#8221;);<br />
if (student_info) {<br />
try {<br />
var studentData = student_info;<br />
checkAndSetArticulateVars(studentData);<br />
} catch (parseError) {<br />
}<br />
}<br />
}<br />
} catch (error) {<br />
}<br />
}</p>
<p>setTimeout(function() {<br />
Script1();<br />
}, 1000);</p>
</details>
<p>Скрипт готовий, але щоб він працював без збоїв і зчитував дані для кожного користувача – потрібно вставити його в правильне місце.</p>
<p>Тож другий крок – додати код на майстер-слайд (Slide Master) (це найкраще рішення).</p>
<p>Так код буде автоматично запускатися, незалежно від того, з якого слайду користувач почне проходити курс. Вам не потрібно додаткових тригерів чи перевірок — дані з LMS зчитуються одразу.</p>
<h3>Персональне звертання та адаптація тексту за статтю</h3>
<p>Щоб курс «спілкувався» з користувачем, можна реалізувати два ключові елементи персоналізації: звертання по імені та автоматичу адаптацію тексту залежно від статі. Ось як це зробити:<br />
<strong>1. Створіть необхідні змінні у Storyline:</strong></p>
<ul>
<li><strong>user_firstname</strong> – тип Text, (містить ім’я користувача)</li>
<li><strong>user_gender</strong> – тип Text, (значення: male або female)</li>
</ul>
<p>Ці змінні автоматично заповнюються даними з LMS через підключений код.</p>
<p><strong>2. Використовуйте змінні у тексті слайдів:</strong></p>
<p>Щоб звернутися до користувача по імені – просто вставте <strong>user_firstname</strong> у потрібному місці тексту.</p>
<p>Щоб змінювати слова залежно від статі, наприклад, «готовий» «готова», використовуйте <strong>Conditions (умови)</strong> в тригерах або <strong>States (стани)</strong> об’єктів.</p>
<p><strong>Як це виглядає на практиці:</strong></p>
<p>Створіть два окремі текстові об’єкти: один зі словом «готовий», інший – «готова». Далі встановіть для кожного з них умову відображення:</p>
<ul>
<li>Якщо user_gender дорівнює male – показувати «готовий»</li>
<li>Якщо user_gender дорівнює female – показувати «готова»</li>
</ul>
<p><img loading="lazy" decoding="async" class="wp-image-17525 aligncenter" src="https://collaborator.biz/wp-content/uploads/2025/05/triggerstate.png" alt="" width="779" height="389" srcset="https://collaborator.biz/wp-content/uploads/2025/05/triggerstate.png 1920w, https://collaborator.biz/wp-content/uploads/2025/05/triggerstate-300x150.png 300w, https://collaborator.biz/wp-content/uploads/2025/05/triggerstate-1024x511.png 1024w, https://collaborator.biz/wp-content/uploads/2025/05/triggerstate-768x384.png 768w, https://collaborator.biz/wp-content/uploads/2025/05/triggerstate-1536x767.png 1536w" sizes="auto, (max-width: 779px) 100vw, 779px" /></p>
<p>У результаті курс звертається до користувача на ім’я, як це зробив би реальний співрозмовник, і змінює формулювання залежно від статі. Це створює ефект «живого» діалогу й персанолізує досвід навчання – наче курс створений саме для цієї людини.</p>
<h3>Адаптація сценарію курсу під кожного користувача</h3>
<p>Після отримання значень змінних із LMS, ви можете гнучко керувати сценарієм курсу. Підлаштовувати його під конкретного користувача, щоб кожен бачив лише те, що стосується саме його ролі, підрозділу чи завдань.</p>
<p>Наприклад:</p>
<ul>
<li>змінна <strong>user_position</strong> дозволяє показати певні слайди лише для окремих посад (наприклад, окремо для менеджерів і для продавців);</li>
<li><strong>user_department</strong> відображає різний контент залежно від підрозділу (наприклад, відділ логістики отримає одну версію, відділ продажу зовсім іншу).</li>
</ul>
<p>За допомогою цих змінних ви можете персоналізувати контент курсу в реальному часі:</p>
<p>– приховувати або показувати окремі об’єкти й блоки контенту,<br />
– запускати різні сценарні гілки в залежності від ролі,<br />
– створювати унікальний досвід для кожного співробітника.</p>
<p>Все це працює без зайвих налаштувань. Достатньо один раз зчитати змінні і далі курс сам підлаштовується під кожного, як персональний асистент.</p>
<h3>Відображення фото користувача</h3>
<p>Ще один спосіб зробити курс максимально персоналізованим – показати фото користувача просто в його інтерфейсі. Це додає відчуття живого контакту з людиною по той бік екрану.</p>
<p>Для цього потрібні дві змінні:</p>
<ul>
<li><strong>user_photo_thumb</strong> – мініатюра фото (128×128)</li>
<li><strong>user_big_photo_thumb</strong> – більша версії (180×180)</li>
</ul>
<p>Але все не так просто. В Storyline ви не можете напряму прив’язати URL до зображення, тому тут допоможе JavaScript.</p>
<p>Є два варіанти, як це реалізувати:</p>
<p><strong>Варіант 1: WebObject</strong></p>
<p>Найлегший шлях – це вставити на слайд готовий HTML-файл із тегом <strong>&lt;img src=&#8221;&#8230;&#8221;&gt;</strong>, який автоматично підтягне потрібне фото.</p>
<p>Це дуже простий та надійний спосіб, оскільки не потрібно прописувати жодних тригерів чи JavaScript-коду вручну. Достатньо вставити WebObject, і все працює автоматично, щойно змінні <strong>user_photo_thumb</strong> чи <strong>user_big_photo_thumb</strong> отримають значення.</p>
<p>Але, як і будь-яке рішення, WebObject має свої особливості:</p>
<ul>
<li>WebObject займає весь слайд, тому йому варто задати точний розмір, щоб не перекривати інші елементи (наприклад, 180×180).</li>
<li>До моменту, поки курс не завантажено в LMS, ви можете бачити чорний квадрат замість фото. Це може трохи ускладнити візуальне позиціонування об’єктів під час дизайну курсу.</li>
</ul>
<p>За замовчування форма фото квадратна, але ви можете зробити її круглою. Для цього потрібно задати логічну змінну <strong>photo_is_round</strong>:</p>
<ul>
<li><strong>false</strong> – квадратного фото;</li>
<li><strong>true</strong> – кругле фото (застосовується стиль <strong>border-radius: 50%</strong>).</li>
</ul>
<p><strong>Якщо LMS не передає фото або ви тестуєте курс локально, скористайтесь файлом з заглушкою (placeholder.jpg). За допомогою неї, користувач побачить заздалегідь підготовлену нейтральну іконку, а не порожнє місце.</strong></p>
<blockquote><p><em><strong>💡Скачати файл <a href="https://drive.google.com/drive/folders/10uV67JFr2BUc_ITFf516DXKA7hjWV3ws?usp=drive_link" target="_blank" rel="noopener">user_photo (.html)</a></strong></em></p></blockquote>
<p><strong>Варіант 2: Заміна фото всередині фігури</strong></p>
<p>Цей спосіб дещо складніший за попередній, але дає повну свободу дизайну та допомагає створити унікальний стиль оформлення фото.</p>
<p>Ви використовуєте будь-яку стандартну фігуру Storyline: коло, квадрат, шестикутник тощо. Форма фігури працюватиме, як «рамка» або «маска», і саме вона визначає, якою буде форма фото на екрані.</p>
<p><strong>Тут важливо зробити декілька підготовчих кроків:</strong></p>
<ol>
<li>Створіть потрібну фігуру на слайді.</li>
<li>Додайте всередину фігури зображення-заглушку.</li>
<li>Скопіюйте <strong>id</strong> елемента, який містить заглушку. Саме за цим id скрипт буде змінювати фото.</li>
<li>Додайте цей id у JavaScript.</li>
<li>Використайте JavaScript для динамічної заміни картинки всередині цієї фігури на <strong>user_photo_thumb</strong> або <strong>user_big_photo_thumb</strong>.</li>
</ol>
<p>Ось як це виглядає в інтерфейсі:</p>
<p><img loading="lazy" decoding="async" class="wp-image-17528 aligncenter" src="https://collaborator.biz/wp-content/uploads/2025/05/change_img_bg.png" alt="" width="781" height="358" srcset="https://collaborator.biz/wp-content/uploads/2025/05/change_img_bg.png 1133w, https://collaborator.biz/wp-content/uploads/2025/05/change_img_bg-300x137.png 300w, https://collaborator.biz/wp-content/uploads/2025/05/change_img_bg-1024x469.png 1024w, https://collaborator.biz/wp-content/uploads/2025/05/change_img_bg-768x352.png 768w" sizes="auto, (max-width: 781px) 100vw, 781px" /></p>
<p><img loading="lazy" decoding="async" class="wp-image-17531 aligncenter" src="https://collaborator.biz/wp-content/uploads/2025/05/change_img_bg_2.png" alt="" width="780" height="428" srcset="https://collaborator.biz/wp-content/uploads/2025/05/change_img_bg_2.png 1507w, https://collaborator.biz/wp-content/uploads/2025/05/change_img_bg_2-300x165.png 300w, https://collaborator.biz/wp-content/uploads/2025/05/change_img_bg_2-1024x562.png 1024w, https://collaborator.biz/wp-content/uploads/2025/05/change_img_bg_2-768x421.png 768w" sizes="auto, (max-width: 780px) 100vw, 780px" /></p>
<p><strong>Готовий код, який можна вставити у ваш курс. Просто замініть id на свій:</strong></p>
<details>
<summary><span style="color: #ff6600;"><strong>JavaScript</strong></span></summary>
<p>(function replaceUserPhoto() {</p>
<p>var player = GetPlayer();</p>
<p>var photoURL = player.GetVar(&#8220;user_big_photo_thumb&#8221;);</p>
<p>if (!photoURL) {</p>
<p>console.warn(&#8220;user_big_photo_thumb порожня або не задана.&#8221;);</p>
<p>return;</p>
<p>}</p>
<p>// Вкажи тут потрібний data-model-id вручну</p>
<p>var modelId = &#8220;&#8221;;</p>
<p>function trySwap() {</p>
<p>var container = document.querySelector(`[data-model-id=&#8221;${modelId}&#8221;]`);</p>
<p>if (!container) return false;</p>
<p>var img = container.querySelector(&#8220;image&#8221;);</p>
<p>if (!img) return false;</p>
<p>var currentHref = img.getAttributeNS(&#8220;http://www.w3.org/1999/xlink&#8221;, &#8220;href&#8221;);</p>
<p>if (currentHref === photoURL) return true; // вже замінено</p>
<p>img.setAttributeNS(&#8220;http://www.w3.org/1999/xlink&#8221;, &#8220;href&#8221;, photoURL);</p>
<p>img.setAttribute(&#8220;href&#8221;, photoURL);</p>
<p>return true;</p>
<p>}</p>
<p>// Чекаємо появи об&#8217;єкта в DOM</p>
<p>var attempts = 0;</p>
<p>var maxAttempts = 100;</p>
<p>var poll = setInterval(function () {</p>
<p>if (trySwap() || ++attempts &gt;= maxAttempts) {</p>
<p>clearInterval(poll);</p>
<p>}</p>
<p>}, 30);</p>
<p>})();</p>
</details>
<h3>Генерація іменного сертифіката</h3>
<p>Фінальний штрих персоналізації – це видача іменного сертифіката з особистими даними користувача, брендовим дизайном вашої компанії та динамічними змінними. Усе це можна зробити через <strong>WebObject</strong>.</p>
<p><strong>Що можна налаштувати?</strong></p>
<ul>
<li>Підставляти ім’я, прізвище, посаду та інші змінні прямо на сертифікат.</li>
<li>Змінювати фон сертифіката, додати будь-яке зображення зі своїм стилем, логотипами та підписами.</li>
<li>Виводити динамічні дані зі Storyline через ті ж самі змінні (user_firstname, user_position, тощо).</li>
<li>Дати можливість викачати PDF-файл згенерованого сертифіката одним кліком.</li>
</ul>
<p><strong>Як додати власний фон до сертифіката?</strong></p>
<ol>
<li style="list-style-type: none;">
<ol>
<li>Підготуйте зображення сертифікату у форматі <strong>PNG</strong> або <strong>JPEG</strong>.</li>
<li>Закодуйте зображення у формат <strong>Base64</strong> – це спеціальний код, який можна вставити прямо у HTML. Для цього використовуйте сервіс: <a href="https://www.base64-image.de/" target="_blank" rel="noopener"><strong>https://www.base64-image.de/</strong></a></li>
<li>Скопіюйте згенерований код, що починається з<strong> data:image/png;base64,&#8230;</strong></li>
<li>Вставте цей код у HTML-файл як фонове зображення сертифіката. Потім додайте на слайд як WebObject.</li>
<li>Створити тригер для виклику друку:</li>
</ol>
</li>
</ol>
<details>
<summary><span style="color: #ff6600;"><strong>Код</strong></span></summary>
<p>var iframe = document.querySelector(&#8216;iframe&#8217;);<br />
if (iframe &amp;&amp; iframe.contentWindow &amp;&amp; iframe.contentWindow.generatePdf) {<br />
iframe.contentWindow.generatePdf();<br />
}</p>
</details>
<blockquote><p><em><strong>💡Приклад такого HTML-шаблону ви можете завантажити тут:</strong></em><br />
<em><a href="https://drive.google.com/file/d/1gInF0FlOZQK3H1l50_8xQ4iZfg8H9umB/view?usp=drive_link" target="_blank" rel="noopener"><strong>Завантажити приклад HTML-шаблону</strong></a></em></p></blockquote>
<p><img loading="lazy" decoding="async" class="wp-image-17534 aligncenter" src="https://collaborator.biz/wp-content/uploads/2025/05/img_certificate_1.png" alt="" width="781" height="303" srcset="https://collaborator.biz/wp-content/uploads/2025/05/img_certificate_1.png 1920w, https://collaborator.biz/wp-content/uploads/2025/05/img_certificate_1-300x116.png 300w, https://collaborator.biz/wp-content/uploads/2025/05/img_certificate_1-1024x397.png 1024w, https://collaborator.biz/wp-content/uploads/2025/05/img_certificate_1-768x298.png 768w, https://collaborator.biz/wp-content/uploads/2025/05/img_certificate_1-1536x596.png 1536w" sizes="auto, (max-width: 781px) 100vw, 781px" /></p>
<p>Змінна <strong>%course_title%</strong> автоматично підставляє назву курсу у сертифікат під час генерації. Дата формування також додається автоматично – вам не потрібно заповнювати її вручну.</p>
<blockquote><p><em><img loading="lazy" decoding="async" class="wp-image-17516 alignleft" src="https://collaborator.biz/wp-content/uploads/2025/05/image-1.png" alt="" width="108" height="108" srcset="https://collaborator.biz/wp-content/uploads/2025/05/image-1.png 718w, https://collaborator.biz/wp-content/uploads/2025/05/image-1-300x300.png 300w, https://collaborator.biz/wp-content/uploads/2025/05/image-1-150x150.png 150w" sizes="auto, (max-width: 108px) 100vw, 108px" />Дякую, що дочитали до кінця! Сподіваюся, ви знайдете для себе корисні кейси та ідеї, які зможете адаптувати під свої курси в Storyline. Ми пройшли шлях від базових змінних до персоналізованих фото та сертифікатів – і все це є у готовому прикладі. Нехай ваші курси будуть не просто навчальними, а персоналізованими, ефективними та захоплюючими!</em></p></blockquote>
<h2></h2>
<h2>Висновок</h2>
<p>Персоналізація в навчанні – це не просто тренд, а потужний інструмент підвищення залученості та ефективності. Коли курс «говорить» із користувачем його мовою, звертається по імені, адаптує контент під індивідуальні потреби – це створює зовсім інший навчальний досвід.</p>
<p>Такий підхід дає відчутні результати:</p>
<ul>
<li>підвищує рівень завершення курсів,</li>
<li>покращує засвоєння матеріалу,</li>
<li>створює емоційний зв&#8217;язок із контентом,</li>
<li>формує позитивне ставлення до корпоративного навчання.</li>
</ul>
<p>Олег Селезень на практиці довів, що зробити це реально навіть у межах SCORM-курсів. Із правильними інструментами та невеликим доопрацюванням стандарту ви можете створювати курси, які будуть сприйматися не як шаблон, а як контент, створений спеціально для кожного співробітника. І це головна сила сучасного e-learning.</p>
<div class="try-block" style="width: 100% max-width: 750px;">
<div class="container-fluid">
<div class="try-container d-lg-flex align-items-center">
<div class="try-info" style="width: 100%; padding: 30px;">
<div class="anons">У LMS Collaborator ми підтримуємо підхід до навчання, де технологія працює в парі з потребами людей. Платформа дає широкі можливості для впровадження персоналізації – як у SCORM, так і в інших форматах. Якщо ви шукаєте рішення, яке дозволить створювати по-справжньому персоналізоване навчання, спробуйте LMS Collaborator.</div>
<div class="anons"><strong><em><a class="button white d-flex align-items-center justify-content-center call-request-form" href="#" data-toggle="modal" data-target="#trial">Try LMS Collaborator</a></em></strong></div>
</div>
</div>
</div>
</div>
]]></content:encoded>
					
		
		<enclosure url="https://collaborator.biz/wp-content/uploads/2025/05/scorm-1.mp4" length="16464773" type="video/mp4" />

			</item>
		<item>
		<title>Контент-стратегія в електронному навчанні. Розробники SCORM</title>
		<link>https://collaborator.biz/blog/content-strategy-in-e-learning-scorm/</link>
		
		<dc:creator><![CDATA[Atamanenko Katya]]></dc:creator>
		<pubDate>Wed, 27 Sep 2023 11:44:10 +0000</pubDate>
				<category><![CDATA[Корпоративне навчання та розвиток]]></category>
		<category><![CDATA[#LMSCollaborator]]></category>
		<category><![CDATA[#SCORM]]></category>
		<category><![CDATA[eLearning]]></category>
		<category><![CDATA[LMS]]></category>
		<guid isPermaLink="false">https://collaborator.biz/?p=13860</guid>

					<description><![CDATA[При формуванні контент-стратегії методисти враховують безліч факторів: бізнес-цілі компанії, рівень знань та потреби співробітників, технологічні можливості тощо. Та SCORM виділяють як...]]></description>
										<content:encoded><![CDATA[<p>При формуванні контент-стратегії методисти враховують безліч факторів: бізнес-цілі компанії, рівень знань та потреби співробітників, технологічні можливості тощо. Та SCORM виділяють як важливу складову успішної контент-стратегії навчання співробітників. Особливо в сферах, де важливе ефективне управління, відстеження прогресу та результатів. Оскільки він створює можливість керованого навчання співробітників у відповідності до бізнес-потреб компанії.</p>
<p>SCORM встановлює стандарти для створення інтерактивного навчального контенту, який легко інтегрується в LMS. Саме це робить цей формат зручним та універсальним.</p>
<p>В статті ми детальніше розберемо всі переваги цього формату, а також поділимося підбіркою розробників SCORM-курсів.</p>
<p><span id="more-13860"></span></p>
<h2>Що таке SCORM?</h2>
<p>SCORM (Shareable Content Object Reference Model) – це стандарт для створення, організації та доставки навчального контенту в електронному форматі. Він дозволяє розробникам створювати навчальні курси та матеріали, які можуть бути використані в різних системах управління навчанням (LMS).</p>
<h2>Чому SCORM – це база в корпоративному elearning?</h2>
<ul>
<li><strong>Стандартизація та сумісність.</strong></li>
</ul>
<p>Курси SCORM можуть інтегруватися з різними системами управління навчанням (LMS). Ви можете з легкістю вивантажувати курси з однієї LMS та переносити в іншу.</p>
<p><img loading="lazy" decoding="async" class="alignnone wp-image-13296" src="https://collaborator.biz/wp-content/uploads/2023/06/logo.png" alt="" width="268" height="101" srcset="https://collaborator.biz/wp-content/uploads/2023/06/logo.png 1772w, https://collaborator.biz/wp-content/uploads/2023/06/logo-300x113.png 300w, https://collaborator.biz/wp-content/uploads/2023/06/logo-1024x385.png 1024w, https://collaborator.biz/wp-content/uploads/2023/06/logo-768x289.png 768w, https://collaborator.biz/wp-content/uploads/2023/06/logo-1536x578.png 1536w" sizes="auto, (max-width: 268px) 100vw, 268px" /></p>
<p><em>Наприклад, коли компанія Union Group змінювала систему для дистанційного навчання, зіткнулася з втратою більшості навчальних матеріалів. Єдиний контент, який вдалось зберегти та перенести на нову LMS – це були саме курси у форматі SCORM. Що вкотре доводить зручність цього формату.</em></p>
<ul>
<li><strong>Структурований навчальний процес.</strong></li>
</ul>
<p>Використання SCORM забезпечує стандартизовану структуру для курсу. Курси розділяються на модулі, розділи, теми та завдання, що полегшує навчання співробітників.</p>
<ul>
<li><strong>Інтерактивність та залучення.</strong></li>
</ul>
<p>SCORM дозволяє вбудовувати інтерактивні вправи, тести та завдання в онлайн курси. Це сприяє залученню учасників та активному навчанні.</p>
<ul>
<li><strong>Аналітика та звіти.</strong></li>
</ul>
<p>Системи LMS, що підтримують формат SCORM, можуть надавати аналітичні дані про те, як співробітники взаємодіють з контентом, скільки часу вони витрачають на вивчення, які труднощі у них виникають тощо. Це допомагає оцінювати ефективність навчання та вчасно коригувати стратегію.</p>
<p>Загалом, використання SCORM у контент-стратегії навчання допомагає створити організований, інтерактивний та ефективний навчальний процес. Такий налагоджений процес краще сприяє покращенню знань та навичок працівників.</p>
<h2>Де замовити SCORM-курс? Підбірка розробників від LMS Collaborator</h2>
<p>Ми провели опитування серед наших колег (професіоналів сфери e-learning), щоб з’ясувати найкращих розробників SCORM-курсів. Ділимося нашою підбіркою:</p>
<h3>1. <a href="https://pg-group.online/" target="_blank" rel="noopener">Learn.Solution</a></h3>
<p>Компанія займається розробкою електронних навчальних курсів, тестів, діалогових тренажерів, симуляцій «під ключ» з довічною гарантією. Також можна замовити створення комплексних програм змішаного навчання та траєкторій. Спеціалісти Learn.Solution працюють з різними редакторами: Articulate Storyline, Articulate Rise та Adobe Captivate.</p>
<p>На сайті компанії можна ознайомитись з відгуками, переглянути портфоліо та придбати готові курси з Microsoft Excel, Outlook, Teams тощо.</p>
<p><img loading="lazy" decoding="async" class="alignnone size-full wp-image-13865" src="https://collaborator.biz/wp-content/uploads/2023/09/image2-1.png" alt="" width="1038" height="433" srcset="https://collaborator.biz/wp-content/uploads/2023/09/image2-1.png 1038w, https://collaborator.biz/wp-content/uploads/2023/09/image2-1-300x125.png 300w, https://collaborator.biz/wp-content/uploads/2023/09/image2-1-1024x427.png 1024w, https://collaborator.biz/wp-content/uploads/2023/09/image2-1-768x320.png 768w" sizes="auto, (max-width: 1038px) 100vw, 1038px" /></p>
<p style="text-align: center;"><em>Приклад розробленої гри Learn.Solution «Хто хоче стати мільйонером»</em></p>
<h3>2. <a href="https://k-solutions.com.ua/" target="_blank" rel="noopener">K-Solutions</a></h3>
<p>Фахівці компанії здійснюють повний цикл розробки електронного курсу, включаючи його проектування, дизайн, верстку та тестування в системі дистанційного навчання. Створюють курси різних форматів: тексто-графічні, симулятори, діалогові тренажери, гейміфіковані. Крім цього надають послуги оновлення існуючих курсів, верстки курсів за сценарієм замовника та конвертації презентацій в електронний курс. Працюють з такими редакторами як CourseLab, Articulate StoryLine, Captivate.</p>
<p>На сайті можете ознайомитись з прайсом на розробку курсів та переглянути портфоліо компанії.</p>
<p><img loading="lazy" decoding="async" class="alignnone size-full wp-image-13866" src="https://collaborator.biz/wp-content/uploads/2023/09/image4-1.png" alt="" width="1239" height="761" srcset="https://collaborator.biz/wp-content/uploads/2023/09/image4-1.png 1239w, https://collaborator.biz/wp-content/uploads/2023/09/image4-1-300x184.png 300w, https://collaborator.biz/wp-content/uploads/2023/09/image4-1-1024x629.png 1024w, https://collaborator.biz/wp-content/uploads/2023/09/image4-1-768x472.png 768w" sizes="auto, (max-width: 1239px) 100vw, 1239px" /></p>
<p style="text-align: center;"><em>Приклади створених курсів K-Solutions</em></p>
<h3>3. <a href="https://newrealgoal.com.ua/" target="_blank" rel="noopener">NewRealGoal</a></h3>
<p>Компанія займається розробкою контенту для корпоративного навчання в різних форматах: відео, статті, вебінари та електронні курси під ключ. Крім цього створюють гібридні формати навчання – офлайн та онлайн, у змішаних та мікроформатах. Наприклад, курс під ключ + додатковий тренінг для закріплення матеріалу тощо.</p>
<p>Адаптують навчальний контент та складають комплексні програми під запити замовників, супроводжують навчання та надають свої відео продукти для завантаження на LMS платформу.</p>
<p>Мають досвід співпраці з понад 100 компаніями.</p>
<p><img loading="lazy" decoding="async" class="alignnone size-full wp-image-13867" src="https://collaborator.biz/wp-content/uploads/2023/09/image3-1.png" alt="" width="1069" height="627" srcset="https://collaborator.biz/wp-content/uploads/2023/09/image3-1.png 1069w, https://collaborator.biz/wp-content/uploads/2023/09/image3-1-300x176.png 300w, https://collaborator.biz/wp-content/uploads/2023/09/image3-1-1024x601.png 1024w, https://collaborator.biz/wp-content/uploads/2023/09/image3-1-768x450.png 768w" sizes="auto, (max-width: 1069px) 100vw, 1069px" /></p>
<h3>4. <a href="https://teach-hub.com/rozrobka-kursivtreninhiv/" target="_blank" rel="noopener">TeachHub</a></h3>
<p>Команда досвідчених професіоналів-розробників якісних курсів та тренінгів для дистанційного навчання. Займаються розробкою текстових і мультимедійних навчальних матеріалів будь-якого рівня складності та тематики. А також створюють навчальні тести та тренажери.</p>
<p>На сайті є доступний вибір готових дистанційних курсів для співробітників, також можна замовити курс «під ключ» на тематику, яка необхідна.</p>
<p><img loading="lazy" decoding="async" class="alignnone size-full wp-image-13868" src="https://collaborator.biz/wp-content/uploads/2023/09/image5-1.png" alt="" width="1350" height="730" srcset="https://collaborator.biz/wp-content/uploads/2023/09/image5-1.png 1350w, https://collaborator.biz/wp-content/uploads/2023/09/image5-1-300x162.png 300w, https://collaborator.biz/wp-content/uploads/2023/09/image5-1-1024x554.png 1024w, https://collaborator.biz/wp-content/uploads/2023/09/image5-1-768x415.png 768w" sizes="auto, (max-width: 1350px) 100vw, 1350px" /></p>
<p style="text-align: center;"><em>Приклади готових робіт від TeachHub</em></p>
<h3>5. <a href="https://www.facebook.com/groups/3907520972686495/user/100001225756710/" target="_blank" rel="noopener">Maria Shidlovskaya</a></h3>
<p>Під час опитування колеги рекомендували розробницю Марію Шидловську.</p>
<p>В портфоліо Марії вже понад 70 клієнтів та 1000 створених на замовлення курсів. Має досвід швидкої розробки інтерактивних курсів з елементами гейміфікації та довгих програм навчання за 1-2 дні. Марія працювала зі сферами ІТ, GameDev, Телеком, FMCG тощо. Розробляє курси на різні тематики, зокрема soft та hard skills. Створює програми onboarding для новачків, програми наставництва та стажування, курси з розвитку компетенцій, курси для менеджерів різного рівня, курси з безпеки, комплаєнс, охорона праці і т.д.</p>
<h2>Висновок</h2>
<p>SCORM – чудове рішення, за допомогою якого можна перетворити навчання співробітників в корисний та інтерактивний досвід. Однак важливо пам&#8217;ятати, що SCORM – це лише інструмент, і успішність контент-стратегії навчання також залежить від якості контенту, відповідності потребам аудиторії та ефективності методів навчання.</p>
<div class="try-block" style="width: 750px;">
<div class="container-fluid">
<div class="try-container d-lg-flex align-items-center">
<div class="try-info" style="width: 750px; padding: 30px;">
<div class="anons">Комбінуйте інструменти навчального порталу LMS Collaborator разом з форматом SCORM та створюйте свою успішну стратегію. А наші менеджери радо вам допоможуть.</div>
<div class="anons"><strong><em><a class="button orange d-flex align-items-center justify-content-center call-request-form" style="width: 220px;" href="#" data-toggle="modal" data-target="#trial">Try LMS Collaborator</a></em></strong></div>
</div>
</div>
</div>
</div>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>(Русский) Встречайте Collaborator v.2: новый дизайн и новые возможности!</title>
		<link>https://collaborator.biz/blog/new-design-collaborator/</link>
		
		<dc:creator><![CDATA[The LMS Collaborator Team]]></dc:creator>
		<pubDate>Thu, 15 Aug 2019 08:13:45 +0000</pubDate>
				<category><![CDATA[Оновлення LMS Collaborator]]></category>
		<category><![CDATA[#corporatetraining]]></category>
		<category><![CDATA[#elearningtools]]></category>
		<category><![CDATA[#LMSCollaborator]]></category>
		<category><![CDATA[#SCORM]]></category>
		<category><![CDATA[LMS]]></category>
		<guid isPermaLink="false">http://blog.collaborator.biz/?p=4233</guid>

					<description><![CDATA[]]></description>
										<content:encoded><![CDATA[]]></content:encoded>
					
		
		
			</item>
	</channel>
</rss>
