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

במאמר הקודם שמלמד כיצד לבנות מודול למערכת ג'ומלה, למדנו שיש רשימת פרמטרים שאותה אנו מגדירים ב-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

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

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

אהבתם? לא אהבתם? דרגו!

לא אהבתי בכלללא אהבתיבסדראהבתיאהבתי מאוד (אין הצבעות)


אל תשארו מאחור! יש עוד מה ללמוד!

הצטרפו לעדכונים!

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

רן בר-זיק

רן בר-זיק כותב כל המאמרים באינטרנט ישראל, מפתח אינטרנט מנוסה במגוון שפות ופלטפורמות.
ניתן ליצור איתי קשר באמצעות:
כתובת המייל שלי: info@internet-israel.com.
פרופיל הלינקדאין שלי
הטוויטר שלי
פרופיל הפייסבוק שלי
אני תמיד שמח לייעץ ולעזור, אך בשל עומס הפניות הרב, אני לא תמיד מצליח לענות במהירות.