站长百科 | 数字化技能提升教程 数字化时代生存宝典
首页
数字化百科
电子书
▼
建站程序
开发
服务器
办公软件
开发教程
▼
服务器教程
软件使用教程
运营教程
热门电子书
▼
CSS教程
WordPress教程
导航
程序频道
推广频道
网赚频道
人物频道
网站程序
网页制作
云计算
服务器
CMS
论坛
网店
虚拟主机
cPanel
网址导航
WIKI使用导航
WIKI首页
热点词条
最新资讯
网站程序
站长人物
页面分类
使用帮助
编辑测试
创建条目
网站地图
站长百科导航
站长百科
主机侦探
IDCtalk云说
跨境电商导航
WordPress啦
站长专题
网站推广
网站程序
网站赚钱
虚拟主机
cPanel
网址导航专题
云计算
微博营销
虚拟主机管理系统
开放平台
WIKI程序与应用
美国十大主机
编辑“
Gallery:模块开发教程
”(章节)
人物百科
|
营销百科
|
网赚百科
|
站长工具
|
网站程序
|
域名主机
|
互联网公司
|
分类索引
跳转至:
导航
、
搜索
警告:
您没有登录。如果您做出任意编辑,您的IP地址将会公开可见。如果您
登录
或
创建
一个账户,您的编辑将归属于您的用户名,且将享受其他好处。
反垃圾检查。
不要
加入这个!
== 带有动作的页面 == === 前言 === 现在你可以创建一个视图来显示内容了,向该页面添加一个动作吧。 === 模块结构 === 我们会从tutorial2模块进行建立。 ====''templates/MyPage.tpl''==== 在此文件中你已有了 <pre> {if $MyPage.showAlbum} {$MyPage.album.title|markup} {/if} </pre> 现在添加一个表单来执行动作。 <pre> {if $MyPage.showAlbum} {if isset($status.saved)} <div class="giSuccess"> {g->text text="Saved!"} </div> {/if} {$MyPage.album.title|markup} <br/> <form method="POST" action="{g->url}"> {g->hiddenFormVars} <input type="hidden" name="{g->formVar var="controller"}" value="tutorial2.MyPage"/> <input type="hidden" name="{g->formVar var="form[formName]"} value="{$form.formName}"/> <input type="text" size="2" name="{g->formVar var="form[char]"}" value="{$form.char}"/> {if isset($form.error.char)} <div class="giError"> {g->text text="Enter a single character"} </div> {/if} <input type="submit" class="inputTypeSubmit" name="{g->formVar var="form[action][addChar]"}" value="{g->text text="Add to title"}"/> </form> {/if} </pre> 这会将数据发送给名为tutorial2.MyPage 的"控制器"。一个视图定义一个页面显示,而控制器则会为该页面处理相关动作。我们也在MyPage.inc中定义控制器。g->formVar呼叫会向表单字段添加一个前缀("g2_")。这将会避免G2在被嵌入情况下与其他应用程序发生冲突。成功或出现错误情况时,你会在上面看到状态消息。我们会在后面解释使用方法。 :'''注''':如果你得到了''ERROR_REQUEST_FORGED''错误,那么很可能你忘记向.tpl文件中的<form>添加''{g->hiddenFormVars}''了。 ====''MyPage.inc''==== 我们已经定义了MyPageView。我们需要添加MyPageController,但让我们先对视图做修改以初始化表单。在loadTemplate 函数中的<tt>global $gallery;</tt>之后添加如下内容。 <pre> if ($form['formName'] != 'MyPage') { $form['formName'] = 'MyPage'; $form['char'] = ''; } </pre> 当你首次访问视图时,$form是为空的。因此我们要为"char"初始化表单名称以及一个空值。 现在来到我们的控制器,在<tt>class MyPageView</tt>那一行的上面添加此定义。 <pre> class MyPageController extends GalleryController { /** * @see GalleryController::handleRequest */ function handleRequest($form) { </pre> handleRequest函数在某动作被发送到tutorial2.MyPage控制器时被呼叫。所有表单字段名称开头为"form[",这样它们就会被载入$form变量。现在让我们来检查表单输入并执行动作。 <pre> $status = $error = array(); if (isset($form['action']['addChar'])) { if (strlen($form['char']) != 1) { $error[] = 'form[error][char]'; } else { list ($ret, $albumId) = GalleryCoreApi::getDefaultAlbumId(); if ($ret) { return array($ret, null); } $ret = GalleryCoreApi::assertHasItemPermission($albumId, 'core.edit'); if ($ret) { return array($ret, null); } list ($ret, $lockId) = GalleryCoreApi::acquireWriteLock($albumId); if ($ret) { return array($ret, null); } list ($ret, $album) = GalleryCoreApi::loadEntitiesById($albumId); if ($ret) { GalleryCoreApi::releaseLocks($lockId); return array($ret, null); } $album->setTitle($album->getTitle() . $form['char']); $ret = $album->save(); if ($ret) { GalleryCoreApi::releaseLocks($lockId); return array($ret, null); } $ret = GalleryCoreApi::releaseLocks($lockId); if ($ret) { return array($ret, null); } $status['saved'] = 1; } } </pre> 这里有一些GalleryCoreApi呼叫,如果被请求动作为"addChar"并给定了一个"char"值,我们就能确认对根相册权限进行编辑,对其lock,载入,修改标题,保存修改并解除lock。你可以看看<tt>modules/core/classes/GalleryCoreApi.class</tt>或 [http://gallery.menalto.com/apidoc/GalleryCore/Classes/GalleryCoreApi.html apidoc]来了解GalleryCoreApi的实际功用。 如果"char"值不是单个字符,我们就在$error中设定一个值。如果动作执行正确,我们就会在$status中设定一个值。现在回过头来看看tpl文件,来明确检查的位置并显示合适的消息。 接下来我们需要告知G2动作完成时所需要做的。我们会跳转回视图中。 <pre> $method = empty($error) ? 'redirect' : 'delegate'; $result = array($method => array('view' => 'tutorial2.MyPage'), 'status' => $status, 'error' => $error); return array(null, $result); </pre> 成功后通过重新导向转回我们的视图并显示状态消息。在发生错误时,我们会"委派"回视图。这意味着$form数据即使由于错误而没有被保存也会被留下,这样用户就可以修复错误并重新提交表单了。我们的例子只有一个字段,所以并不显著,但如果你填入了若干项目而仅有一个出错时,这就很好用了。 最后结束handleRequest函数及控制器类别。 <pre> } } </pre> === 测试 === 以管理员身份登入(或其他可编辑根相册的用户),浏览你的视图,尝试使用各类输入点击提交按钮。成功保存后,点击浏览器中的"reload"会看到状态消息仅出现一次。
摘要:
请注意,您对站长百科的所有贡献都可能被其他贡献者编辑,修改或删除。如果您不希望您的文字被任意修改和再散布,请不要提交。
您同时也要向我们保证您所提交的内容是您自己所作,或得自一个不受版权保护或相似自由的来源(参阅
Wordpress-mediawiki:版权
的细节)。
未经许可,请勿提交受版权保护的作品!
取消
编辑帮助
(在新窗口中打开)