DedeCMS有一个单页面的功能,可以生成完全不带模板的页面,支持DedeCMS的标签规则。
对于我来说DedeCMS提供的广告插件并不好用,因为不能把标签写在里面,这点和KingCMS的广告系统不一样,KingCMS的广告系统支持标签。
但DedeCMS的单页面却支持标签,不支持模板,调用的时候也不是特别的方便,只能自己写<!--#include file= "xxx.shtml"-->这样的代码在模板里,而且每次都要写死才行,修改的时候不能修改文件名,但这样勉强可以满足我的需要了。这里我为什么需要这个功能主要是为了更新方便公用部分都用SSI来调用,这样生成快,更新也快。
DedeCMS有个好处是编辑器有两种,一个是Dede自己开发的,一个是FCK,我需要在单页管理的时候用上编辑器,而原本是没有的,于是参考了篇文档进行修改了。
原创教程:单页文档与单独页面相结合,打造易用单页频道。
1、单页文档管理里增加一个单页,比如:公司简介。
2、修改模板,在根目录下》dede》templets内
templets_one_add.htm(增加新页面模板)
此句:<textarea rows="20"></textarea>
改为:<?php GetEditor("body",$body,450);?>
templets_one_edit.htm(更新页面模板)
此句:<textarea rows="20"><?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 dede_arctype where ID=$aid");
$aid = $row['typedir'];//取出单页文档的编号。
if ($row['ispart']==2){ //判断当前栏目是否是单独页面
$row = $dsql->GetOne("Select body From dede_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/}
9、最后在“高级选项”内加载,至此所有工作完毕。
总结:
此功能实现不需要让用户多次在本地编辑生成单页文档的代码,只需像上传新闻一样上传相关内容便可有各种不同的单页。
其实dede完全可以让两者合二为一,简化操作。
上面如有不详或错漏之处,请大家回贴指明。
这篇主要讲的是怎么给单页加上模板,其实我觉得有点多此一举,完全可以用模型做一个就好了,不过这句还是很重要的
修改模板,在根目录下》dede》templets内
templets_one_add.htm(增加新页面模板)
此句:<textarea rows="20"></textarea>
改为:<?php GetEditor("body",$body,450);?>
templets_one_edit.htm(更新页面模板)
此句:<textarea rows="20"><?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")
{