你现在的位置:首页 > PHP网站建设知识库 > phpcms > 正文

phpcms 针对特定碎片用特定后台碎片编辑模板

涉及的模块有两个 1. /phpcms/modules/block/    2. /phpcms/modules/template/
打开block模块目录 /phpcms/modules/block/

一. 按照phpcms二次开发建议, 为了升级后不影响源代码, 复制一份block_admin.php 重命名为 MY_block_admin.php

二. 打开MY_block_admin.php, 修改类名, 集成原类并继承构造函数


<?php  
defined('IN_PHPCMS') or exit('No permission resources.');   
pc_base::load_app_class('admin', 'admin', 0);  
class MY_block_admin extends block_admin {  
    private $db, $siteid, $priv_db, $history_db, $roleid;  
    public function __construct() {  
        parent::__construct();  
    }  

三. 现在我们假设针对 id = 20 的这个碎片进行特定编辑模板加载, 首先排除全部其他不必要的函数, 留下function block_update() 并改名为block_update20() //便于区别

      /**  
* 针对碎片ID=20所用的方法 
*/  
ublic function block_update20() {  
//code.......  
              include $this->admin_tpl('block_update20');//加载针对id=20所用的模板  
      }  

四. 进入/phpcms/modules/block/template后台模板文件夹,  其中block_list.tpl.php是碎片列表页模板, block_update.tpl.php是碎片编辑模板, 
       (1) 首先来修改block_list.tpl.php 这个文件需要修改的地方就是下面JS 的block_update()方法
[javascript] view plaincopy
function block_update(id, name) {  
    if(id == 20) {  
        window.top.art.dialog({id:'edit'}).close();  
                //这里需要注意的是下面iframe地址中的a参数, 这样修改可以调用我们上面写的block_update20()方法  
                window.top.art.dialog({title:'<?php echo L('edit')?>《'+name+'》',id:'edit',iframe:'?m=block&c=block_admin&a=<span style="color:#FF0000">block_update20</span>&id='+id,width:'700',height:'500'}, function(){var d = window.top.art.dialog({id:'edit'}).data.iframe;d.document.getElementById('dosubmit').click();return false;}, function(){window.top.art.dialog({id:'edit'}).close()});  
    } else {  
        window.top.art.dialog({id:'edit'}).close();  
        window.top.art.dialog({title:'<?php echo L('edit')?>《'+name+'》',id:'edit',iframe:'?m=block&c=block_admin&a=block_update&id='+id,width:'700',height:'500'}, function(){var d = window.top.art.dialog({id:'edit'}).data.iframe;d.document.getElementById('dosubmit').click();return false;}, function(){window.top.art.dialog({id:'edit'}).close()});  
    }  
}  
        (2) 然后把block_update.tpl.php 复制并改名为 block_update20.tpl.php

五. 可以改模板了,  如果添加了input等表单, 记得在模板的js里也要加上, 并且修改控制器block_update20()中接收的数据,  //添加表单不需要在数据库添加字段


六. 上面几步只是针对碎片列表中的修改按钮, 还有一个就是针对虚拟页面而修改的按钮, 要修改的地方在 /phpcms/modules/template/functions/global.func.php

      找到 visualization() 方法, 修改为


/** 
 * 生成可视化模板 
 * @param $html 模板代码 
 * @param $style 风格 
 * @param $dir 目录 
 * @param $file 文件名 
 */  
function visualization($html, $style = '', $dir = '', $file = '') {  
    $change = "<link href=\"".CSS_PATH."dialog.css\" rel=\"stylesheet\" type=\"text/css\" />  
        <link rel=\"stylesheet\" type=\"text/css\" href=\"".CSS_PATH."admin_visualization.css\" />  
        <script language=\"javascript\" type=\"text/javascript\" src=\"".JS_PATH."dialog.js\"></script>  
        <script type='text/javascript' src='".JS_PATH."jquery.min.js'></script>  
        <script type='text/javascript'>  
        var pc_hash = '".$_SESSION['pc_hash']."';  
        $(function(){  
        $('a').attr('href', 'javascript:void(0)').attr('target', '');  
        $('.admin_piao_edit').click(function(){  
        var url = '?m=template&c=file&a=edit_pc_tag';  
        if($(this).parent('.admin_piao').attr('pc_action') == 'block') url = '?m=block&c=block_admin&a=add';  
        window.top.art.dialog({title:'".L('pc_tag','' ,'template')."',id:'edit',iframe:url+'&style=$style&dir=$dir&file=$file&'+$(this).parent('.admin_piao').attr('data'),width:'700',height:'500'}, function(){var d = window.top.art.dialog({id:'edit'}).data.iframe;d.document.getElementById('dosubmit').click();return false;}, function(){window.top.art.dialog({id:'edit'}).close()});})  
        //修改的部分下面  
                $('.admin_block').click(function(){  
            if($(this).attr('blockid')==20) {  
                window.top.art.dialog({title:'".L('pc_tag','' ,'template')."',id:'edit',iframe:'?m=block&c=block_admin&a=block_update20&id='+$(this).attr('blockid'),width:'700',height:'500'}, function(){var d = window.top.art.dialog({id:'edit'}).data.iframe;d.document.getElementById('dosubmit').click();return false;}, function(){window.top.art.dialog({id:'edit'}).close()});  
            } else {  
                window.top.art.dialog({title:'".L('pc_tag','' ,'template')."',id:'edit',iframe:'?m=block&c=block_admin&a=block_update&id='+$(this).attr('blockid'),width:'700',height:'500'}, function(){var d = window.top.art.dialog({id:'edit'}).data.iframe;d.document.getElementById('dosubmit').click();return false;}, function(){window.top.art.dialog({id:'edit'}).close()});  
            }  
        });  
    })</script><div id=\"PC__contentHeight\" style=\"display:none\">80</div>";  
        $html = str_replace('</body>', $change.'</body>', $html, $num);  
        if (!$num) $html .= $change;  
          
        return $html;  
}