<ol class="breadcrumb"> <li><a class="btn btn-mini btn-success" href="javascript:;" onclick="$.dialog('ajaxData', {'title':'申请友链', 'url':G_BASE_URL + '/link/apply/'});">申请友链</a></li> </ol> 一个点击事件,然后调用一个AJAX弹窗,提交到app\link\main.php中的apply_action函数。 这是实际上就是MVC中,将视图(V)中用户的操作提交给控制器(C),然后由控制器来指定要执行的模型(M),在WC中控制器主要由app\模块名\main.php和ajax.php组成,不明白的可以参考一下上一篇。接着介绍main.php中的处理2、新建一个文件app\link\main.php,代码如下
class main extends AWS_CONTROLLER //继承一个基类 { //这个是系统默认的权限判断,目前只需关系$rule_action这个数组元素 public function get_access_rule() { $rule_action['rule_type'] = 'white'; if ($this->user_info['permission']['visit_site']) { $rule_action['actions'][] = 'apply'; //表示在非登录情况下可以访问,这个apply行为被允许操作 } return $rule_action; } //默认行为,当没有指定具体行为时,将默认执行这个 function index_action() { } public function apply_action() { //根据MVC构架,控制器指负责显示某个视图(V),和使用哪个模型(M) //此处只需输出view\default\link\ajax_apply.tpl.htm这个页面给用户,即用户点击申请后所看到的页面 TPL::output('link/ajax_apply'); } }3、建立一个视图文件(V),也就是模板文件view\default\link\ajax_apply.tpl.htm,代码如下
<div id="quick_publish_error" class="error-message alert alert-error hide"><em></em></div> <form action="link/ajax/apply/" method="post" id="quick_publish" class="form-horizontal"> <div class="form-group"> <label class="col-sm-3 control-label">网站名称:</label> <div class="col-sm-9"> <input type="text" name="site_name" class="form-control"> </div> </div> <div class="form-group"> <label class="col-sm-3 control-label">网站地址:</label> <div class="col-sm-9"> <input type="text" name="site_url" class="form-control"> <p class="aw-text-color-999">完整的格式,如:http://xxx.com</p> </div> </div> <div class="form-group"> <p class="aw-text-color-999" style="margin-left:20px;">提交申请后请贵站先做好本站链接,我们将在2-3个工作内进行审核,谢谢合作!</p> </div> </form> <div class="modal-footer"> <span class="pull-right"> <button class="btn btn-primary btn-success" onclick="ajax_post($('#quick_publish'), _quick_publish_processer);return false;">提交申请</button> </span> </div> 此时又有一个用户行为需要处理,即用户提交申请后的处理,由代码可以看出提交的地址是: link/ajax/apply/ 表示提交到app\link\ajax.php中的apply_action() 这个ajax.php是另外一个控制器(C),区别于main.php。main.php主要用于将视图界面(V)显示给用户(如用户点击申请友链,然后弹出申请框),而ajax.php主要用于处理某个具体的行为请求(如此处的提交申请)4、新建一个app\link\ajax.php,其格式和mian.php是一样的,只是分工不一样,代码如下:
class ajax extends AWS_CONTROLLER //继承一个基类 { public function get_access_rule() { $rule_action['rule_type'] = 'white'; if ($this->user_info['permission']['visit_site']) { $rule_action['actions'][] = 'apply'; } return $rule_action; } //当用户点击“提交申请”时的处理 public function apply_action() { $site_name = $_POST['site_name']; $site_url = $_POST['site_url']; //此处就是控制器(C)指派模型(M)的过程,表示调用models\link.php中的is_exist_url() //用于判断该网站地址是否已经存在 if ($this->model('link')->is_exist_url($site_url)) { H::ajax_json_output(AWS_APP::RSM(null, '-1', AWS_APP::lang()->_t('该网站已经提交过,请勿重复提交!'))); } //对提交的参数进行简单的判断 if (trim($site_name) == '') { H::ajax_json_output(AWS_APP::RSM(null, '-1', AWS_APP::lang()->_t('请输入网站名称!'))); } if (trim($site_url) == '') { H::ajax_json_output(AWS_APP::RSM(null, '-1', AWS_APP::lang()->_t('请输入网站地址!'))); } //表示调用models\link.php中的apply(),将申请数据插入数据库中 $this->model('link')->apply($site_name,$site_url) ; H::ajax_json_output(AWS_APP::RSM(null, '-1', AWS_APP::lang()->_t('申请成功,等待管理员审核!'))); } }5、models\link.php模型(M)的编写,模型主要用于功能的处理,由控制器(C)来指派,代码如下:
class link_class extends AWS_MODEL { //插入数据,第四步调用的就是这个函数了,将数据插入到表中 function apply($site_name,$site_url) { $this->insert('links', array( 'site_name' => $site_name, 'site_url' => $site_url, 'time' => time() )); } //检查该URL是否存在 function is_exist_url($site_url) { //根据site_url字段从表aws_links中获取id,如果存在将会返回一个id,如果不存在则返回空 //aws_links的sql在文章末尾放出 return $this->fetch_one('links', 'id', "site_url = '" . $site_url . "'"); } }至此,前台用户申请的功能已经编写完成,下面再总结一下流程: 1、用户点击“申请友链”,此时触发控制器(app\link\main.php),控制器再指定显示哪个视图(V),此时弹出友情链接申请框 2、在弹出框中,用户点击“提交申请”,触发控制器(app\link\ajax.php),控制器再指派模型(M)来处理用户请求 aws_links的sql
CREATE TABLE IF NOT EXISTS `aws_links` ( `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, `site_name` varchar(255) CHARACTER SET utf8 NOT NULL, `site_url` varchar(255) CHARACTER SET utf8 COLLATE utf8_hungarian_ci NOT NULL, `time` int(10) unsigned NOT NULL DEFAULT '0', `status` tinyint(1) unsigned NOT NULL DEFAULT '0', PRIMARY KEY (`id`) ) ENGINE=MyISAM DEFAULT CHARSET=utf-8;下一节将讲后台的对申请数据的处理
AI智能回复搜索中,请稍后...
11 回答
这家伙很懒,还没有设置简介