סיון

איך להחליף חיצים ימינה ושמאלה בתבנית ב-Moodle

הפרוייקט עליו אני עובדת לאחרונה, הוא במוודל.
יצא לי לעבוד במוודל לפני כשנתיים-שלוש, בגרסה 1.9. כעת מוודל הוא בגרסה 2.4, וההבדל הוא משמעותי, כי במעבר מ-1.x ל-2, המוודל עבר שיפוץ רציני. כתוצאה מכך, הרבה יותר קל ונוח להתמצא בקוד, וכמו”כ יש דברים שהרבה יותר קל לעשות מאשר קודם.

בפוסט הזה, ואולי גם בכמה פוסטים עתידיים, אספר קצת על חוויותי במוודל, גם כדי לשתף (אם כי אינני יודעת כמה מכם משתמשים במוודל), אבל גם כדי שיהיה לי תיעוד למקרה שארצה להזכר בזה מתישהו :). אז קדימה.

עם כל ההקדמה שלי על זה שהמוודל השתפר מאד בשנים האחרונות, עדיין הרבה דברים במוודל הם יותר מסובכים מוורדפרס. למשל, להזיז אלמנטים בדף זה לפעמים מסובך, כי בניגוד לוורדפרס, במוודל יש גם תבנית וגם פורמט שאחראים על בניית הדף. ובמוודל אין ווים (hook-ים), שזה חסרון גדול מאד למי שרגיל שכמעט כל שינוי שבא לו לעשות אפשר לעשות פשוט ע”י היתלות בוו הנכון…
אז כשהמעצבת אמרה שצריך להחליף את החץ הימני בפרורי העוגה (החץ הימני הדיפולטי היה פחוס מדי לטעמה…), תהיתי לעצמי איך אני אעשה את זה בלי וו, כי פרורי העוגה נבנים ע”י ה-core של מוודל.
אז התחלתי לחקור, וראיתי שפרורי העוגה נבנים בקובץ \lib\outputrenderers.php, ושהפונקציה שבונה אותם קוראת, בין השאר, לפונקציה בשם get_separator() . סבבה. היא, בתורה קוראת ל- link_arrow_right() שמשתמשת ב-$OUTPUT->rarrow(), והוא מצידו מקבל את הערך שלו מ-$this->page->theme->rarrow. וכששאלתי את ה-IDE שלי מה הערך של rarrow דנן, הוא שלח אותי ל-\lib\outputlib.php ושם נאמר לי:

public $rarrow = null;

אהה. אז מתברר שזה משהו שמקבל ערך תוך כדי הבניה של הדף. יפה. בשלב זה פרשתי מה-IDE שלי והלכתי ל-Agent Ransack לברר איפה בקוד נותנים ל-rarrow ערך. הוא החזיר לי רשימה של 32 קבצים. הסתכלתי על הרשימה וראיתי – פדם פדם פדם – שאחד הקבצים הוא ה-config.php של התבנית שלי!

אצתי רצתי ל-IDE שלי שוב, ופתחתי את הקובץ, ומה רואות עיני?

$THEME->rarrow  = '⟩';

////////////////////////////////////////////////////
// Overrides the right arrow image used throughout Moodle
////////////////////////////////////////////////////

הפלא ופלא – בקלי קלות אפשר להחליף את החץ לכל תבנית.

מנפלאות המוודל.

כתבו תגובה

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