ecmall开发记录(二)

  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我是复制的好友菜单的。可是里面还是啥功能都没有,下回再叙吧

  

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章