CMSware常见模版错误

来自站长百科
跳转至: 导航、​ 搜索

导航:返回上一页

概述:常见模版错误主要有三类:模版语法错误、内容调用错误和新旧版语法混用。模版语法错误一般在刷新页面时任务执行窗口会有相关报错,内容调用错误则要认真分析前台输出页面的报错代码来查找问题,一般而言此时我们的模版并没有写错或者说没有语法错误,但是可能在模版中调用了不存在的内容等,比如调用了不存在的结点或内容模型。

虽然新版思维(CMSware)兼容旧版语法(思维(CMSware)2.1及其以前的模版语法),但如果混用容易导致各种错误。

第一类:无法生成、刷新页面等模版语法错误[ ]

常见症状

  1. 对模版进行修改后,更新页面后,没有变化;
  2. 改变发布位置,点击更新后没有生成页面。

此时一般是您的模版语法有错误,请按照以下说明参照用户手册查找解决问题。

查找问题代码方法:

在信息查看菜单上,选择查看状态窗口,右下角会出现一个框,比如显示结果为

> Updating index.htm at 品位龙江 failed. 2005-9-4 23:32:7

该提示表明该内容页所使用的模版可能有错误,此时,我们选择查看任务执行窗口,左下角会出现一个框,再次刷新页面,如果模版有错,会在左下角框里显示出错信息和错误行数,按提示打开那个模版编译中间文件(在 系统安装目录/sysdata/templates_c 下)来看看,找到出错行,对照模版看是哪行,看看是不是语法有问题,或是语句匹配问题之类

比如任务执行窗口显示如下信息:

parse error: parse error in w:\www\cmsware\sysdata\templates_c\%%c_^@templates@pale_blue_html@include@category_index.htm on line 41

以上文字中重点标识部分为目录名或者文件名。

查找问题时,进入目录w:\www\cmsware\sysdata\templates_c\,找到并用文本编辑器打开文件%%c_^@templates@pale_blue_html@include@category_index.htm,看第41行的具体内容并针对用户手册认真的一点点找问题所在。

然后根据刚才所查找到的原因对模版category_index.htm(在pale_blue_html/include/)作相应修改

第二类:内容调用错误[ ]

  • 症状1:制作模版时从手册直接粘贴代码到所作模版的相应部分但是图片、内容列表等却调用不出来,并且查看状态窗口、任务执行窗口也没有报错
  • 可能原因:粘贴代码的结点ID(NodeID)与当前栏目的结点ID不一致;原代码中调用了特定排序权重的内容以及精华、置顶等特定内容而您的当前结点内又没有这样的内容
  • 症状2:页面完全无法生成,并且查看状态窗口、任务执行窗口也没有报错
  • 可能原因:模版代码中可能有多余的loop循环、where等;闭合标签:比如<loop ......>....</loop>、<if...>......</if>等没有闭合,即缺少了后面的部分;非闭合标签没有使用 "/"作为结束符
  • 症状3:页面完全无法生成,查看状态窗口、任务执行窗口有报错,但是对照手册时却找不到什么错误
  • 可能原因:可能您的模版在同一个<cms />标签内即使用了 2.5版以前的旧语法也使用了2.5版开始启用的新语法,此时会出错;模版标签中单引号、双引号混合使用也会出错,新语法要求模版标签必须用双引号引起来.
  • 症状4:我在文章上后面都加上有相关问题,一般是显示10条。今天看了一下生成了文件,吃惊啊,所有的相关文章的内容在原文章中全有了。 一个文件,平白大了几倍。 应该只是一个链接的啊,为什么内容也有了?
  • 可能原因:模版中包含了<debug name="List" />这个用来调试变量输出的标签
  • 症状5:前台页面生成不完整,有些内容能调用出来,有些部分显示的是如下报错信息:
报错信息1:
    SYS info: MySQL Query Error
    Time: 2005-11-10 9:24am
    Script: /cmsware/admin/admin_task.php
    SQL: SELECT i2.NodeID,i2.ContentID,i2.State,i2.URL,i.IndexID,i.PublishDate,i.Type,i.Sort,i.Pink,co.*, c.* FROM cmsware_content_index
 i,cmsware_content_index i2 left JOIN cmsware_publish_ c ON c.IndexID=i2.IndexID left JOIN cmsware_plugin_base_count co ON co.IndexID=i2.IndexID 
where (UNIX_TIMESTAMP() >= i.PublishDate) AND i.parentIndexID=i2.IndexID AND i2.State=1 AND i.State=1 AND i2.Type!=3 AND i.NodeID='' AND c.Photo='' 
ORDER BY i.Top DESC,i.Sort DESC,i.PublishDate DESC Limit 0,10
    Error: Table 'netzhu.cmsware_publish_' doesn't exist
    Errno.: 1146
    -- Backtrace --
    /pub/www/vhost/netzhu/cmsware/include/lib/kDB/lib/mysql.php(66): require
    /pub/www/vhost/netzhu/cmsware/include/lib/kDB/lib/mysql.php(57): mysql.halt
    /pub/www/vhost/netzhu/cmsware/include/lib/kDB/lib/mysql.php(171): mysql.query
    /pub/www/vhost/netzhu/cmsware/include/lib/kDB/driver/db.php(23): mysql.execute
    /pub/www/vhost/netzhu/cmsware/include/lib/kDB/kDB.php(49): db.execute
    /pub/www/vhost/netzhu/cmsware/include/cms.func.php(534): kdb.execute
    /pub/www/vhost/netzhu/cmsware/sysdata/templates_c/%%c_^@templates@default@index.html(183): cms_list
    /pub/www/vhost/netzhu/cmsware/include/lib/kTemplate/kTemplate.class.php(240): include
    /pub/www/vhost/netzhu/cmsware/include/lib/kTemplate/kTemplate.class.php(284): ktemplate._fetch
    /pub/www/vhost/netzhu/cmsware/include/admin/publishAdmin.class.php(1076): ktemplate.fetch
    /pub/www/vhost/netzhu/cmsware/admin/admin_task.php(230): publishadmin.refreshindex
报错信息2:
    SYS info: MySQL Query Error

    Time: 2005-11-10 10:08am
    Script:

    SQL: SELECT i.NodeID,i.ContentID,i.State,i.URL,i.IndexID,i.PublishDate,i.Type,i.Sort,i.Pink, c.* ,co.Hits_Total, co.Hits_Today, co.Hits_Week, 
co.Hits_Month, co.Hits_Date, co.CommentNum From cmsware_plugin_base_count co, cmsware_content_index i,cmsware_publish_999 c where 
co.IndexID=i.IndexID AND c.IndexID=i.IndexID AND co.TableID=999 ORDER BY co.CommentNum DESC Limit 0,10
    Error: Table 'cmsware.cmsware_publish_999' doesn't exist
    Errno.: 1146
    -- Backtrace --
    W:\www\CMSware\include\lib\kDB\lib\mysql.php(66): require
    W:\www\CMSware\include\lib\kDB\lib\mysql.php(57): mysql.halt
    W:\www\CMSware\include\lib\kDB\lib\mysql.php(171): mysql.query
    W:\www\CMSware\include\lib\kDB\driver\db.php(23): mysql.execute
    W:\www\CMSware\include\lib\kDB\kDB.php(49): db.execute
    W:\www\CMSware\include\cms.func.php(534): kdb.execute
    W:\www\CMSware\sysdata\templates_c\%%c_^@templates@org.cmsware.demo@news@index.html(30): cms_list
    W:\www\CMSware\include\lib\kTemplate\kTemplate.class.php(240): include
    W:\www\CMSware\include\lib\kTemplate\kTemplate.class.php(280): ktemplate._fetch
    W:\www\CMSware\include\admin\publishAdmin.class.php(1076): ktemplate.fetch
    W:\www\CMSware\admin\admin_task.php(230): publishadmin.refreshindex

问题分析与查找:上述两则报错信息都很长并且看似没有什么共性,我们认真看两段报错信息,重点看我加了标记色的部分。“Error”是出错原因,这两段代码都报Table 'xx' doesn't exist,表明都是因为调用了不存在的内容(数据表)."templates_c/%%c_^@templates@default@index.html(183): cms_list"和“templates_c\%%c_^@templates@org.cmsware.demo@news@index.html(30): cms_list”这两段报错代码结构一样,“templates@default@index.htm(183): cms_lis”表明报错模版文件位于templates/default /index.html,第183行报错,报错处使用的系统调用函数为 CMS_LIST();“templates@org.cmsware.demo@news@index.html(30): cms_list”表明报错模版文件位于templates/org.cmsware.demo/news/index.html,第30行报错,报错处使用的系统调用函数为CMS_LIST().知道了出错位置和大体出错原因,下一步就该查看相应的模版的源文件解决问题了。

第三类:新旧版语法混用[ ]

典型问题示例1:在我的模版里想要调用一个结点下所有文章标题!用了以下代码,但是无法生成大家帮忙给 看看!部分模版代码如下:

<CMS::NODELIST:List Type="sub" NodeID="123" Ignore="" >
<loop $List key=key var=var >
<a href="[$var.NodeURL]"> [$var.NodeName] </a> |
</loop>
</td>
</tr>
<tr>
<td height="19" colspan="2">
<p align="left"><font size="2">长空无际</font></td>
</tr>
<tr>
<th width="190" rowspan="2" valign="top">
<img border="0" src="images/cr3_10.gif" width="186" height="27"><img border="0" src="images/24ta_1.gif" width="185" height="293"></th>
<td width="600" valign="top" height="151" background="images/snow.gif"> 
<CMS action="LIST" return="List" NodeID="all-216" Num="10" />
<LOOP name="List" var="var" key="key">
- [<a href="[$var.NodeURL]" target="_blank" > [$var.NodeName] </a>]
<a href="[$var.URL]" target="_blank" title="[$var.Title]" >[@CsubStr($var.Title,0,16)] </a>
<br>
</LOOP> 

问题分析:看您这个模版中,第一段cms语法是2.1格式的,就是下面这段

<CMS::NODELIST:List Type="sub" NodeID="123" Ignore="" >
<loop $List key=key var=var >
<a href="[$var.NodeURL]"> [$var.NodeName] </a> |
</loop>

2.1格式的语法必须有</cms>, 而下面几段都是2.5的语法,2.5的不需要

典型问题示例2,模版中的非闭合标签没有添加结束符:我的内容列表调用不出来,也没有任何模版报错,代码如下

<CMS action="LIST" return="List" NodeID="all-216" Num="10">
<LOOP name="List" var="var" key="key">
<a href="[$var.URL]" target="_blank" title="[$var.Title]" >[@CsubStr($var.Title,0,16)] </a>
<br>
</LOOP>

问题分析:模版中的非闭合标签<CMS...>没有添加结束符<CMS.../>,第一行正确的格式应该为

<CMS action="LIST" return="List" NodeID="all-216" Num="10" />

常见问题3:闭合标签 比如<loop ......>....</loop>、<if...>......</if>等没有闭合,即缺少了后面的部分



参考来源[ ]