产品服务AMH 免费服务器主机面板SSL证书 免费SSL证书申请 担保单 免费安全、零费率交易平台编程助手免费智能写代码、翻译AMYSQL 免费MySQL管理工具

AMH 社区首页

 AMH社区 - 开放自由有价值的社区

[求助帖] AMH模块教程-插件型模块的编写

894849635
金牌会员
15129.94 价值分

894849635 发表于 2013-09-06 21:20:15
因为测试模块,把VPS搞坏了,所以要重装系统,在重装系统的期间,我决定教大家写模块

事实上,写模块并没有你想象中的那么难。

事实上,写模块对于你掌握Shell脚本命令还是有很大帮助的,此次拿我之前发布的imagemagick来作为讲解的基础
------------------------------------------------------------------------------------------------------------------------------------------------------------

[*]为什么我要教你写模块? 因为写模块如果只有少数几个人的话,对于AMH的发展十分不利。就如wordpress,之所以能那么火,正是它数以百万计的插件和主题,而AMH的模块却很少,如果开发模块的技术掌握在少数人手中,无疑,并不适合AMH的发展。
[*]为什么明明有妹子@admin的教程,你还要写这个?说实话,妹子的教程很专业。也很像官方文档,事实上,那份文档对于你的读代码能力还是有一定要求的。水平稍次一点的,就没办法看懂了。所以,我干的事就像是360.把本来很难的事,让他变得简单一点。
[*]什么是插件型模块?插件型模块是我自己定义的,区别于AMH模块和系统型模块,AMH模块就是涉及到AMH面板的模块;而系统性的模块则是对系统功能进行补充的模块,就向我正在努力的V_PN模块;插件型模块,就是对PHP或Nginx提供功能性的插件,对于系统本身改动并不大,之所以选择它也是以为如此,插件型模块对于系统更改不大,不会太过影响系统正常运转,适合新手来写。
------------------------------------------------------------------------------------------------------------------------------------------------------------
写模块的基本步骤
1.建立模块文件夹,文件夹为英文。
2.建立AMHscript文件,并书写相关脚本。
3.将模块所使用的支持库文件,安装包等拷贝到模块文件夹下。
4.对模块进行测试,并修复模块中的BUG、
5.将模块发到论坛进行再一次测试,并根据众人反馈进行修改。
6.等待模块发布到模块平台上。
------------------------------------------------------------------------------------------------------------------------------------------------------------
写模块应该注意的注意事项

[*]模块名必须与你的模块所在的文件夹名相同,不然在删除模块时会进入死循环。
[*]不要对模块本身除函数内容外的任何内容进行改动,哪怕是注释!
[*]模块下载东西下载到/usr/local
------------------------------------------------------------------------------------------------------------------------------------------------------------
首先,我先将模块中amhscript的内容贴在下面
#!/bin/bash
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin;

#info
function amh_module_info()
{
echo 'AMH-ModuleName: ImageMagick ';
echo 'AMH-ModuleDescription: ImageMagick是一套功能强大、稳定而且开源的工具集和开发包,可以用来读、写和处理超过89种基本格式的图片文件,包括流行的TIFF、JPEG、GIF、 PNG、PDF以及PhotoCD等格式。 ';
echo 'AMH-ModuleButton: 安装/卸载';
echo 'AMH-ModuleDate: 2013-09-04';
echo 'AMH-ModuleAdmin:';
echo 'AMH-ModuleWebSite: http://www.ixiqin.com';
echo 'AMH-ModuleScriptBy: Xqgz';
}

#install
function amh_module_install()
{
if amh_module_status ; then
exit;
else
cd /usr/local/;
wget http://soft.vpser.net/web/imagemagick/ImageMagick-6.7.1-2.tar.gz
tar zxvf ImageMagick-6.7.1-2.tar.gz
cd ImageMagick-6.7.1-2/
./configure --prefix=/usr/local/imagemagick
make && make install
cd ../
wget http://pecl.php.net/get/imagick-3.0.1.tgz
tar zxvf imagick-3.0.1.tgz
cd imagick-3.0.1/
/usr/local/php/bin/phpize
./configure --with-php-config=/usr/local/php/bin/php-config --with-imagick=/usr/local/imagemagick
make && make install
cd ../
echo 'extension = "imagick.so"' >>/etc/php.ini
amh_module_status;


fi;
}

#admin
function amh_module_admin()
{
if amh_module_status ; then
echo '[OK] ImageMagick Management;
else
exit;
fi;
}

#uninstall
function amh_module_uninstall()
{
if amh_module_status ; then
cd /usr/local/ImageMagick-6.7.1-2/
make uninstall
cd /usr/local/imagick-3.0.1/
make uninstall
rm -rf /usr/local/ImageMagick-6.7.1-2/
rm -rf /usr/local/imagick-3.0.1/
rm -rf ImageMagick-6.7.1-2.tar.gz
rm -rf imagick-3.0.1.tgz
sed -i /imagick.so/d /etc/php.ini
echo '[OK] ImageMagick Uninstall successful.';
else
exit;
fi;
}

#status
function amh_module_status()
{
if [ -d " /usr/local/imagemagick " ]; then
echo '[OK] ImageMagick is already installed.';
return 0;
else
echo '[Notice] ImageMagick is not installed.';
return 1;
fi;
}
在这个模块当中,有一些东西是默认的,比如说想开头,都是默认的,不要修改!
我曾经尝试着在这些默认设置好的地方添加####作为注释,但是,我得到的结果,却是一个什么都没有,只有一个删除按钮的界面,而这,只是以为我将所有的函数都加以注释使得AMH无法识别模块只能选择删除掉它!
除了这些内容,还有很多的内容是我们可以自行修改的内容。
首先,是模块的信息。
模块的信息主要是依赖于 amh_module_info这个函数
#info
function amh_module_info()
{
echo 'AMH-ModuleName: ImageMagick ';
echo 'AMH-ModuleDescription: ImageMagick是一套功能强大、稳定而且开源的工具集和开发包,可以用来读、写和处理超过89种基本格式的图片文件,包括流行的TIFF、JPEG、GIF、 PNG、PDF以及PhotoCD等格式。 ';
echo 'AMH-ModuleButton: 安装/卸载';
echo 'AMH-ModuleDate: 2013-09-04';
echo 'AMH-ModuleAdmin:';
echo 'AMH-ModuleWebSite: http://www.ixiqin.com';
echo 'AMH-ModuleScriptBy: Xqgz';
}
其中,
AMH-ModuleName后跟的是模块名,应注意,模块名应当与你制作模块时建立的文件夹名字相同,否则,会使AMH陷入死循环,不得不重启!
AMH-ModuleDescription后跟的是你的模块的简介,一般而言要简洁一些,只要介绍你的功能就好,具体的使用教程,建议还是发在论坛。
AMH-ModuleButton这个参数一般是用不到的,但是,一些特殊模块可以使用,比如前些日子有一位朋友想要在AMH中加入重启的功能。我当时就说,这并不难,比如如果是关机,AMHscript中的内容如下
#!/bin/bash
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin;

#info
function amh_module_info()
{
echo 'AMH-ModuleName: reboot ';
echo 'AMH-ModuleDescription: 用来重启 ';
echo 'AMH-ModuleButton: 重启/关机';
echo 'AMH-ModuleDate: 2013-09-06';
echo 'AMH-ModuleAdmin:';
echo 'AMH-ModuleWebSite: http://www.ixiqin.com';
echo 'AMH-ModuleScriptBy: 西秦公子';
}

#install
function amh_module_install()
{
reboot
}

#admin
function amh_module_admin()
{
if amh_module_status ; then
echo '[OK] reboot Management;
else
exit;
fi;
}

#uninstall
function amh_module_uninstall()
{
shutdown
}

#status
function amh_module_status()
{
if [ -d " /root" ]; then
echo '[OK] reboot is already installed.';
return 0;
else
echo '[Notice] reboot is not installed.';
return 1;
fi;
}
在这里,就将AMH-ModuleButton的值设为 重启和关机。所以,对于这一项,你大可以不管他。
AMH-ModuleDate 这里设置的是模块的时间,我个人把他作为模块的开发时间,具体请自行修改。
AMH-ModuleAdmin: 这个后面跟的是模块的管理地址,一般大部分插件型模块都是没有管理界面,所以大多留空、
AMH-ModuleWebSite: 这个后面跟的是你的网站的地址。
AMH-ModuleScriptBy: 这里是制作的名字,应该是不拘于中英文,写下你的名字就好。
唔,已经9000+字数了,二楼好了~
评价: 这个问题有价值吗?  没有 (0分)   有, 感谢 (2分)
2013-09-06 21:20:15 1

894849635
金牌会员
15129.94 价值分

本帖最后由 894849635 于 2013-9-6 22:23 编辑

接下来是重头戏:安装脚本
对于我们插件型模块,没有了管理界面,无形中就减少了我们的压力,比如说,想SSL模块吧,你丫不光要写安装脚本,还要写界面的PHP,那有我们插件型简单,简单易学。
接下来是具体讲解,
安装脚本调用的是amh_module_install()函数,所以我们在制作模块时,首先要写这一部分。
首先我们先来对比一下。
这是我的模块的安装脚本
function amh_module_install()
{
if amh_module_status ; then
exit;
else
cd /usr/local/;
wget http://soft.vpser.net/web/imagemagick/ImageMagick-6.7.1-2.tar.gz
tar zxvf ImageMagick-6.7.1-2.tar.gz
cd ImageMagick-6.7.1-2/
./configure --prefix=/usr/local/imagemagick
make && make install
cd ../
wget http://pecl.php.net/get/imagick-3.0.1.tgz
tar zxvf imagick-3.0.1.tgz
cd imagick-3.0.1/
/usr/local/php/bin/phpize
./configure --with-php-config=/usr/local/php/bin/php-config --with-imagick=/usr/local/imagemagick
make && make install
cd ../
echo 'extension = "imagick.so"' >>/etc/php.ini
amh_module_status;


fi;
}
这是军哥的安装脚本
wget http://soft.vpser.net/web/imagemagick/ImageMagick-6.7.1-2.tar.gz
tar zxvf ImageMagick-6.7.1-2.tar.gz
cd ImageMagick-6.7.1-2/
./configure --prefix=/usr/local/imagemagick
make && make install
cd ../
wget http://pecl.php.net/get/imagick-3.0.1.tgz
tar zxvf imagick-3.0.1.tgz
cd imagick-3.0.1/
/usr/local/php/bin/phpize
./configure --with-php-config=/usr/local/php/bin/php-config --with-imagick=/usr/local/imagemagick
make && make install
cd ../
有没有觉得看起来很相似,没错,因为这个模块,我没有从官网去找安装教程,一是因为当时已经是晚上12点了,有些疲倦,不愿意去折腾自己。二是因为,这个模块是第一个发布出来的,还是略微有些忐忑,所以,便直接用了军哥的安装代码。
整个来看,对于代码的修改并不大,所以,在制作模块的时候对技术要求也就低了一些,只需要将官方放出的安装代码移植过来就可以了, 不需要太多的修改。这就大大降低了模块制作者的要求【插件型模块,系统型模块你们暂时不要动,否则系统崩溃别怪我没提醒你。】而且,插件型模块大多不需要更新,往往一次就够了,很长时间不用更新,除非官方不再提供支持。更是减少了开发者的工作量。
在写这一部分脚本时,应该注意语法问题,尽量不要对官方的命令进行大的修改,以防命令的失效和死循环.也减少了你自己在BUG的修复时的工作量。
接下来设置的是管理脚本:调用amh_module_admin() 来影响模块的管理按钮
#admin
function amh_module_admin()
{
if amh_module_status ; then
echo '[OK] ImageMagick Management;
else
exit;
fi;
}
在这个函数中,我们需要设置的就是[]内的单词,如果是大写的OK,就会显示出管理按钮,如果设置的是NO大概就会不显示管理按钮。管理函数没什么可以说的,就这样吧。
接下来是卸载函数,这也是一个很重要的函数,它影响了你的卸载过程
#uninstall
function amh_module_uninstall()
{
if amh_module_status ; then
cd /usr/local/ImageMagick-6.7.1-2/
make uninstall
cd /usr/local/imagick-3.0.1/
make uninstall
rm -rf /usr/local/ImageMagick-6.7.1-2/
rm -rf /usr/local/imagick-3.0.1/
rm -rf ImageMagick-6.7.1-2.tar.gz
rm -rf imagick-3.0.1.tgz
sed -i /imagick.so/d /etc/php.ini
echo '[OK] ImageMagick Uninstall successful.';
else
exit;
fi;
}
卸载时应做的,删除安装时下载的文件,删除安装时的文件夹,删除安装时在某些文件中添加的部分字段。
其中常用的命令多为
sed -i /imagick.so/d /etc/php.ini
rm -rf /usr/local/ImageMagick-6.7.1-2/
第一个命令是删除含有imagick.so的行 删除所在的文件是/etc/php.ini,你只要将关键字和文件修改就可以拿来用、
第二个命令是静默删除某文件或文件夹【含子目录及文件】用于删除你的安装文件和安装目录。
用好以上的两个命令,基本上就可以完成删除命令的脚本。
最后一部分:判断状态的脚本
这一部分本身因为会返回1或0,所以用的是if,需要修改的仍然是“”内的内容,这个里面一般为安装的插件所特有的文件或文件夹,所以,请谨慎设置。记得将其中的XXX is already installed给改过来。。。
#status
function amh_module_status()
{
if [ -d " /usr/local/imagemagick " ]; then
echo '[OK] ImageMagick is already installed.';
return 0;
else
echo '[Notice] ImageMagick is not installed.';
return 1;
fi;
}
本来以为会写很多,可是事实上也没有那么多,我还多占了好几楼,就这样吧。
如果你能将这个看懂。写一个简单的插件型模块不成问题。
在最近,如果要写插件型模块,我会尽量放出更多的具体过程。来方便你理解。
当然,在电脑上的工作都有一个通性,那就是多练,你不妨也找一找imagemagick的安装脚本按照我说的做做试试,再和你在面板中安装的进行比较。
如果有什么问题,可以回复到这个帖子我会及时的回答你!
评价: 这个答复有价值吗?  没有 (0分)   有, 感谢 (0分)
回复  2013-09-06 21:20:34 2

w241357
银牌会员
1148.00 价值分

2楼还占啊
评价: 这个答复有价值吗?  没有 (0分)   有, 感谢 (0分)
回复  2013-09-06 21:21:02 3

894849635
金牌会员
15129.94 价值分

引用:
w241357 发表于 2013-9-6 21:21
2楼还占啊


一会还有呢……你丫无耻的占位啊……
评价: 这个答复有价值吗?  没有 (0分)   有, 感谢 (0分)
回复  2013-09-06 21:22:53 6

恶小弟
银牌会员
4539.82 价值分

0.0 我也无耻一下吧
评价: 这个答复有价值吗?  没有 (0分)   有, 感谢 (0分)
回复  2013-09-07 08:00:09 7

amysql
创始人
99532.51 价值分

很好的开发分享教程,
已转入使用教程分类。

支持
评价: 这个答复有价值吗?  没有 (0分)   有, 感谢 (0分)
回复  2013-09-07 15:13:44 8

AMH面板 - 好用高效低占用、安全可靠极稳定

zilye007
铜牌会员
840.02 价值分

我也来占位
评价: 这个答复有价值吗?  没有 (0分)   有, 感谢 (0分)
回复  2013-09-08 13:28:46 9
 1  (总1页)
AMH社区列表
用户服务中心