| 
									
										
										
										
											2006-07-09 14:14:57 +00:00
										 |  |  | <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> | 
					
						
							|  |  |  | <html> | 
					
						
							|  |  |  | <head> | 
					
						
							|  |  |  |   <title>Module HowTo - Basic concepts</title> | 
					
						
							|  |  |  |   <link rel="stylesheet" type="text/css" href="style/layout.css"> | 
					
						
							| 
									
										
										
										
											2008-01-06 18:15:35 +00:00
										 |  |  | 	<link rel="shortcut icon" type="image/x-icon" href="images/favicon.ico"> | 
					
						
							| 
									
										
										
										
											2006-07-09 14:14:57 +00:00
										 |  |  | </head> | 
					
						
							|  |  |  | <body> | 
					
						
							|  |  |  | <div style="text-align: center;"> | 
					
						
							|  |  |  | <h1>Module HowTo - Basic concepts<br> | 
					
						
							|  |  |  | </h1> | 
					
						
							|  |  |  | <br> | 
					
						
							|  |  |  | <br> | 
					
						
							|  |  |  | <div style="text-align: left;"><br> | 
					
						
							|  |  |  | <h2>1. Licensing</h2> | 
					
						
							|  |  |  | LAM is licensed under the <a href="http://www.gnu.org/licenses/gpl.txt">GNU | 
					
						
							|  |  |  | General Public License</a>. This means your plugins need a compatible | 
					
						
							|  |  |  | license.<br> | 
					
						
							|  |  |  | LAM is distributed with a copy of the GPL license.<br> | 
					
						
							|  |  |  | <br> | 
					
						
							|  |  |  | <h2>2. Naming and position in directory structure</h2> | 
					
						
							|  |  |  | <br> | 
					
						
							|  |  |  | Module names are usually named after the object class they manage. | 
					
						
							|  |  |  | However, you can use any name you want, it should be short and | 
					
						
							|  |  |  | containing only a-z and 0-9. The module name is only shown in the | 
					
						
							|  |  |  | configuration dialog, on all other pages LAM will show a provided <span | 
					
						
							|  |  |  |  style="font-style: italic;">alias</span> name.<br> | 
					
						
							|  |  |  | All account modules are stored in <span style="font-weight: bold;">lib/modules</span>. | 
					
						
							|  |  |  | The filename must end with <span style="font-weight: bold;">.inc</span> | 
					
						
							|  |  |  | and the file must have the same name as its inside class.<br> | 
					
						
							|  |  |  | <br> | 
					
						
							|  |  |  | <span style="font-weight: bold; text-decoration: underline;">Example:</span> | 
					
						
							|  |  |  | Our example module will provide the <span style="font-weight: bold;">class | 
					
						
							|  |  |  | ieee802Devic</span><span style="font-style: italic; font-weight: bold;">e</span>, | 
					
						
							|  |  |  | therefore the file will be called <span style="font-weight: bold;">lib/modules/ieee802Devic</span><span | 
					
						
							|  |  |  |  style="font-style: italic; font-weight: bold;">e.inc</span>.<span | 
					
						
							|  |  |  |  style="font-style: italic;"></span><br> | 
					
						
							|  |  |  | <br> | 
					
						
							|  |  |  | <br> | 
					
						
							|  |  |  | <h2>3. Defining the class</h2> | 
					
						
							|  |  |  | All module classes have <span style="font-weight: bold;">baeModule</span> | 
					
						
							|  |  |  | as parent class. This provides common functionality and dummy functions | 
					
						
							|  |  |  | for all required class functions.<br> | 
					
						
							|  |  |  | <br> | 
					
						
							|  |  |  | <span style="font-weight: bold;">Example:</span><br> | 
					
						
							|  |  |  | <br> | 
					
						
							|  |  |  | <table style="width: 100%; text-align: left;" class="mod-code" | 
					
						
							|  |  |  |  border="0" cellpadding="2" cellspacing="2"> | 
					
						
							|  |  |  |   <tbody> | 
					
						
							|  |  |  |     <tr> | 
					
						
							|  |  |  |       <td style="vertical-align: top;">/**<br> | 
					
						
							|  |  |  | * Provides MAC addresses for hosts.<br> | 
					
						
							|  |  |  | *<br> | 
					
						
							|  |  |  | * @package modules<br> | 
					
						
							|  |  |  | */<span style="font-weight: bold;"><br> | 
					
						
							|  |  |  | class</span> <span style="color: rgb(255, 0, 0);">ieee802Device</span> | 
					
						
							|  |  |  |       <span style="font-style: italic;">extends </span><span | 
					
						
							|  |  |  |  style="font-weight: bold;">baseModule</span> {<br> | 
					
						
							|  |  |  |       <br> | 
					
						
							|  |  |  | }<br> | 
					
						
							|  |  |  |       </td> | 
					
						
							|  |  |  |     </tr> | 
					
						
							|  |  |  |   </tbody> | 
					
						
							|  |  |  | </table> | 
					
						
							|  |  |  | <br> | 
					
						
							|  |  |  | <h2>4. Meta data</h2> | 
					
						
							|  |  |  | The module interface inludes a lot of required and optional functions. | 
					
						
							|  |  |  | Many of these functions do not need to be implemented directly in the | 
					
						
							|  |  |  | module, you can define <span style="font-weight: bold;">meta data</span> | 
					
						
							|  |  |  | for them and the <span style="font-weight: bold;">baseModule</span> | 
					
						
							|  |  |  | will do the rest.<br> | 
					
						
							|  |  |  | Providing <span style="font-weight: bold;">meta data</span> is | 
					
						
							|  |  |  | optional, you can implement the required functions in your class, too.<br> | 
					
						
							|  |  |  | <br> | 
					
						
							|  |  |  | The <span style="font-weight: bold;">baseModule</span> reads the <span | 
					
						
							|  |  |  |  style="font-weight: bold;">meta data</span> by calling <span | 
					
						
							|  |  |  |  style="font-weight: bold;">get_metaData()</span> in your class.<br> | 
					
						
							|  |  |  | <br> | 
					
						
							|  |  |  | <span style="font-weight: bold; text-decoration: underline;">Example:</span><br> | 
					
						
							|  |  |  | <br> | 
					
						
							|  |  |  | <table style="width: 100%; text-align: left;" class="mod-code" | 
					
						
							|  |  |  |  border="0" cellpadding="2" cellspacing="2"> | 
					
						
							|  |  |  |   <tbody> | 
					
						
							|  |  |  |     <tr> | 
					
						
							|  |  |  |       <td style="vertical-align: top;">    /**<br> | 
					
						
							|  |  |  |     * Returns meta data that is interpreted by parent | 
					
						
							|  |  |  | class<br> | 
					
						
							|  |  |  |     *<br> | 
					
						
							|  |  |  |     * @return array array with meta data<br> | 
					
						
							|  |  |  |     */<br> | 
					
						
							|  |  |  |     <span style="font-weight: bold;">function</span> <span | 
					
						
							|  |  |  |  style="color: rgb(255, 0, 0);">get_metaData</span>() {<br> | 
					
						
							|  |  |  |         $return = array();<br> | 
					
						
							|  |  |  |         // manages host accounts<br> | 
					
						
							|  |  |  |         $return["account_types"] = | 
					
						
							|  |  |  | array("host");<br> | 
					
						
							|  |  |  |     }<br> | 
					
						
							|  |  |  |       </td> | 
					
						
							|  |  |  |     </tr> | 
					
						
							|  |  |  |   </tbody> | 
					
						
							|  |  |  | </table> | 
					
						
							|  |  |  | <br> | 
					
						
							|  |  |  | You will see this functions several times in the next parts of this | 
					
						
							|  |  |  | HowTo.<br> | 
					
						
							|  |  |  | <br> | 
					
						
							|  |  |  | <h2><span style="font-weight: bold;"></span></h2> | 
					
						
							|  |  |  | </div> | 
					
						
							|  |  |  | </div> | 
					
						
							|  |  |  | </body> | 
					
						
							|  |  |  | </html> |