דף הבית מאמרים ג'ומלה! ההבדל בין רכיב למודול
ההבדל בין רכיב למודול
שבת, 24 נובמבר 2007 03:36

לעיתים מאוד קרובות, עולה בקרב משתמשים חדשים וותיקים הבלבול בין רכיב למודול. אולם ברגע שנעשית הבדלה, המבנה הארכיטקטורי של ג'ומלה! נעשה ברור.
אז מהו ההבדל בין רכיב למודול?

הנה התשובה הקצרה:
מודול
יכול להופיע בכל דף והוא בדרך-כלל מאוד פשוט.
רכיב
טוען דפים משלו ובדרך-כלל יותר מורכב.

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

כאשר מישהו מבקר באתר, הקובץ index.php נקרא מתיקיית השורש של ג'ומלה!. קובץ זה, טוען הרבה מחלקות וחלקי קוד אשר גורמים לג'ומלה לעבוד. לאחר טעינה זו, ג'ומלה מחפש את התיקייה של התבנית הנוכחית ומנסה לטעון את קובץ ה-index.php שלה שנמצא שם.
כך שבעצם יש גם לתיקיית השורש וגם לתיקיית התבנית קבצי index משלהם, כאשר זה שבשורש טוען את זה שבתבנית בשביל התצורה.

קובץ ה-index.php שבתיקיית התבנית נראה לרוב כקובץ HTML. בתוך קובץ זה, נמצא קריאת קוד

  1. mosMainBody();
 
קריאה זו אומרת לעצור את יצירת ה-HTML של התבנית ולהתחיל לטעון את האלמנט המרכזי הנוכחי של המערכת שהינו בסופו של דבר, רכיב אחד בלבד. עובדה זו אומרת כי כל דף של ג'ומלה! טוענם רכיב אחד כלשהו. (כמובן שניתן להסיר מהתבנית את הקריאה, אבל אז נגביל את האתר והמערכת בצורה חמורה מאוד).
כברירת מחדל, ג'ומלה! טוענת את הרכיב המתאים לפריט התפריט הראשון (בתפריט הראשי mainmenu). באופן כללי זהו דף הבית (Home) המפנה לרכיב frontpage. רכיב ה-frontpage מציג דפי תוכן שנכתבו ע"י כותבים שונים באתר. לחיצה על אחד התכנים האלו, אומר לג'ומלה! לטעון את רכיב ה-content, יחד עם התוכן הספציפי שנטען מבסיס הנתונים.
קישורים אחרים, יכולים להורות לג'ומלה! לטעון רכיבים אחרים.

בנוסף לקריאה ל-mosMainBody, מכילה התבנית הרבה קריאות ל:

  1. mosLoadModules(...)
שימו לב לריבוי הלשוני (s) בקריאה
לדוגמא
  1. mosLoadModules('left');
אומר לג'ומלה! לטעון את כל המודולים אשר מוקמו באיזור התצוגה left, אשר משוייכים לרכיב הנוכחי
כאשר מודול מוגדר בפאנל הניהול, מופיעה רשימת בחירה אשר מאפשרת למנהל האתר לשייך מודולים לרכיבים מסויים (או כולם, כמו ברוב המקרים). בצורה זו, מתאפשר למנהל האתר, למשל, לשייך את מודול ההתחברות ל-'דף הבית', אך לא לדפים אחרים.
תבנית אינה נדרשת לטעון מודול לכל האיזורים (או לטעון מודולים בכלל). נהוג לטעון לפחות אחד עבור התפריט, אלא אם רוצים לקודד את הניווט באתר באופן ידני בתבנית (דרך שמאוד לא מומלצת).

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

כאשר נגיע ל-Manage Modules, נקבל רשימה נוספת, אשר תציג לנו את רשימת המודולים ולכל מודול את המידע הבא: פרסום/ביטול, מיקום, סידור. רשימה זו יכולה להיות ארוכה יותר מרשימת המודולים המותקנים משתי סיבות:

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

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

  1. backgroundcolor = green
עבור רקע בצע ירוק

עיצוב ובנייה של ניהול לרכיבים דורש קצת יותר מאמץ, אך כתוצאה מכך מתקבל ממשק פשוט שמאפשר למנהל האתר ניהול של פונקציונאליות מורכבת יותר. כאשר תצורת הניהול של רכיב נטענת, הקובץ:

  1. admin.[שם_הרכיב].php
 
מופעל מתוך תיקיית:
  1. administrator/components/com_[שם_הרכיב]
 
קובץ זה טוען את הממשק המתאים למשימה המבוקשת.

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


מאמר זה תורגם לעברית והותאם למשתמשים הישראלים ע"י מתי קוצ'ן.
כל הזכויות למאמר Components vs. Modules המקורי שייכות ל-Joseph L. LeBlanc.
עדכון אחרון ב-חמישי, 11 דצמבר 2008 20:31
 

חיפוש