הוספת סוג חדש של פרמטר לג'ומלה

הוספת סוג חדש למגוון הפרמטרים האפשריים בבניית מודול לג'ומלה.

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

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

ג'ומלה מאפשרת לנו ליצור פרמטרים משל עצמנו בקלות רבה מאד באמצעות תוספת קטנה של קוד למודול שלנו ואת הקלות והיעילות של ג'ומלה במקרה הזה אני אדגים כאן באמצעות הוספת פרמטר שיאפשר לי לבחור מספר של משתמשים ב-multiple select list.

יצירת קובץ PHP שאחראי על הפרמטר

אנו ניצור קובץ בשם multiplechoiceusers.php ונמקם אותו בתיקיה של המודול שלנו. כרגע אנחנו לא ניגע ב-multiplechoiceusers.php אלא נכניס לתוכו תוכן מאוחר יותר.

הגדרת הקובץ במודול

אנו נגדיר את הקובץ שיצרנו בתוך ה-XML של המודול שלנו:


<param name="fusers" type="multiplechoiceusers"  default="" label="Multiple Featured Users" description="Please select Multiple Users using the Ctrl button while clicking" />

בהגדרת הפרמטרים אנו נוסיף תכונה של -addpath ונכניס את ה-path של המודול שלנו באופן הבא:


<params addpath="/modules/YOUR_MODULE">

כש-YOUR_MODULE הוא השם של המודול שלנו. כך למשל, יראה הפרמטר שלנו אם הוא בודד:


<params addpath="/modules/YOUR_MODULE">
<param name="fusers" type="multiplechoiceusers"  default="" label="Multiple Featured Users" description="Please select Multiple Users using the Ctrl button while clicking" />
</params>

מה שחשוב ב-xml הוא ה-type שצריך להיות זהה לחלוטין לשם קובץ ה-PHP שלנו. במקרה הזה ה-type שהגדרנו ב-XML הוא: multiplechoiceusers והוא זהה לחלוטין לשם קובץ ה-PHP שלנו.

הכנסת תוכן לקובץ ה-PHP שלנו

קובץ ה-PHP שיצרנו קודם: multiplechoiceusers.php צריך לקבל חיים. אנו יוצרים class שמרחיבה את JElement ובתוכה מכניסים שאילתה ל-DB ויוצרים את תיבת הטקסט multiple. נשמע מסובך? זה ממש לא:


<?php 
//Creating Class JElementmultiplechoiceusers
class JElementmultiplechoiceusers extends JElement {
//Method of JElement, used for entering new paramter
  function fetchElement($name, $value, &$xmlElement, $control_name )
  {
	//Our Query
  	$query = 'SELECT id AS value, username AS text FROM #__users;'; //
  	//calling to DB and executing the query to options var
  	$db = &JFactory::getDBO();
    $db->setQuery($query);
    $options = $db->loadObjectList();
  	//Returning html element generated by JHTML.
    return JHTML::_('select.genericlist',  $options, ''.$control_name.'['.$name.'][]', 
      'class="inputbox" size="15" multiple="multiple"',
      'value', 'text', $value, $control_name.$name);
  }
}

ב-class שלנו יש מתודה אחת בשם fetchElement שהיא זו שאחראית על יצירת הפרמטר והממשק שלו. המתודה היא מתודה של JElement והיא מחזירה את אלמנט ה-select שלנו. מה שיש בה זו השאילתה שהיא שאילתה פשוטה שמחזירה את כל המשתמשים. שימו לב שבשאילתה הנתונים מתקבלים לפי value שזה הערך של ה-option שיהיה ו-text שזה הלייבל של ה-option.
JHTML זה אובייקט שמחזיר HTML וקיים לא מעט פעמים בג'ומלה. שימו לב שהוא מקבל גם את ה-options$ וגם פרמטרים אחרים שמגיעים מה-fetchElement.

ו… זהו! אם תפעילו את המודול תוכלו לראות שיש פרמטר כזה ואפשר להשתמש בו. איך אנו משתמשי בו? בדיוק כמו כל פרמטר אחר ובדוגמה שלנו:


$params->fusers

כאשר אנו נקבל מערך, כיוון שמדובר בכמה וכמה אפשרויות שאפשר לבחור.

פוסטים נוספים שכדאי לקרוא

פתרונות ומאמרים על פיתוח אינטרנט

המנעו מהעלאת source control לשרת פומבי

לא תאמינו כמה אתרים מעלים את ה-source control שלהם לשרת. ככה תמצאו אותם וגם הסבר למה זה רעיון רע.

גלילה לראש העמוד