周梦康 发表于 2014-08-20 4744 次浏览 标签 : ThinkSNS

由于最近给网站增加了一个使用ldap数据库登录的配置,本来想单独建一张表来放ldap的配置信息,其实能配置这些东西很多也很碎,更新的频率是很低的,所以配置内容更应该缓存起来,而非每次都读数据库。ThinkSNS 的XdataModel就做了这么个功能,把所有的配置信息都放在了一个system_data表里面,模拟了key-value的存储,并且做了数据缓存【见图2】

它之所以模拟key-value存储,是为了方便以后切换成memcache或者其他云平台的时候,该model里面的方法依然好用。这也是适配器模式一种实际应用。

ThinkSNS 后台增加一个配置功能


开始说代码实现

1、增加菜单导航

位置:/apps/admin/Conf/config.php

$menu['admin_menu']['system'][L('PUBLIC_SYSTEM_SETTING')]里面增加一个键值对'Ldap服务配置' => U('admin/Config/ldapConfig'),,这样就添加了一个二级侧边栏的导航。

2、写访问控制器

位置:/apps/admin/Lib/Action/ConfigAction.class.php

    public function ldapConfig(){
        $data = model ('Xdata')->get ("admin_Config:ldapConfig");
        $this->assign('ldap',$data);
        $this->display();
    }

3、写模板

位置:/apps/admin/Tpl/default/Config/ldapConfig.html

<include file="__THEME__/admin_header" />
<div id="container" class="so_main">
    <div class="page_tit">Ldap服务配置</div>


    <!-- START TAB框 -->
    <php>if(!empty($pageTab)):</php>
    <div class="tit_tab">
        <ul>
            <php> !$_REQUEST['tabHash'] && $_REQUEST['tabHash'] =  $pageTab[0]['tabHash'];</php>
            <volist name='pageTab' id='t'>
                <li><a href="{$t.url}&tabHash={$t.tabHash}" <php> if($t['tabHash'] == $_REQUEST['tabHash']){ echo 'class="on"';}</php>>{$t.title}</a></li>
            </volist>
        </ul>
    </div>
    <php>endif;</php>
    <!-- END TAB框 -->

    <div class="list">
        <form action="{:U('admin/Config/saveConfigData')}" method='POST' class="form2ß">
            <input type="hidden" class="s-txt" value="admin_Config" name="systemdata_list">
            <input type="hidden" class="s-txt" value="ldapConfig" name="systemdata_key">
            <table width="100%" cellspacing="0" cellpadding="0" border="0">

                <tr>
                    <td width="100px">ldap服务器地址:</td>
                    <td><input type="text" class="s-txt" style="width:200px" value="{$ldap.host}" name="host"></td>

                </tr>
                <tr>
                    <td width="100px">端口号:</td>
                    <td><input id="form_title" class="s-txt" type="text" style="width:200px" value="{$ldap.port}" name="port"></td>
                </tr>
                <tr>
                    <td>管理员帐号:</td>
                    <td><input type="text" style="width:200px" class="s-txt" value="{$ldap.root}" name="root"></td>
                </tr>
                <tr>
                    <td>管理员密码:</td>
                    <td><input type="text" style="width:200px" class="s-txt" value="{$ldap.password}" name="password"></td>
                </tr>
            </table>

            <div class="page_btm">
                <input class="btn_b" value="{:L('PUBLIC_SAVE')}" name='sub' type="submit">
            </div>
        </form>
    </div>
</div>
<include file="__THEME__/admin_footer" />

没错就这么简单,一个配置功能就添加完成了。

所有的配置数据都同意提交给U('admin/Config/saveConfigData')来保存。我们不用关心我们的表单有多少内容,因为是序列化存储,有兴趣的就看看那个控制器吧。so easy!

评论列表