﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-tonyzhou00-文章分类-mambo</title><link>http://www.blogjava.net/tonyzhou00/category/8157.html</link><description /><language>zh-cn</language><lastBuildDate>Thu, 19 Jul 2007 11:26:38 GMT</lastBuildDate><pubDate>Thu, 19 Jul 2007 11:26:38 GMT</pubDate><ttl>60</ttl><item><title>轻松开发自己的组件 </title><link>http://www.blogjava.net/tonyzhou00/articles/34007.html</link><dc:creator>蛮哥♂枫</dc:creator><author>蛮哥♂枫</author><pubDate>Tue, 07 Mar 2006 02:55:00 GMT</pubDate><guid>http://www.blogjava.net/tonyzhou00/articles/34007.html</guid><wfw:comment>http://www.blogjava.net/tonyzhou00/comments/34007.html</wfw:comment><comments>http://www.blogjava.net/tonyzhou00/articles/34007.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/tonyzhou00/comments/commentRss/34007.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/tonyzhou00/services/trackbacks/34007.html</trackback:ping><description><![CDATA[
		<p>按: 本教程非原创,版权归Keliix06所有. </p>
		<p>快速创建一个简单的MAMBO组件 <br />作者：Keliix06 <br />译者：Applebee <br />本教程将安装一个“Hello World”组件，你可以去编辑或者加入你自己想要的消息。本教程不涉及如何设置分类，搜索功能和页面导航。并假定你对PHP有一个基本的了解。 <br />创建本组件将用到以下文件： <br />hello_world.xml- 组件安装配置文件 <br />hello_world.php- 显示界面信息 <br />admin.hello_world.php- 数据库查询和设置HTML输出 <br />admin.hello_world.html.php- 控制所有的输出 <br />class.hello_world.php- 数据库类文件 <br />install.hello_world.php- 安装文件 <br />uninstall.hello_world.php- 卸载文件 <br />toolbar.hello_world.php- 设置工具栏 <br />toolbar.hello_world.html.php- 控制工具栏的输出 </p>
		<p>现在我们已经清楚了要制作什么样的文件，下面我们一个文件一个文件的介绍它们如何实现各自的功能。 </p>
		<span word-break:break-all="">
				<p>
						<br />Hello_world.xml- 组件安装配置文件 </p>
				<p>&lt;?xml version="1.0" ?&gt; <br />&lt;mosinstall type="component"&gt; <br />&lt;name&gt;hello_world&lt;/name&gt; <br />&lt;creationDate&gt;04/15/2004&lt;/creationDate&gt; <br />&lt;author&gt;Doyle Lewis&lt;/author&gt; <br />&lt;copyright&gt;This component in released under the GNU/GPL License&lt;/copyright&gt; <br />&lt;authorEmail&gt;
<script language="JavaScript" type="text/javascript"><!-- 
var prefix = '&#109;a' + 'i&#108;' + '&#116;o'; 
var path = 'hr' + 'ef' + '='; 
var addy68572 = 's&#117;pp&#111;rt' + '&#64;' + 'm&#97;mb&#111;-h&#111;st&#105;ng' + '&#46;' + 'c&#111;m'; 
document.write( '<a ' + path + '\'' + prefix + ':' + addy68572 + '\'>' ); 
document.write( addy68572 ); 
document.write( '<\/a>' ); 
//--></script><a href="mailto:support@mambo-hosting.com"><font color="#b60000">support@mambo-hosting.com</font></a></p>
				<noscript>
				</noscript>&lt;/authorEmail&gt; <br />&lt;authorUrl&gt;www.mambo-hosting.com&lt;/authorUrl&gt; <br />&lt;version&gt;1.0&lt;/version&gt; <br />&lt;files&gt; <br />&lt;filename&gt;hello_world.php&lt;/filename&gt; <br />&lt;/files&gt; <br />&lt;install&gt; <br />&lt;queries&gt; <br />&lt;query&gt;DROP TABLE IF EXISTS `mos_hello_world`;&lt;/query&gt; <br />&lt;query&gt;CREATE TABLE `mos_hello_world` ( <br />`id` INT NOT NULL AUTO_INCREMENT, <br />`text` TEXT NOT NULL, <br />`published` TINYINT(1) NOT NULL, <br />PRIMARY KEY (`id`) <br />) <br />&lt;/query&gt; <br />&lt;/queries&gt; <br />&lt;/install&gt; <br />&lt;uninstall&gt; <br />&lt;queries&gt; <br />&lt;query&gt;DROP TABLE IF EXISTS `mos_hello_world`;&lt;/query&gt; <br />&lt;/queries&gt; <br />&lt;/uninstall&gt; <br />&lt;installfile&gt; <br />&lt;filename&gt;install.hello_world.php&lt;/filename&gt; <br />&lt;/installfile&gt; <br />&lt;uninstallfile&gt; <br />&lt;filename&gt;uninstall.hello_world.php&lt;/filename&gt; <br />&lt;/uninstallfile&gt; <br />&lt;administration&gt; <br />&lt;menu&gt;Hello World&lt;/menu&gt; <br />&lt;submenu&gt; <br />&lt;menu act="all"&gt;Show Text&lt;/menu&gt; <br />&lt;/submenu&gt; <br />&lt;files&gt; <br />&lt;filename&gt;admin.hello_world.php&lt;/filename&gt; <br />&lt;filename&gt;admin.hello_world.html.php&lt;/filename&gt; <br />&lt;filename&gt;class.hello_world.php&lt;/filename&gt; <br />&lt;filename&gt;toolbar.hello_world.php&lt;/filename&gt; <br />&lt;filename&gt;toolbar.hello_world.html.php&lt;/filename&gt; <br />&lt;/files&gt; <br />&lt;/administration&gt; <br />&lt;/mosinstall&gt; <p>我们来看它是如何工作的： </p><p>&lt;?xml version="1.0" ?&gt; <br />XML的开头语，为所有XML文件所必需。 </p><p>&lt;mosinstall type="component"&gt; <br />告诉MAMBO将开始安装一个组件 </p><p>&lt;name&gt;hello_world&lt;/name&gt; <br />&lt;creationDate&gt;04/15/2004&lt;/creationDate&gt; <br />&lt;author&gt;Doyle Lewis&lt;/author&gt; <br />&lt;copyright&gt;This component in released under the GNU/GPL License&lt;/copyright&gt; <br />&lt;authorEmail&gt;
<script language="JavaScript" type="text/javascript"><!-- 
var prefix = '&#109;a' + 'i&#108;' + '&#116;o'; 
var path = 'hr' + 'ef' + '='; 
var addy68572 = 's&#117;pp&#111;rt' + '&#64;' + 'm&#97;mb&#111;-h&#111;st&#105;ng' + '&#46;' + 'c&#111;m'; 
document.write( '<a ' + path + '\'' + prefix + ':' + addy68572 + '\'>' ); 
document.write( addy68572 ); 
document.write( '<\/a>' ); 
//--></script><a href="mailto:support@mambo-hosting.com"><font color="#b60000">support@mambo-hosting.com</font></a></p><noscript></noscript>&lt;/authorEmail&gt; <br />&lt;authorUrl&gt;www.mambo-hosting.com&lt;/authorUrl&gt; <br />&lt;version&gt;1.0&lt;/version&gt; <br />组件的详细信息，所有有关组件的信息只能在这加入。 <p>&lt;files&gt; <br />&lt;filename&gt;hello_world.php&lt;/filename&gt; <br />&lt;/files&gt; <br />所有需要安装在组件界面需要的文件，将被安装到components/com_hello_world/目录下。 </p><p>&lt;install&gt; <br />&lt;queries&gt; <br />&lt;query&gt;DROP TABLE IF EXISTS `mos_hello_world`;&lt;/query&gt; <br />&lt;query&gt;CREATE TABLE `mos_hello_world` ( <br />`id` INT NOT NULL AUTO_INCREMENT, <br />`text` TEXT NOT NULL, <br />`published` TINYINT(1) NOT NULL, <br />PRIMARY KEY (`id`) <br />) <br />&lt;/query&gt; <br />&lt;/queries&gt; <br />&lt;/install&gt; <br />安装组件所需的数据库查询语句，本组件中将创建一个有三个字段的表。你可以运行phpMyadmin来得到一所需的查询语句的，这是一个很简单易行的办法。 </p><p>&lt;uninstall&gt; <br />&lt;queries&gt; <br />&lt;query&gt;DROP TABLE IF EXISTS `mos_hello_world`;&lt;/query&gt; <br />&lt;/queries&gt; <br />&lt;/uninstall&gt; <br />卸载组件所需的查询语句，这里只是简单的删除了数据库表格。 </p><p>&lt;installfile&gt; <br />&lt;filename&gt;install.hello_world.php&lt;/filename&gt; <br />&lt;/installfile&gt; <br />&lt;uninstallfile&gt; <br />&lt;filename&gt;uninstall.hello_world.php&lt;/filename&gt; <br />&lt;/uninstallfile&gt; <br />这几行代码是用来说明安装和卸载组件所用到的文件名。 </p><p>&lt;administration&gt; <br />从这行起所有的东东将安装到管理员目录下。 </p><p>&lt;menu&gt;Hello World&lt;/menu&gt; <br />这行将被显示到管理面板中的“组件”的下拉菜单中。 </p><p>&lt;submenu&gt; <br />&lt;menu act="all"&gt;Show Text&lt;/menu&gt; <br />&lt;/submenu&gt; <br />这几行代码将产生一个二级菜单（相对于刚才产生的Hello World菜单选项），这也将告诉MAMBO你的组件将有些什么功能。 <br />&lt;files&gt; <br />&lt;filename&gt;admin.hello_world.php&lt;/filename&gt; <br />&lt;filename&gt;admin.hello_world.html.php&lt;/filename&gt; <br />&lt;filename&gt;class.hello_world.php&lt;/filename&gt; <br />&lt;filename&gt;toolbar.hello_world.php&lt;/filename&gt; <br />&lt;filename&gt;toolbar.hello_world.html.php&lt;/filename&gt; <br />&lt;/files&gt; <br />所有将被安装到administrator/components/com_hello_world/目录下的文件。 </p><p>&lt;/administration&gt; <br />&lt;/mosinstall&gt; <br />结束MAMBO组件安装 </p><p>hello_world.php-界面显示文件 </p><p>&lt;?php <br />//hello_world Component// <br />/** <br />* Content code <br />* @package hello_world <br />* @Copyright (C) 2004 Doyle Lewis <br />* @ All rights reserved <br />* @ hello_world is Free Software <br />* @ Released under GNU/GPL License : <a href="http://www.gnu.org/copyleft/gpl.html"><font color="#b60000">http://www.gnu.org/copyleft/gpl.html</font></a><br />* @version 1.0 <br />**/ <br />defined( '_VALID_MOS' ) or die( 'Direct Access to this location is not allowed.' ); <br />global $database; <br />$query = "SELECT * FROM mos_hello_world LIMIT 1"; <br />$database-&gt;setQuery( $query ); <br />$rows = $database-&gt;loadObjectList(); <br />$row = $rows[0]; <br />echo $row-&gt;text; <br />?&gt; </p><p>让我们来看一下这个文件。 </p><p>defined( '_VALID_MOS' ) or die( 'Direct Access to this location is not allowed.' ); <br />这个将验证是否由MAMBO来调用此文件，防止非法直接运行本文件，对于安全性非常重要。 </p><p>global $database; <br />将$database设置为全局变量，你可以在你的函数中使用$database。 <br />$query = "SELECT * FROM mos_hello_world LIMIT 1"; <br />输出mos_hello_world表中的第一个记录。 </p><p>$database-&gt;setQuery( $query ); <br />用database类中的数据库查询函数调用上述的查询。 </p><p>$rows = $database-&gt;loadObjectList(); <br />用变量$rows 以数列方式存储查询结果。 </p><p>$row = $rows[0]; <br />用变量 $row 存储$row中的第一个元素。 </p><p>echo $row-&gt;text; <br />打印输出text. </p><p>admin.hello_world.php -数据库查询和设置HTML输出 <br />&lt;?php <br />//hello_world Component// <br />/** <br />* Content code <br />* @package hello_world <br />* @Copyright (C) 2004 Doyle Lewis <br />* @ All rights reserved <br />* @ hello_world is Free Software <br />* @ Released under GNU/GPL License : <a href="http://www.gnu.org/copyleft/gpl.html"><font color="#b60000">http://www.gnu.org/copyleft/gpl.html</font></a><br />* @version 1.0 <br />**/ <br />defined( '_VALID_MOS' ) or die( 'Direct Access to this location is not allowed.' ); <br />require_once($mosConfig_absolute_path."/administrator/components/com_hello_world/class.hello_world.php"); <br />require_once( $mainframe-&gt;getPath( 'admin_html' ) ); <br />switch ($act) { <br />default: <br />$task = "showText"; <br />break; <br />} <br />switch ($task) { <br />case "save": <br />save( $option ); <br />break; <br />case "delete": <br />delete( $option, $id ); <br />break; <br />case "new": <br />$id = ''; <br />edit( $option, $id ); <br />break; <br />case "edit": <br />save( $option, $id[0] ); <br />break; <br />case "showText": <br />showText( $option ); <br />break; <br />} <br />function save( $option ) { <br />global $database; <br />$row = new mosHello_world( $database ); <br />if (!$row-&gt;bind( $_POST )) { <br />echo "&lt;script&gt; alert('".$row-&gt;getError()."'); window.history.go(-1); &lt;/script&gt;n"; <br />exit(); <br />} <br />if (!$row-&gt;store()) { <br />echo "&lt;script&gt; alert('".$row-&gt;getError()."'); window.history.go(-1); &lt;/script&gt;n"; <br />exit(); <br />} <br />mosRedirect( "index2.php?option=$option", "Saved" ); <br />} <br />function edit( $option, $uid ) { <br />global $database; <br />$row = new mosHello_world( $database ); <br />$row-&gt;load( $uid ); <br />HTML_hello_world::edit( $option, $row ); <br />} <br />function delete( $option, $cid ) { <br />global $database; <br />if (!is_array( $cid ) || count( $cid ) &lt; 1) { <br />echo "&lt;script&gt; alert('Select an item to delete'); window.history.go(-1);&lt;/script&gt;n"; <br />exit; <br />} <br />if (count( $cid )) { <br />$cids = implode( ',', $cid ); <br />$database-&gt;setQuery( "DELETE FROM mos_hello_world WHERE id IN ($cids)" ); <br />if (!$database-&gt;query()) { <br />echo "&lt;script&gt; alert('".$database-&gt;getErrorMsg()."'); window.history.go(-1); &lt;/script&gt;n"; <br />} <br />} <br />mosRedirect( "index2.php?option=$option" ); <br />} <br />function showText($option) { <br />global $database; <br /># Do the main database query <br />$database-&gt;setQuery( "SELECT * FROM mos_hello_world ORDER BY id" ); <br />$rows = $database-&gt;loadObjectList(); <br />if ($database-&gt;getErrorNum()) { <br />echo $database-&gt;stderr(); <br />return false; <br />} <br />HTML_hello_world::showText( $option, $rows ); <br />} <br />让我们来看看这个文件 <br />: <br />defined( '_VALID_MOS' ) or die( 'Direct Access to this location is not allowed.' ); <br />这个将验证是否由MAMBO来调用此文件，防止非法直接运行本文件，对于安全性非常重要。 </p><p>require_once($mosConfig_absolute_path."/administrator/components/com_hello_world/class.hello_world.php"); <br />require_once( $mainframe-&gt;getPath( 'admin_html' ) ); <br />调用以下两文件 class.hello_world.php and admin.hello_world.html.php </p><p>switch ($act) { <br />default: <br />$task = "showText"; <br />break; <br />} <br />建立一个选择开关语句这样假如有一个变量$act 我们将重定义一个新变量$task. 这样$act 将用来实现显示文字的函数中，而$task将被用在保存，删除等。. </p><p>switch ($task) { <br />case "save": <br />save( $option ); <br />break; <br />case "delete": <br />delete( $option, $id ); <br />break; <br />case "new": <br />$id = ''; <br />edit( $option, $id ); <br />break; <br />case "edit": <br />save( $option, $id[0] ); <br />break; <br />case "showText": <br />showText( $option ); <br />break; <br />} <br />这个开关语句将根据$task来运行所需的函数。 </p><p>function save( $option ) { <br />我们的第一个函数，将保存我们创建或正在编辑的内容。 </p><p>global $database; <br />声明$database为全局变量。 </p><p>$row = new mosHello_world( $database ); <br />这将定义$row新变量来存储插入到数据库中的信息，$row是class class.hello_world.php文件定义的mosHello_world类的一个实例。 </p><p>if (!$row-&gt;bind( $_POST )) { <br />echo "&lt;script&gt; alert('".$row-&gt;getError()."'); window.history.go(-1); &lt;/script&gt;n"; <br />exit(); <br />} <br />假如 $row 返回空值，显示错误信息并返回上一个窗口。 </p><p>if (!$row-&gt;store()) { <br />echo "&lt;script&gt; alert('".$row-&gt;getError()."'); window.history.go(-1); &lt;/script&gt;n"; <br />exit(); <br />} <br />假如不能完成对数据库的写操作，将显示错误信息并返回上一个窗口，这仅仅会在数据库出现异常时会出现。 </p><p>mosRedirect( "index2.php?option=$option", "Saved" ); <br />假如一切正常将重定向你的浏览器到主选项窗口，并显示"Saved". </p><p>function edit( $option, $uid ) { <br />很多代码可参照前面的解释，这里不再赘述。 </p><p>$row-&gt;load( $uid ); <br />定义了$row后并声明它为mosHello_world类,装载$uid相关的数据. $uid是 <br />我们想编辑的内容的$id的值。 </p><p>HTML_hello_world::edit( $option, $row ); <br />将$row 传递到admin.hello_world.html.php 显示。 <br />. <br />function delete( $option, $cid ) { <br />同前，这里不再赘述。 </p><p>if (!is_array( $cid ) || count( $cid ) &lt; 1) { <br />echo "&lt;script&gt; alert('Select an item to delete'); window.history.go(-1);&lt;/script&gt;n"; <br />exit; <br />} <br />这将检验是否有删除对象，如为空将显示提示信息并返回上一个窗口。 </p><p>if (count( $cid )) { <br />$cids = implode( ',', $cid ); <br />$database-&gt;setQuery( "DELETE FROM mos_hello_world WHERE id IN ($cids)" ); <br />if (!$database-&gt;query()) { <br />echo "&lt;script&gt; alert('".$database-&gt;getErrorMsg()."'); window.history.go(-1); &lt;/script&gt;n"; <br />} <br />这将检验$cid (存储所有欲删除的对象的$id值的数列)是否为空，如果不为空它将创建一个以逗号为分隔符的所有id的列表并存储在字符串$cids然后根据相应的id进行删除操作，如果操作出错将返回上一个窗口。 </p><p>function showText($option) { <br />这是我们的主输出函数，将创建我们要输出的文字的列表，解释参照前面所述。 </p><p>admin.hello_world.html.php –控制所有的输出. <br />&lt;?php <br />//hello_world Component// <br />/** <br />* Content code <br />* @package hello_world <br />* @Copyright (C) 2004 Doyle Lewis <br />* @ All rights reserved <br />* @ hello_world is Free Software <br />* @ Released under GNU/GPL License : <a href="http://www.gnu.org/copyleft/gpl.html"><font color="#b60000">http://www.gnu.org/copyleft/gpl.html</font></a><br />* @version 1.0 <br />**/ <br />// ensure this file is being included by a parent file <br />defined( '_VALID_MOS' ) or die( 'Direct Access to this location is not allowed.' ); <br />require_once($mosConfig_absolute_path."/administrator/components/com_hello_world/class.hello_world.php"); <br />class HTML_hello_world { <br />function edit( $option, &amp;$row ) { <br />?&gt; <br />&lt;script language="javascript" type="text/javascript"&gt; <br />function submitbutton(pressbutton) { <br />var form = document.adminForm; <br />if (pressbutton == "cancel") { <br />submitform( pressbutton ); <br />return; <br />} <br />submitform( pressbutton ); <br />} <br />&lt;/script&gt; <br />&lt;form action="index2.php" method="post" name="adminForm" id="adminForm" class="adminForm"&gt; <br />&lt;table border="0" cellpadding="3" cellspacing="0"&gt; <br />&lt;tr&gt; <br />&lt;td&gt;Text Output: &lt;/td&gt; <br />&lt;td&gt;&lt;input type="text" size="50" maxsize="100" name="text" value="&lt;?php echo $row-&gt;text; ?&gt;" /&gt;&lt;/td&gt; <br />&lt;/tr&gt; <br />&lt;/table&gt; <br />&lt;input type="hidden" name="id" value="&lt;?php echo $row-&gt;id; ?&gt;" /&gt; <br />&lt;input type="hidden" name="option" value="&lt;?php echo $option; ?&gt;" /&gt; <br />&lt;input type="hidden" name="task" value="" /&gt; <br />&lt;/form&gt; <br />&lt;?php } ?&gt; <br />function showText( $option, &amp;$rows ) { <br />?&gt; <br />&lt;script language="javascript" type="text/javascript"&gt; <br />function submitbutton(pressbutton) { <br />var form = document.adminForm; <br />if (pressbutton == "cancel") { <br />submitform( pressbutton ); <br />return; <br />} <br />submitform( pressbutton ); <br />} <br />&lt;/script&gt; <br />&lt;form action="index2.php" method="post" name="adminForm"&gt; <br />&lt;table cellpadding="4" cellspacing="0" border="0" width="100%" class="adminlist"&gt; <br />&lt;tr&gt; <br />&lt;th width="20"&gt;&lt;input type="checkbox" name="toggle" value="" onclick="checkAll(&lt;?php echo count($rows); ?&gt;);" <br />/&gt;&lt;/th&gt; <br />&lt;th class="title" width="25%"&gt;Text Output&lt;/th&gt; <br />&lt;th width="25%"&gt;Published&lt;/th&gt; <br />&lt;/tr&gt; <br />&lt;?php <br />$k = 0; <br />for($i=0; $i &lt; count( $rows ); $i++) { <br />$row = $rows[$i]; <br />?&gt; <br />&lt;tr class="&lt;?php echo "row$k"; ?&gt;"&gt; <br />&lt;td&gt;&lt;input type="checkbox" id="cb&lt;?php echo $i;?&gt;" name="id[]" value="&lt;?php echo $row-&gt;id; ?&gt;" <br />onclick="isChecked(this.checked);" /&gt;&lt;/td&gt; <br />&lt;td&gt;&lt;a href="http://www.mambochina.net/content/view/48_38.html#edit" onclick="return listItemTask('cb&lt;?php echo $i;?&gt;','edit')"&gt;&lt;?php echo $row-&gt;text; ?&gt;&lt;/a&gt;&lt;/td&gt; <br />&lt;td align="center"&gt; <br />&lt;?php <br />if ($row-&gt;published == "1") { <br />echo "&lt;img src="images/tick.png" border="0" /&gt;"; <br />} else { <br />echo "&lt;img src="images/publish_x.png" border="0" /&gt;"; <br />} <br />?&gt; <br />&lt;/td&gt; <br />&lt;?php $k = 1 - $k; ?&gt; <br />&lt;/tr&gt; <br />&lt;?php } ?&gt; <br />&lt;input type="hidden" name="option" value="&lt;?php echo $option; ?&gt;" /&gt; <br />&lt;input type="hidden" name="task" value="" /&gt; <br />&lt;input type="hidden" name="boxchecked" value="0" /&gt; <br />&lt;/form&gt; <br />&lt;?php } <br />} ?&gt; </p><p>我们来看一下这个文件 <br />class HTML_hello_world { <br />声明一个新类：HTML_hello_world </p><p>function edit( $option, &amp;$row ) { <br />声明edit函数， 将显示用来创建新内容并编辑已有的内容的表单。 </p><p>&lt;script language="javascript" type="text/javascript"&gt; <br />function submitbutton(pressbutton) { <br />var form = document.adminForm; <br />if (pressbutton == "cancel") { <br />submitform( pressbutton ); <br />return; <br />} <br />submitform( pressbutton ); <br />} <br />&lt;/script&gt; <br />这将检验你是否按下了任何工具栏的按钮，你可以加入任何表单验证代码在这里。 </p><p>&lt;form action="index2.php" method="post" name="adminForm" id="adminForm" class="adminForm"&gt; <br />你可以将这段代码拷贝到任何组件中，它必须包括这些标签。 </p><p>&lt;input type="hidden" name="id" value="&lt;?php echo $row-&gt;id; ?&gt;" /&gt; <br />&lt;input type="hidden" name="option" value="&lt;?php echo $option; ?&gt;" /&gt; <br />&lt;input type="hidden" name="task" value="" /&gt; <br />保存或取消操作所必须的option和task字段。 </p><p>function showText( $option, &amp;$rows ) { <br />将显示所有的文字部分。. </p><p>&lt;th width="20"&gt;&lt;input type="checkbox" name="toggle" value="" onclick="checkAll(&lt;?php echo count($rows); ?&gt;);" <br />/&gt;&lt;/th&gt; <br />这将快速全选所有的选择框。 </p><p>&lt;?php <br />$k = 0; <br />for($i=0; $i &lt; count( $rows ); $i++) { <br />$row = $rows[$i]; <br />$k用来产生行的替换图效果，for 语句将保证遍列所有的结果。 </p><p>&lt;td&gt;&lt;input type="checkbox" id="cb&lt;?php echo $i;?&gt;" name="id[]" value="&lt;?php echo $row-&gt;id; ?&gt;" <br />onclick="isChecked(this.checked);" /&gt;&lt;/td&gt; <br />这将选上本行的选择框。 </p><p>&lt;td&gt;&lt;a href="http://www.mambochina.net/content/view/48_38.html#edit" onclick="return listItemTask('cb&lt;?php echo $i;?&gt;','edit)"&gt;&lt;?php echo $row-&gt;text; ?&gt;&lt;/a&gt;&lt;/td&gt; <br />将产生编辑此项的链接。 </p><p>&lt;?php <br />if ($row-&gt;published == "1") { <br />echo "&lt;img src="images/tick.png" border="0" /&gt;"; <br />} else { <br />echo "&lt;img src="images/publish_x.png" border="0" /&gt;"; <br />} <br />?&gt; <br />假如此行被设置为发行，你将看到一个绿的叉，否则将看到一个小红叉。 </p><p>&lt;?php $k = 1 - $k; ?&gt; <br />将 $k设为 1和它自身的差值，假如$k是 0，它就等于1，假如它等于1它就被设为0. </p><p>&lt;input type="hidden" name="boxchecked" value="0" /&gt; <br />这行代码很重要不然所有的选择框将不能正常工作。 </p><p><br />class.hello_world.php -数据库类文件. <br />&lt;?php <br />//hello_world Component// <br />/** <br />* Content code <br />* @package hello_world <br />* @Copyright (C) 2004 Doyle Lewis <br />* @ All rights reserved <br />* @ hello_world is Free Software <br />* @ Released under GNU/GPL License : <a href="http://www.gnu.org/copyleft/gpl.html"><font color="#b60000">http://www.gnu.org/copyleft/gpl.html</font></a><br />* @version 1.0 <br />**/ <br />defined( '_VALID_MOS' ) or die( 'Direct Access to this location is not allowed.' ); <br />class mosHello_world extends mosDBTable { <br />// INT(11) AUTO_INCREMENT <br />var $id=null; <br />// TEXT <br />var $text=null; <br />// TINYINT(1) <br />var $published=null; <br />function mosHello_world( &amp;$db ) { <br />$this-&gt;mosDBTable( 'mos_hello_world', 'id', $db ); <br />} <br />} </p><p>我们来看一下这个文件 </p><p>class mosHello_world extends mosDBTable { <br />声明类mosHello_world为mosDBTable的派生类，你可以将mosHello_world改成你自己的类名称。 </p><p>// INT(11) AUTO_INCREMENT <br />var $id=null; <br />注释行只是给出了变量的一些信息，变量名必须和你数据库的相应字段相符合并将它们设为空值。 </p><p>function mosHello_world( &amp;$db ) { <br />$this-&gt;mosDBTable( 'mos_hello_world', 'id', $db ); <br />} <br />调用父类的构造函数，你可以调用$row=new mosHello_world($database)来得到想要的结果。 <br />install.hello_world.php – 安装文件. <br />&lt;?php <br />function com_install() { <br />echo "Thank you for using this component. Please contact me at
<script language="JavaScript" type="text/javascript"><!-- 
var prefix = '&#109;a' + 'i&#108;' + '&#116;o'; 
var path = 'hr' + 'ef' + '='; 
var addy36182 = 's&#117;pp&#111;rt' + '&#64;' + 'm&#97;mb&#111;-h&#111;st&#105;ng' + '&#46;' + 'c&#111;m'; 
var addy_text36182 = 's&#117;pp&#111;rt' + '&#64;' + 'm&#97;mb&#111;-h&#111;st&#105;ng' + '&#46;' + 'c&#111;m'; 
document.write( '<a ' + path + '\'' + prefix + ':' + addy36182 + '\'>' ); 
document.write( addy_text36182 ); 
document.write( '<\/a>' ); 
//--></script><a href="mailto:support@mambo-hosting.com"><font color="#b60000">support@mambo-hosting.com</font></a></p><noscript></noscript>with any questions"; <br />} <br />?&gt; <br />在文件中调用函数com_install()，不然会导致异常。 <p>uninstall.hello_world.php – 卸载文件. <br />&lt;? <br />function com_uninstall() { <br />echo "Thank you for using this component. Please contact me at
<script language="JavaScript" type="text/javascript"><!-- 
var prefix = '&#109;a' + 'i&#108;' + '&#116;o'; 
var path = 'hr' + 'ef' + '='; 
var addy36182 = 's&#117;pp&#111;rt' + '&#64;' + 'm&#97;mb&#111;-h&#111;st&#105;ng' + '&#46;' + 'c&#111;m'; 
var addy_text36182 = 's&#117;pp&#111;rt' + '&#64;' + 'm&#97;mb&#111;-h&#111;st&#105;ng' + '&#46;' + 'c&#111;m'; 
document.write( '<a ' + path + '\'' + prefix + ':' + addy36182 + '\'>' ); 
document.write( addy_text36182 ); 
document.write( '<\/a>' ); 
//--></script><a href="mailto:support@mambo-hosting.com"><font color="#b60000">support@mambo-hosting.com</font></a></p><noscript></noscript>with any questions"; <br />} <br />?&gt; <br />在文件中调用函数com_uninstall()，不然会导致异常。 <p>toolbar.hello_world.php -设置工具栏 <br />&lt;?php <br />//hello_world Component// <br />/** <br />* Content code <br />* @package hello_world <br />* @Copyright (C) 2004 Doyle Lewis <br />* @ All rights reserved <br />* @ hello_world is Free Software <br />* @ Released under GNU/GPL License : <a href="http://www.gnu.org/copyleft/gpl.html"><font color="#b60000">http://www.gnu.org/copyleft/gpl.html</font></a><br />* @version 1.0 <br />**/ <br />defined( '_VALID_MOS' ) or die( 'Direct Access to this location is not allowed.' ); <br />require_once( $mainframe-&gt;getPath( 'toolbar_html' ) ); <br />if($task) { <br />switch($task) { <br />case 'new': <br />case 'edit': <br />$act = "edit"; <br />break; <br />} <br />} <br />if ($act) { <br />switch ( $act ) { <br />case 'edit': <br />menuHello_world::EDIT_MENU(); <br />break; <br />case 'text': <br />menuHello_world::TEXT_MENU(); <br />break; <br />} <br />} <br />?&gt; <br />我们来看一下这个文件 </p><p>require_once( $mainframe-&gt;getPath( 'toolbar_html' ) ); <br />和在admin.hello_world.php中包括admin.hello_world.html.php一样 </p><p>if($task) { <br />switch($task) { <br />case 'new': <br />case 'edit': <br />$act = "edit"; <br />break; <br />} <br />} <br />"new" 和"edit" 将应用相同的工具栏。 </p><p>case 'edit': <br />menuHello_world::EDIT_MENU(); <br />break; <br />告诉toolbar.hello_world.html.php 该调用哪个函数。 </p><p><br />toolbar.hello_world.html.php -控制工具栏的输出 <br />&lt;?php <br />//hello_world Component// <br />/** <br />* Content code <br />* @package hello_world <br />* @Copyright (C) 2004 Doyle Lewis <br />* @ All rights reserved <br />* @ hello_world is Free Software <br />* @ Released under GNU/GPL License : <a href="http://www.gnu.org/copyleft/gpl.html"><font color="#b60000">http://www.gnu.org/copyleft/gpl.html</font></a><br />* @version 1.0 <br />**/ <br />defined( '_VALID_MOS' ) or die( 'Direct Access to this location is not allowed.' ); <br />class menuHello_world { <br />function TEXT_MENU() { <br />mosMenuBar::startTable(); <br />mosMenuBar::publish('publish'); <br />mosMenuBar::unpublish('unpublish'); <br />mosMenuBar::divider(); <br />mosMenuBar::addNew('new'); <br />mosMenuBar::editList('edit', 'Edit'); <br />mosMenuBar::deleteList( ' ', 'delete', 'Remove' ); <br />mosMenuBar::endTable(); <br />} <br />function EDIT_MENU() { <br />mosMenuBar::startTable(); <br />mosMenuBar::back(); <br />mosMenuBar::save('save'); <br />mosMenuBar::spacer(); <br />mosMenuBar::endTable(); <br />} <br />} <br />?&gt; <br />class menuHello_world { <br />Sets the toolbar class <br />function TEXT_MENU() { <br />mosMenuBar::startTable(); <br />mosMenuBar::publish('publish'); <br />mosMenuBar::unpublish('unpublish'); <br />mosMenuBar::divider(); <br />mosMenuBar::addNew('new'); <br />mosMenuBar::editList('edit', 'Edit'); <br />mosMenuBar::deleteList( ' ', 'delete', 'Remove' ); <br />mosMenuBar::endTable(); <br />} <br />告诉mosMenuBar 在工具栏中输出什么内容，括号中小写的内容将告诉admin.hello_world.php <br />执行哪个任务。 </p><p>希望诸位看官眼睛还没有花：-） 这只是对组件的一个很简单的介绍，但是如果你打印本教程的话还是有16页之长：-）* 希望本教程能帮助你设计出更强大的MAMBO组件（没准会收入MAMBO5.0版中哦） </p><p><br />*这里其实有17页，因为我重新排了一下版。 </p><p><br />原文代码在我的机器中安装有许多问题, 大家可下载我修改后的代码对比源码, 仅供新手学习使用(共同学习.... )<br /></p></span>
<img src ="http://www.blogjava.net/tonyzhou00/aggbug/34007.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/tonyzhou00/" target="_blank">蛮哥♂枫</a> 2006-03-07 10:55 <a href="http://www.blogjava.net/tonyzhou00/articles/34007.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>