No account yet?
 
Web El-Tech Website

Login Form

Advertisement

Who's Online

Syndicate

Home
Advertisement
Joomla module development tutorial (Hebrew) - מדריך ליצירת מודולו בג'ומלה

By Itamar Elharar - איתמר אלהרר, on Wednesday, 15 August 2007

Views : 2540    

Published in : my publications, tutorials and demos


מדריך ליצירת מודולו למערכת ג'ומלה בעברית שלום לכולם,

המדריך הנ"ל נוצר בעקבות דיון בפורום ג'ומלה ישראל על דרך האתר, התנדבות ועזרה לקהילה - בקיצור אני החלטתי להתקדם בעצמי ולהציג את התוצאה המוגמרת (מתי - תודה על העצה).

הסבר קצר - המדריך יסביר שורה אחרי שורה את המבנה של מודול ההדגמה (mod_latestLinx) שתפקידו להציג את הלינקים האחרונים שהוכנסו לרכיב ההחלפת הלינקים LINX - com_linx והצגתם תחת רשימה באותו הסגנון של המודול חדשות אחרונות בג'ומלה.

ונעבור למדריך,
ידע ב-  PHP MYSQL HTML וקצת XML נדרש על מנת להבין את המדריך.

דוגמא למודול בזמן אמת - www.perfectvoices.com 

 

המודול mod_latestLinx כמו כל המודולים מורכב משני קבצים (או יותר) עיקריים אשר ביחד יבצעו את התפקיד שלמענו נוצרו:

  1. mod_latestLinx.xml
  2. mod_latestLinx.php
הראשון הוא קובץ 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> 
 

סגירת אזור קבצים  

  • בזמן שימוש בספריות למודול יש לציין את הספריה בשמה המדוייק בהגדרת הקובץ
  • module="mod_latestLinx" כאן אנו משייכים את הקובץ עצמו להתקנת המודול. זאת על מנת שהמערכת תכיר את הקבצים הקשורים להתקנה. כך נמנע דריסה, פגיעה או מחיקה של מידע קיים או לפחות נקבל אזהרה.

לסיום אנו מכניסים את הגדרות הפרמטרים של המודול לקובץ ה-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 תוים. לכן יש חשיבות גדולה להגדרות המאפיינים כאשר עוסקים בפרמטרים.

  • name="count" - זהו מאפיין של הפרמטר והוא קובע את שם המשתנה/פרמטר בקובץ ה-PHP לדוגמא פרמטר זה בקובץ ה-PHP יקרא - $count
  • type="text" - זהו המאפיין אשר יקבע באיזה תג HTML תשתמש המערכת על מנת להציגו בצד הניהול (ראה למעלה הגבלות HTML).
  • default="" - זהו המאפיין שבו ניתן להזין ערך מועדף default לפרמטר - לדוגמא המספר 5. במקרה פה הערך הוא ריק.
  • label="Number of links: " - זהו המאפיין אשר קובע מהו הטקסט אשר יוצג לצד תג ה-HTML בצד הניהול - תיאור קצר של תפקיד הפרמטר. טקסט זה יוצג באותה השורה של התג.
  • description="Number of links to show in the module list" - מאפיין זה מכיל תאור מפורט יותר של הפרמטר ויכיל הסבר קצר על סוג המידש שניתן להכניס לפרמטר וכ'ו.. מידע זה יוצג כאשר העכבר יעמוד על המאפיין הקודם כלומרעל התוית label
עד פה עברנו על קובץ ה- 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&amp;amp;task=list_links&amp;amp;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&amp;amp;task=list_links&amp;amp;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 update : Friday, 24 August 2007

   
Quote this article in website
Favoured
Print
Send to friend
Related articles
Save this to del.icio.us

Keywords : xml, joomla, module, tutorial, mysql, hebrew, php, development, ג'ומלהת גומלה


Users' Comments  RSS feed comment
 

Average user rating

   (0 vote)

 

Display 1 of 1 comments

תגובות יתקבלו בברכה

By: admin (Registered) on 20-08-2007 19:11

תגובות יתקבלו בברכה

By: admin (Registered ) on 20-08-2007 19:11

תתילו להגיב כדי שנדע מה לשפר

 

» Report this comment to administrator

» Reply to this comment...

Display 1 of 1 comments



Add your comment
Only registered users can comment an article. Please login or register.


mXcomment 1.0.2 © 2007-2008 - visualclinic.fr
License Creative Commons - Some rights reserved
 
< Prev   Next >

El-Tech Elharar Techonology, Israel