某天下午偷懒,上班时间自个儿玩起了dedecms代码。由于在产品班一直对老师教的写死风格模板方法耿耿于怀,总觉得写死代码这是对原作者智慧结晶的一种亵渎。我们应该让数据能够按照原来的走向,稍加扩展来完成我们的目的,嘿嘿。
    废话少说,入正题!将我的整个探索过程记录其下:
找到空间风格相关文件spaceskin.php,开始分析代码。按照正常的数据流向,首先读取用户的默认风格数据
$userrow = $dsql->GetOne( "Select spacestyle From `#@__member_space` where mid='".$cfg_ml->M_ID. "' ");
不难推断 #@__member_space就是记录用户使用风格的数据表,$cfg_ml就是用户登录实例,M_ID为默认风格ID。
再往下看,spaceskin.htm文件被包含进来,且该文件唯一的动态数据部分为ListSkin(),可想该函数就是生成整个风格模板数据的关键函数,于是开始着手分析。
果然不出所料,在该函数处发现一个关键文件skinlist.inc--记录风格模板列表。程序就是通过这个列表文件读取模板存放的目录,并读取目录中有无包含info.txt文件,从中读取模板的名称,demo图片,文件夹名称,作者,日期等相关信息,生成风格模板的显示表格。从以上分析,我们清楚了解到,想加入自定义的风格模板,只要从3个部分入手
1、将风格模板复制到member/space目录下,并在skinlist.inc添加上文件夹的名称。
2、为自定义模板创建info.txt文件,这里要注意的是一定要空出一行,也就是name:***要在第二行出现,否则无法正常获取到模板的名称,至于原因,我也不知道。
3、添加一个demo图片,这个不是必须的,没有的话也不影响操作。
 
仅以上三步,就能添加入自己的风格模板了,无需改源代码,十分方便。
 
新函数知识:
1、eregi_replace( string pattern, string replacement, string string )
不区分大小写替换正则表达式
pattern   正则表达式
replacement  要替换成的字符串
string  字符串
 
2、 file_exists ( string filename )
检查文件或目录是否存在,如果由 filename 指定的文件或目录存在则返回 TRUE,否则返回 FALSE
filename 文件目录
 
3、 is_dir ( string filename )
判断给定文件名是否是一个目录,如果文件名存在并且为目录则返回 TRUE。如果 filename 是一个相对路径,则按照当前工作目录检查其相对路径。
filename 文件路径
 
4、 opendir ( string path [, resource context] )
打开目录句柄
patch 要打开的目录
context 不祥
 
5、 readdir ( resource dir_handle )
从目录句柄中读取条目,返回目录中下一个文件的文件名。文件名以在文件系统中的排序返回。
dir_handle 目录句柄
例:
$fp = opendir($dir); 
while ($sysname = readdir($fp)) 

    $dirs[] = $sysname; 
}
 
6、 closedir ( resource dir_handle )
关闭目录句柄,关闭由 dir_handle 指定的目录流。流必须之前被 opendir() 所打开。
dir_handle 目录句柄
 
7、 filemtime ( string filename )
取得文件修改时间,返回文件上次被修改的时间,出错时返回 FALSE。时间以 Unix 时间戳的方式返回,可用于 date()
filename 文件路径