| Joomla module development tutorial (Hebrew) - מדריך ליצירת מודולו בג'ומלה |
| Written by Itamar Elharar - איתמר אלהרר | |
| Wednesday, 15 August 2007 | |
|
המדריך הנ"ל נוצר בעקבות דיון בפורום ג'ומלה ישראל על דרך האתר, התנדבות ועזרה לקהילה - בקיצור אני החלטתי להתקדם בעצמי ולהציג את התוצאה המוגמרת (מתי - תודה על העצה).
הסבר קצר - המדריך יסביר שורה אחרי שורה את המבנה של מודול ההדגמה (mod_latestLinx) שתפקידו להציג את הלינקים האחרונים שהוכנסו לרכיב ההחלפת הלינקים LINX - com_linx והצגתם תחת רשימה באותו הסגנון של המודול חדשות אחרונות בג'ומלה.
ונעבור למדריך, דוגמא למודול בזמן אמת - www.perfectvoices.com
המודול mod_latestLinx כמו כל המודולים מורכב משני קבצים (או יותר) עיקריים אשר ביחד יבצעו את התפקיד שלמענו נוצרו:
הראשון הוא קובץ XML אשר משמש את מערכת ג'ומלה להתקנה ולשמירת הפרמטרים עבור המודול - נעבור על המבנה והקוד של הקובץ:
<?xml version="1.0" encoding="iso-8859-1"?> <mosinstall type="module" version="1.0.0"> <name>Latest Linx</name> <author>Itamar Elharar</author> <creationDate>Aug 14 2007</creationDate> <copyright>(C) 2007 El-Tech Elharar technology</copyright> <license>http://www.gnu.org/copyleft/gpl.html GNU/GPL</license> <authorEmail> This e-mail address is being protected from spam bots, you need JavaScript enabled to view it </authorEmail> <authorUrl>tech.elharar.biz</authorUrl> <version>1.0</version> <description> this module will list the latest Linx component items in a ul</description> <files> <filename module="mod_latestLinx">mod_latestLinx.php</filename> </files> <params> <param name="moduleclass_sfx" type="text" default="" label="Module Class Suffix" description="A suffix to be applied to the css class of the module (table.moduletable), this allows individual module styling." /> <param name="count" type="text" default="" label="Number of links: " description="Number of links to show in the module list" /> <param name="mod_title" type="text" default="" label="module title for the h3" description="module title" /> </params> </mosinstall>
הסבר שורה שורה: <?xml version="1.0" encoding="iso-8859-1"?>
כמו שניתן להבין בשורה הראשונה אנו מכניסים את ההגדרות עבור הקובץ XML. הגדרה של הקידוד והגרסה. השורה וההגדרות הן סטנדרטיות ולא ימנעו שימוש בעברית מאוחר יותר - לכן ההמלצה היא להעתיק ולהדביק <mosinstall type="module" version="1.0.0"> בשורה זו נמצא את ההגדרה של סוג ההתקנה, כאמור קובץ ה-XML ישמש את המערכת להתקנת המודול - לכן קיימת השורה שמגדירה את סוג ההתקנה. ניתן להבחין שמדובר בהתקנת מודול (type="module" ) המתאים למערכת ג'ומלה (JOOMLA) בגרסה version="1.0.0" ולגרסאות תואמות מאוחרות יותר. בשורות הבאות נגדיר את שם המודול, שם הכותב, תאריך יצירה, רשיון, זכויות יוצרים, אימייל ליוצר המודול, כתובת אינטרנט ליוצר, גרסה של המודול ותיאור. הפרטים הללו כמו המבנה שלהם בקובץ XML הינו סטנדרטי מופיע בכל מודול. לכן העצה של: העתיקו והדביקו במקום המתאים ולאחר מכן שנו את הפרטים בהתאמה.
<name>Latest Linx</name> שם המודול <author>Itamar Elharar</author> שם הכותב <creationDate>Aug 14 2007</creationDate>
תאריך יצירה
<copyright>(C) 2007 El-Tech Elharar technology</copyright>
זכויות יוצרים
<license>http://www.gnu.org/copyleft/gpl.html GNU/GPL</license>
רשיון שימוש
<authorEmail> This e-mail address is being protected from spam bots, you need JavaScript enabled to view it </authorEmail>
אימייל היוצר
<authorUrl>tech.elharar.biz</authorUrl>
כתובת היוצר
<version>1.0</version>
גרסה
<description> this module will list the latest Linx component items in a ul</description> תיאור המודול - יופיע לאחר ההתקנה, ניתן להכניס HTML אם מגדירים CDATA אחרי שעברנו על המאפיינים הסטנדרטיים של קובץ ה- XML אנו מגיעים למקום שבו אנו מציינים אלו קבצים מצורפים להתקנת המודול. כאשר המודול ארוז תחת קובץ ZIP ומוכן להתקנה יהיו בו הקבצים (והספריות וקבצים בתוכם אם צריך) שאנו מעונייניםלהתקין. ההתקנו תעשה כמובן על פי המבנה הקיים בקובץ ה-ZIP ומתאים להגדרות הקבצים.
<files> פתיחת אזור הקבצים
<filename module="mod_latestLinx">mod_latestLinx.php</filename>
הגדרת קובץ יחיד </files> סגירת אזור קבצים
לסיום אנו מכניסים את הגדרות הפרמטרים של המודול לקובץ ה-XML - הגדרות אלו ישמשו אותנו בזמן הרצת המודול (בקובץ - PHP), פרמטרים אלו יכולים לקבל ערכים מועדפים (default) שאנו מגדירים בקובץ ומשתמש הקצה יוכל לערוך את הפרמטרים ולשנותם באמצעות צד הניהול של ג'ומלה בדומה לכל מודול אחר.
נסתכל על המבנה:
<params> פתיחת אזור הגדרת הפרמטרים <param name="moduleclass_sfx" type="text" default="" label="Module Class Suffix" description="A suffix to be applied to the css class of the module (table.moduletable), this allows individual module styling." /> <param name="count" type="text" default="" label="Number of links: " description="Number of links to show in the module list" /> <param name="mod_title" type="text" default="" label="module title for the h3" description="module title" /> </params> סגירת אזור הגדרת הפרמטרים
ננתח הגדרת פרמטר אחד לדוגמא:
אנו עוברים על הפרמטר שנקרא title או בעברית - כותרת, פרמטר זה יאפשר לדוגמא להכניס כותרת או טקסט קצר במודול עצמו. המשתמש בזמן עריכת המודול בצד הניהול של המערכת יכול להזין כל טקסט אשר יעמוד בהגדרות המאפיינים של אותו פרמטר. את העיצוב ואופן ההצגה נקבצ בקובץ PHP.
<param name="count" type="text" default="" label="Number of links: " description="Number of links to show in the module list" />
המאפיינים של הפרמטר: הפרמטרים המוצגים בצד הניהול של המערכת מוגבלים על ידי חוקי ה- HTML להכנסת מידע באמצעות תג מסויים. לדוגמא: תג input מסוג text מוגבל בגודל טקסט אפשרי של עד 255 תוים. לכן יש חשיבות גדולה להגדרות המאפיינים כאשר עוסקים בפרמטרים.
עד פה עברנו על קובץ ה- XML, כעת נעבור לקובץ אשר בעצם מבצע את העבודה. קובץ ה- PHP
הסבר קצר, הקוד PHP שלפנכם ישלוף מבסיס הנתונים מידע ויציג אותו תחת מבנה HTML של רשימה UL. על מנת להבין את ההסברים יש לדעת PHP ו- MYSQL. <?php /** * Latest Links Module for Linx component * @package * @ All rights reserved - El-Tech http://tech.elharar.biz * @ Released under GNU/GPL License : http://www.gnu.org/copyleft/gpl.html **/ // ensure this file is being included by a parent file defined( '_VALID_MOS' ) or die( 'Direct Access to this location is not allowed.' ); global $database; // retrive the parameters $count = intval( $params->get( 'count', 5 ) ); $moduleclass_sfx = $params->get( 'moduleclass_sfx','' ) ; $mod_title = $params->get( 'mod_title', '' ) ; $query = "SELECT a.*,b.*" . "\n FROM #__linx AS a" . "\n INNER JOIN #__linx_cats AS b ON a.cat_id=b.id" . "\n WHERE a.link_status = 1 " . "\n ORDER BY a.date_added DESC" ; $database->setQuery( $query, 0, $count ); $rows = $database->loadObjectList(); if(count($rows)>0){ if($mod_title != ''){ echo '<h3>'.$mod_title.'</h3>'; } echo '<ul class="latestnews'.$moduleclass_sfx.'">'; foreach($rows as $row){ $link = sefRelToAbs( 'index.php?option=com_linx&task=list_links&cat_id=' . $row->cat_id ); echo '<li class="latestnews'.$moduleclass_sfx.'"> <a xhref="'.$row->url.'" target="_blank">'.$row->link_name.'</a> -'.substr(strip_tags($row->link_description),0,125).'<br />'; echo 'Category: <a xhref="'.$link.'">'.$row->cat_name.'</a></li>'; } echo '</ul>'; else{ echo 'no Links'; } ?>
נעבור על הקובץ שורה שורה:
defined( '_VALID_MOS' ) or die( 'Direct Access to this location is not allowed.' );
השורה הנ"ל הינה סטנדרטית עבור כל הקבצים כמעט במערכת ג'ומלה והיא באה למנוע כניסה ישירה לקובץ או הרצה של הקוד שבו. ההסבר הוא שאת המודול יהיה ניתן להריץ רק מתוך מערכת ג'ומלה. זה "ימנע" התקפות האקרים דווקא מכיוון המודול או ניצול פרצות מיותרות.
global $database; השורה הזו מאפשרת לנו להשתמש בבסיס הנתונים של מערכת ג'ומלה על ידי שימוש ב- global. $count = intval( $params->get( 'count', 5 ) ); $moduleclass_sfx = $params->get( 'moduleclass_sfx', '' ) ; $mod_title = $params->get( 'mod_title', '' ) ;
שלושת השורות הללו משמשות לקבלת הפרמטרים של המודול - ניתן לזהות את שלושתם מההגדרה בקובץ ה-XML. נקודה חשובה שיש לשים לב אליה - הקריאה מתבצעת על ידי שימוש בשם הפרמטר כפי שהוא מופיע בקובץ ה-XML, הערך המוחזר הינו טקסט / STRING ויש להמיר אותו במידת הצורך. לדוגמא המשתנה count הינו מספר אז ההמרה תהיה ל- INT.
שליפת הנתונים - ממסד הנתונים. כאן יבוא לשימוש הידע שלנו ב- MYSQL: שליפת הנתונים מתבצעת ב-3 שלבים פשוטים, 1- כתיבת השאילתה, 2- חיבור השאילתה למסד הנתונים 3 - שליפת המידע לתוך מערך.
$query = "SELECT a.*,b.*" . "\n FROM #__linx AS a" . "\n INNER JOIN #__linx_cats AS b ON a.cat_id=b.id" . "\n WHERE a.link_status = 1 " . "\n ORDER BY a.date_added DESC" ;
החלק הראשון כאמור הוא השאילתה, השאילתה היא בעצם הסבר בקשת המידע מבסיס הנתונים, כאן נגדיר מאילו טבלאות אנו מוציאים מידע, איזה מידע ובאילו תנאים. במקרה הנ"ל אנו מחלצים מישד משני טבלאות, A- טבלת הלינקים ו-B טבלת הקטגוריות לינקים שניהם כאמור של הרכיב (LINX (com_linx
$database->setQuery( $query, 0, $count );
השורה הזו היא השלב השני שהוא חיבור מסד הנתונים לשאילתה, החיבור כפי שניתן לראות נעשה עם שלושה מאפיינים השאילתה ושני מספרים שמגדירים את כמות השורות המבוקשת. הסבר, שני המאפיינים " 0 " ו-$count יקבעו כמה שורות ישלפו מבסיס הנתונים הקביעה נעשית בצורת טווח לדוגמא : אפס עד עשר. במקרה שלנו ישנו פרמטר אשר קובע כמה שורות דרושות :)
הסבר נוסף על הפונקציה setQuery ובכלל על מסד הנתונים בג'ומלה
$rows = $database->loadObjectList();
כעת מה שנשאר זה לאכסן את השורות במערך שלו נקרא $rows
עוד שלב אחד וסיימנו,
הצגת הנתונים, כפי שמוזכר בהתחלה אנו נציג את הרשימה של הלינקים בתוך תג UL עם קישור לאתר, תאור קצר וקישור לדף הקטגוריה.
הקוד הוא מאוד ברור ופשוט ואם אתם מתקשים תנסו פשוט לקרוא את זה כמו אנגלית רגילה :)
if(count($rows)>0){ בדיקה האם יש בכלל שורות להציג if($mod_title != ''){ האם ישנה כותרת להציג echo '<h3>'.$mod_title.'</h3>'; הצגת הכותרת בתג H3 } echo '<ul class="latestnews'.$moduleclass_sfx.'">'; פתיחת תג הרשימה foreach($rows as $row){ התחלת המעבר על השורות שהוצאנו מבסיס הנתונים יצירת הלינק לקטגוריה $link = sefRelToAbs( 'index.php?option=com_linx&task=list_links&cat_id=' . $row->cat_id ); echo '<li class="latestnews'.$moduleclass_sfx.'">'; פתיחת אייטם יחיד של הרשימה בסגנון החדשות האחרונות של ג'ומלה echo '<a xhref="'.$row->url.'" target="_blank">'.$row->link_name.'</a> - ' .substr(strip_tags($row->link_description),0,125) .'<br />'; כתיבת הלינק לאתר והתאור הקצר של הלינק echo 'Category: <a xhref="' .$link.'">'.$row->cat_name.'</a>'; כתיבת הלינק לדף הקטגוריה echo '</li>'; סגירת אייטם רשימה יחיד } סיום מעבר על השורות echo '</ul>'; } else{ אם אין שורות echo 'no links to display'; הדפס הודעה קצרה } |
|
| Last Updated ( Friday, 24 August 2007 ) |
| < Prev | Next > |
|---|








שלום לכולם,