מרחשוון

הטמעת H5P בפיסקה מעוצבת ב-Moodle: מהשדרוגים שיצרנו ועד הפתרון המובנה

הבעיה

כבר כמה שנים שאנחנו משלבים פעילויות H5P בקורסים שלנו, תוך עיצוב חוויית הלמידה כך שהתכנים והתרגולים משתלבים בטבעיות בתוך השיעור. את השילוב אנחנו עושים ע”י iframe שמטמיע את הפעילויות בפיסקה מעוצבת, אבל נתקלנו באתגר: ה-iframe הטמיע את כל עמוד ה-Moodle שבו הפעילות, ולא רק את הפעילות עצמה. כדי לפתור את זה, יצרנו גרסה מותאמת של H5P שהוספנו לה פרמטר ייחודי &isembeded=1 בכתובת ה-src של ה-iframe, מה שאפשר לנו להציג רק את הפעילות.

עם הזמן, H5P שיפרו את המנגנון שלהם ותמכו בהטמעה מותאמת כברירת מחדל, מה שחייב אותנו לעדכן את ה-URLs בקורסים כך שיתאימו לפורמט החדש. בפוסט הזה אשתף איך פתרתי זאת באמצעות שאילתה פשוטה.

איך פתרתי את שינוי ה-URL-ים בעזרת כלי בינה מלאכותית

כשהתחלתי לטפל בשינוי כתובות ה-URL לפורמט החדש של H5P, פניתי לקלוד וביקשתי ממנו להמיר כתובות מהמבנה הבא:
https://campus.ort.org.il/mod/hvp/view.php?id=6554&isembedded=1
למבנה החדש:
https://campus.ort.org.il/mod/hvp/embed.php?id=6554

קלוד הציע שאילתת SQL ארוכה, שהשתמשה בפונקציות כמו SUBSTRING, POSITION, LOCATE, CONCAT, ו-SUBSTRING_INDEX. היא נראתה מבטיחה ומדויקת על הנייר, אבל כשהרצתי אותה, הבנתי שמשהו לא מסתדר: במקום לשמר את ה-ID של הפעילות, השאילתה שינתה אותו ל-ID של הקורס. זה היה כמובן לא מה שרציתי – ה-ID של הפעילות הוא הלב של הכתובת, וכל ההטמעות שלנו בקורסים נשענות עליו.

חזרתי לקלוד וסיפרתי לו על הבעיה. לבקשתו נתתי לו תוכן לדוגמה. זה עזר לו להכין שאילתה חדשה, אבל השאילתה הזאת לא שינתה כלום בתוכן. אחרי זה והא נתן לי שאילתה אחרת עם REGEXP_REPLACE, ונדמה היה לי שזה באמת הכיוון של הפתרון, אבל היא גרמה לשגיאת SQL!

בשלב הזה קלוד החליט לשנות כיוון, ולתהקדם צעד-צעד. הוא נתן לי שאילתה קטנה שטיפלה בשינוי של view.php?id= ל-embed.php?id=:

UPDATE mdl_label
SET intro = REPLACE(
intro,
'view.php?id=',
'embed.php?id='
)
WHERE intro LIKE '%<iframe src="https://campus.ort.org.il/mod/hvp/view.php%';

הרצתי אותה על תוכן אחד לדוגמה, והפלא ופלא – היא עבדה. אז הוא נתן לי עוד שאילתה קטנה שמטפלת בפרמטר &amp;isembedded=1:

UPDATE mdl_label
SET intro = REPLACE(
intro,
'&isembedded=1"',
'"'
)
WHERE intro LIKE '%<iframe src="https://campus.ort.org.il/mod/hvp/view.php%';

אבל אז חשבתי – למה להפעיל שתי שאילתות אם אפשר לאחד אותן?

השאילתה המלאה והסופית:

UPDATE mdl_label  
SET intro = 
REPLACE(     
    REPLACE(
        intro, 
        'view.php?id=', 
        'embed.php?id='),     
    '&amp;isembedded=1"',     
    '"' ) 
WHERE intro LIKE '%<iframe src="https://campus.ort.org.il/mod/hvp/view.php%'; 

התוצאה

הרצתי את השאילתה הזו, ובתוך שניות שיניתי מאות כתובות URL באופן מדויק. הפתרון הזה לא רק חסך זמן, אלא גם עבד באופן מושלם מהניסיון הראשון!

זו בדיוק הדוגמה לכמה שבעינה מלאכותית בשילוב הכוונה אנושית יכולים להביא לתוצאות מעולות.

כתבו תגובה

כתובת הדוא"ל שלכם לא תוצג.