ecmall基本的功能还算不错,拿过来就能用,但是老板想要加一个余额支付的功能,就是用户先把钱存到账户里,购买商品时直接用余额支付,这样可以更快回收资金。于是这个艰巨的任务就是我来做啦。
先注册一个用户登陆进去看看,用户中心的默认app就是member.app
那就去member.app.php里看看,打开一看,又是一大堆shit。
我就想先知道左边的菜单栏是如何做出来的,如图
找啊找,找模板,在themes\mall\default文件夹中找到member.index.html,打开一看,里面又引用了member.header.html和member.menu.html。打开member.menu.html,看到了这么一段
<!--{foreach from=$_member_menu item=item}--> <!--{if $item.submenu}--> <dl> <dt>{$item.text}</dt> <!--{foreach from=$item.submenu item=subitem k=k}--> <dd> <!--{if $subitem.name eq $_curitem}--> <a href="{$subitem.url}" class="active"><span class="{$subitem.icon}">{$subitem.text}</span></a> <!--{else}--> <a href="{$subitem.url}" class="normal"><span class="{$subitem.icon}">{$subitem.text}</span></a> <!--{/if}--> </dd> <!--{/foreach}--> </dl> <!--{/if}--> <!--{/foreach}-->
感觉比较像,因为用firebug看到菜单栏的源码就是如此这般
foreach from是ecmall模板里的语法,就和foreach as 差不多,但是$_member_menu是从哪里来的呢?再去源码里找!直接在member.app.php中ctrl+F,没找到?额,不要逼我用大招,使用zend里面的search也就是ctrl+H键,在整个工作区里找这个变量,终于被我找到了两行。
frontend.base.php?好像是个基类。爱啥啥,直接来到第541行,看到是把_get_member_menu()方法分配给了$_member_menu,so,再来到第579行,
function _get_member_menu() { $menu = array(); /* 我的ECMall */ $menu['my_ecmall'] = array( 'name' => 'my_ecmall', 'text' => Lang::get('my_ecmall'), 'submenu' => array( 'overview' => array( 'text' => Lang::get('overview'), 'url' => 'index.php?app=member', 'name' => 'overview', 'icon' => 'ico1', ), 'my_profile' => array( 'text' => Lang::get('my_profile'), 'url' => 'index.php?app=member&act=profile', 'name' => 'my_profile', 'icon' => 'ico2', ), 'message' => array( 'text' => Lang::get('message'), 'url' => 'index.php?app=message&act=newpm', 'name' => 'message', 'icon' => 'ico3', ), 'friend' => array( 'text' => Lang::get('friend'), 'url' => 'index.php?app=friend', 'name' => 'friend', 'icon' => 'ico4', ), /* 'my_credit' => array( 'text' => Lang::get('my_credit'), 'url' => 'index.php?app=member&act=credit', 'name' => 'my_credit', ),*/ ), ); ...
是的吗是的吗?好激动耶,四个数组正好对应着账户概览,个人资料,短消息和好友。所以我也来一首,随便复制一个array改成这样
'account' => array( 'text' => Lang::get('account'), 'url' => 'index.php?app=account', 'name' => 'account', 'icon' => 'ico4', ),
新菜单项出现了!
但是只是英文的,而且点进去出现了这个
这是没有account.app.php,这个可以理解。那么怎么把英文菜单显示成中文呢?text选项是以 Lang::get()方法取得的,在zend里转到定义,在/eccore文件夹里的ecmall.php文件找到了这个方法
class Lang { /** * 获取指定键的语言项 * * @author Garbin * @param none * @return mixed */ function &get($key = '') { if (Lang::_valid_key($key) == false) { return $key; } $vkey = $key ? strtokey("{$key}", '$GLOBALS[\'__ECLANG__\']') : '$GLOBALS[\'__ECLANG__\']'; $tmp = eval('if(isset(' . $vkey . '))return ' . $vkey . ';else{ return $key; }'); return $tmp; } ...
再往下也看不懂了,直接度娘
原来已经有人写好了,呜呜
common.lang.php就是语言包了,这里就是本地化的所有菜单项,添加一个呗,
'account'=>'用户账户',
刷新,哦也
添加一个菜单项就做好了,注意这个菜单的icon我是复制的好友菜单的。可是里面还是啥功能都没有,下回再叙吧