ECShop设置模板的原理以及一些模板设置函数说明(个人观点)

飘逸的风14年前 (2012-11-22)程序7849
ECShop设置模板的原理以及一些模板设置函数说明(个人观点)

admin/includes/lib_template.php 一些函数及变量说明

$template_files 可以设置内容的模板。

$page_libs 每个模板允许设置的库项目。

get_template_region() 获得模版文件中的编辑区域及其内容,即TemplateBeginEditable和此标签里面的内容件数组。第三个

参数$lib=true时,同时也获取该编辑区域内所有库项目。

get_editable_libs() 从相应模板xml文件中获得指定模板文件中的可编辑区信息,返回可编辑的库文件数组。此XML文件在模板

目录下,名为libs.xml。

设置模板的页面:admin/template.php

模板语言包:languages/语言/admin/template.php

设置模板的原理:
如果某个模板文件存在region(区域),选择region提交后,库项目会自动移至所选择的区域。

处理代码:

/* 修改模板文件 */
$template_file    = '../themes/' . $curr_template . '/' . $_POST['template_file'] . '.dwt';
$template_content = file_get_contents($template_file);
$template_content = str_replace("\xEF\xBB\xBF", '', $template_content);
$org_regions      = get_template_region($curr_template, $_POST['template_file'].'.dwt', false);

$region_content   = '';
$pattern          = '/(<!--\\s*TemplateBeginEditable\\sname="%s"\\s*-->)(.*?)(<!--\\s*TemplateEndEditable\\s*--

>)/s';
$replacement      = "\\1\n%s\\3";
$lib_template     = "<!-- #BeginLibraryItem \"%s\" -->\n%s\n <!-- #EndLibraryItem -->\n";

foreach ($org_regions AS $region)
{
    $region_content = ''; // 获取当前区域内容
    foreach ($post_regions AS $lib)
    {
        if ($lib['region'] == $region)
        {
            if (!file_exists('../themes/' . $curr_template . $lib['library']))
            {
                continue;
            }
            $lib_content     = file_get_contents('../themes/' . $curr_template . $lib['library']);
            $lib_content     = preg_replace('/<meta\\shttp-equiv=["|\']Content-Type["|\']\\scontent=["|\']

text\/html;\\scharset=.*["|\']>/i', '', $lib_content);
            $lib_content     = str_replace("\xEF\xBB\xBF", '', $lib_content);
            $region_content .= sprintf($lib_template, $lib['library'], $lib_content);
        }
    }

    /* 替换原来区域内容 */
    $template_content = preg_replace(sprintf($pattern, $region), sprintf($replacement , $region_content), 

$template_content);
}

相关文章

如何实现PHP的计划(定时)任务和暂停任务

如果在服务器做计划任务是件很简单的事情,但是有的时候收条件限制无法使用服务器自带的计划任务,比如买的空间,这时候想要让网站定时执行某些操作(处理数据、生成静态文件、清除缓存...),该怎么办呢? &...

文章内链的实现方法

在很多的时候,我在浏览其他的网站发现文章中一写关键词都被加上了链接链向对应的页面,我就在想他们是怎么实现这个功能的?为什么这么做,这么做有什么好处?   当然有什么好处一看便知,无论是从...

38条PHP编码优化加速技巧[转]

1. 尽量采用大量的PHP内置函数。 2. echo 比 print 快。 3. 不要把方法细分得过多,仔细想想你真正打算重用的是哪些代码? 4. 在执行for循环之前确...

php日历的高效写法

标题写的吸引人了些,不过我就觉得是挺高效的,我相信 之前看到过 irlvirus 写的 《php练习代码-日历》,我觉得效率都不是很好。 date()函数结合mktime() 可以得到一切东西...

PHP 文件上传$_FILES

文件上传表单<form enctype="multipart/form-data" action="URL" method="post">  <inp...

新的月份,换一个新的模板

新的月份,换一个新的模板

用了半天的时间做一个emlog模板,自己感觉还是不错的。emlog模板做起来还是很简单的!...

评论列表

李明博客
13年前 (2013-01-17)

很好,谢谢分享!

发表评论

访客

看不清,换一张

◎欢迎参与讨论,请在这里发表您的看法和观点。