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我是複製的好友菜單的。可是裏面還是啥功能都沒有,下回再敘吧

  

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