注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

李江讲故事

微信搜索“李江讲故事”

 
 
 

日志

 
 

织梦编辑器调用  

2011-12-22 11:10:32|  分类: PHP/mysql |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
DedeCMS有一个单页面的功能,可以生成完全不带模板的页面,支持DedeCMS的标签规则。

对于我来说DedeCMS提供的广告插件并不好用,因为不能把标签写在里面,这点和KingCMS的广告系统不一样,KingCMS的广告系统支持标签。

但DedeCMS的单页面却支持标签,不支持模板,调用的时候也不是特别的方便,只能自己写<!--#include file= "xxx.shtml"-->这样的代码在模板里,而且每次都要写死才行,修改的时候不能修改文件名,但这样勉强可以满足我的需要了。这里我为什么需要这个功能主要是为了更新方便公用部分都用SSI来调用,这样生成快,更新也快。

DedeCMS有个好处是编辑器有两种,一个是Dede自己开发的,一个是FCK,我需要在单页管理的时候用上编辑器,而原本是没有的,于是参考了篇文档进行修改了。

 
原创教程:单页文档与单独页面相结合,打造易用单页频道。

 
1、单页文档管理里增加一个单页,比如:公司简介。

2、修改模板,在根目录下》dede》templets内
templets_one_add.htm(增加新页面模板)
此句:<textarea name='body' rows="20" style='width:100%;height:400xp'></textarea>
改为:<?php GetEditor("body",$body,450);?> 

templets_one_edit.htm(更新页面模板)
此句:<textarea name='body' rows="20" style='width:100%;height:400xp'><?php echo $row['body']?></textarea>
改为:<?php GetEditor("body",$row['body'],450);?>  

说明:上面是调出系统使用的编辑器,便可以使用图片上传,文件上传等类似发布新闻一样的功能。 

3、在网站栏目管理内增加一个同名栏目,“栏目属性”设为单独页面。

4、为了使两者可以相互连接,采用“文件保存目录”项存放单页文档的ID号,。

5、打开include目录,新增一个文件inc_extend_functions.php,这是dede开放自定义函数的接口文件。

增加下列代码:

//调用单页的内容
参数说明
$dsql :数据库操作对象。
$aid :当前栏目编号。
function ShowOnepage($dsql,$aid) {  
    if (empty($aid)) $aid=0;
    $row = $dsql->GetOne("Select typedir,ispart From #@__arctype where ID=$aid");
    $aid = $row['typedir'];//取出单页文档的编号。
    if ($row['ispart']==2){ //判断当前栏目是否是单独页面
        $row = $dsql->GetOne("Select body From #@__sgpage where aid=$aid");
        $body = $row['body'];
    }
    if (empty($body)) $body="暂无";
    return $body;
}
//=====================


6、打开plus目录》list.php文件
增加如下代码:
//调用单页文档的内容
$body = ShowOnepage($dsql,$tid);
//=============

7、因为网站风格一般是统一的,所以我们可以为单独页面做一个通用模板(当然也可以做很多模板使用),这个模板可以使用dede的所有规定标签。

8、这一步是所有操作的核心目的,就是在模板你要调用单页文档内容的位置,增加一个标签:
{dede:global name='body'/}

9、最后在“高级选项”内加载,至此所有工作完毕。

总结:
此功能实现不需要让用户多次在本地编辑生成单页文档的代码,只需像上传新闻一样上传相关内容便可有各种不同的单页。

其实dede完全可以让两者合二为一,简化操作。

上面如有不详或错漏之处,请大家回贴指明。 
 
这篇主要讲的是怎么给单页加上模板,其实我觉得有点多此一举,完全可以用模型做一个就好了,不过这句还是很重要的
修改模板,在根目录下》dede》templets内
templets_one_add.htm(增加新页面模板)
此句:<textarea name='body' rows="20" style='width:100%;height:400xp'></textarea>
改为:<?php GetEditor("body",$body,450);?> 

templets_one_edit.htm(更新页面模板)
此句:<textarea name='body' rows="20" style='width:100%;height:400xp'><?php echo $row['body']?></textarea>
改为:<?php GetEditor("body",$row['body'],450);?> 
这句主要是调出了编辑器
 
但问题接着来了,FCK编辑器会自动加上<html><body>这样的标签,换成Dede自己的HTML编辑器却不会出现这样的问题,但我想把这个地方单独出来所以自己又写了个函数
找到include/inc_functions.php这个文件找到 

function GetEditor($fname,$fvalue,$nheight="350",$etype="Basic",$gtype="print",$isfullpage="false"){
 if(!isset($GLOBALS['__funAdmin'])) include_once(dirname(__FILE__)."/inc/inc_fun_funAdmin.php");
  return SpGetEditor($fname,$fvalue,$nheight,$etype,$gtype,$isfullpage);
}

 复制出来 修改成这样

function GetEditorD($fname,$fvalue,$nheight="350",$etype="Basic",$gtype="print",$isfullpage="false"){
 if(!isset($GLOBALS['__funAdmin'])) include_once(dirname(__FILE__)."/inc/inc_fun_funAdmin.php");
  return SpGetEditorD($fname,$fvalue,$nheight,$etype,$gtype,$isfullpage);
}

 
然后找到include/inc/inc_fun_funAdmin.php找到 function SpGetEditor这个函数 复制整段 

function SpGetEditor($fname,$fvalue,$nheight="350",$etype="Basic",$gtype="print",$isfullpage="false")
{
 if(!isset($GLOBALS['cfg_html_editor'])) $GLOBALS['cfg_html_editor']='fck';
 if($gtype=="") $gtype = "print";
 if($GLOBALS['cfg_html_editor']=='fck'){
   require_once(dirname(__FILE__)."/../FCKeditor/fckeditor.php");
   $fck = new FCKeditor($fname);
   $fck->BasePath  = $GLOBALS['cfg_cmspath'].'/include/FCKeditor/' ;
   $fck->Width  = '100%' ;
   $fck->Height  = $nheight ;
   $fck->ToolbarSet = $etype ;
   $fck->Config['FullPage'] = $isfullpage;
   if($GLOBALS['cfg_fck_xhtml']=='Y'){
    $fck->Config['EnableXHTML'] = 'true';
     $fck->Config['EnableSourceXHTML'] = 'true';
   }
   $fck->Value = $fvalue ;
   if($gtype=="print") $fck->Create();
   else return $fck->CreateHtml();
  }else{
   require_once(dirname(__FILE__)."/../htmledit/dede_editor.php");
   $ded = new DedeEditor($fname);
   $ded->BasePath  = $GLOBALS['cfg_cmspath'].'/include/htmledit/' ;
   $ded->Width  = '100%' ;
   $ded->Height  = $nheight ;
   $ded->ToolbarSet = strtolower($etype);
   $ded->Value = $fvalue ;
   if($gtype=="print") $ded->Create();
   else return $ded->CreateHtml();
 }
}

修改为下面的代码

function SpGetEditorD($fname,$fvalue,$nheight="350",$etype="Basic",$gtype="print",$isfullpage="false")
{
   require_once(dirname(__FILE__)."/../htmledit/dede_editor.php");
   $ded = new DedeEditor($fname);
   $ded->BasePath  = $GLOBALS['cfg_cmspath'].'/include/htmledit/' ;
   $ded->Width  = '100%' ;
   $ded->Height  = $nheight ;
   $ded->ToolbarSet = strtolower($etype);
   $ded->Value = $fvalue ;
   if($gtype=="print") $ded->Create();
   else return $ded->CreateHtml();
}

  
操作都是复制粘贴在下面再修改,这样就多了一个SpGetEditorD函数和GetEditorD函数供调用
于是修改模板的时候的语句变成了 
此句:<textarea name='body' rows="20" style='width:100%;height:400xp'></textarea>
改为:<?php GetEditorD("body",$body,450);?> 

templets_one_edit.htm(更新页面模板)
此句:<textarea name='body' rows="20" style='width:100%;height:400xp'><?php echo $row['body']?></textarea>
改为:<?php GetEditorD("body",$row['body'],450);?>  

这样无论后台的编辑器怎么换都不影响单页面这里的编辑器了。
  评论这张
 
阅读(3480)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2018