聚合新闻服务
手机wap浏览
您现在的位置: 动易模板 >> 动易中心 >> 动易标签 >> 正文
注册登陆
建站服务
视动工坊
服务项目
建站流程
建站价目
成功作品
联系信息
联系信息
视动工坊:动易认证设计师
动易模板大赛连续两次获奖
现共完成动易模板100余个
热诚欢迎定制改制动易模板
Q Q: 363881827
手机: 13153001848
Tel: 0531-83711777
Mail: wsdjqwj2003@163.com
   
[组图]★★★SQL查询/标签制作!动易全民人人皆会!★★★
作者:佚名 文章来源:本站原创 点击数: 更新时间:2008-7-25 21:19:19
看完本篇您至少能够写针对SiteFactory的查询语句并且制作一个属于您自己劳动结果的标签!!!
如果您想真正的学到知识,请花点时间认真的通读!!!

前面的废话:
介于不少朋友询问标签和查询语句相关知识,感受到不少新朋友对这方面知识还是了解甚微,
本文通过一个简单的Flash焦点图例子由查询语句到标签制作过程中所涉及的知识进行了详细的讲解.

本文不是为专业人士/设计/开发者准备的,教程所涉及的内容非常简单,如果您对这方面知识丰富,
那么您没有必要浪费时间在这里,如果您希望了解来自于我的激情,非常感谢您的光顾!

本贴不接受恶意的人生攻击/批评,虽然我尽最大的努力保证我的教程基于专业水平,但疏忽和个人水平有限,
错误在所难免!您在阅读的过程中发现有误导您的地方,恳请指正,以便于我及时修正.

本人可能会在教程结束之后对知识进行扩展,告诉大家如何写 常规的调用标签/数据源标签/存储过程化查询
提到这里本人也极力推荐标签自己动手写,查询100%存储过程化!简单点这么想,如果您去买一件通号的衣服
穿在身上舒服呢还是自己去裁缝店定做一个合身呢?标签自己写可以节省很多没必要去消耗的CPU / IO资源
能够或多或少的提高访问速度.这也是我考虑写扩展知识的一个原由!


自己动手做一个
Flash焦点图!

图片点击可在新窗口打开查看此主题相关图片如下:
图片点击可在新窗口打开查看
就以上面的Flash效果为例子!给大家讲解.成品效果预览请看下面的地址
http://www.webmmt.cn/Category_35/index.aspx
这本来是我准备发布的第六个玩具,由于原帖无法编辑了,不知何故询问管理员尚无回复.正好就引用到这里
给大家做个教程,以后也不在发布小玩具了,朋友们学会了都能自己做了!

所需的
Flash文件[包含源文件] Javascript代码[后面我有提到为何用这种代码]下载包有提供


查询代码 [不要觉得晕,我一句一句讲!]
SELECT
C.GeneralID,
C.Title,
C.DefaultPicUrl
FROM
dbo.PE_CommonModel C
INNER JOIN dbo.PE_U_Article A ON (C.GeneralID = A.ID)
WHERE
C.DefaultPicUrl != '' AND
C.Status = 99
ORDER BY
C.UpdateTime DESC

SELECT 列名称 FROM 表名称
列表名是什么?就是表名下的字段名!
表名称是什么?就是SiteFactory的模型表,比如PE_U_Article[文章模型表]
FROM 则为从哪里选择

SELECT
C.GeneralID,
C.Title,
C.DefaultPicUrl
FROM
dbo.PE_CommonModel C

上面的语句意思就是,我要从公共模型 PE_U_CommonModel 列出所有的
GeneralID                 [内容全局ID,意义可大着呢,就像网络牵连这我们每个上网用户一样]
Title                         [看名字就知道是标题喽]
DefaultPicURL          [这个是默认的图片路径]

疑惑:

1.       内容全局ID,牵连大?
SiteFactory
的表结构是非常合理,并没有将所有的内容都存储在一个表下,以防止表内容庞大,失去效益.同样也能避免像查询超时,集群检索时陷入IO死循环等,总之好处多多!所以分表存储不失为一种最优办法.[稍后继续讲]

2.       C.GeneralID中的C什么意思?
没什么意思,要说有意思就是一个名字→别名,想想看,如果你有一位朋友名字叫
啊吧才的额飞个好就如果你每次这样叫他的名字不觉得绕口嘛? 如果你告诉他,我把你取名叫做 “C”  以后C就是你
也就是说C就是 啊吧才的额飞个好就,


同理上面的
C就是PE_U_CommonModel ,我们在何时给他取了个别名,您仔细看 FROM后面的PE_U_CommonModel是不是有个尾巴 C ,就是这个时候给他了个别名.

说到这里C.GeneralID也能轻松理解了,就是PE_U_CommonModel的字段GeneralID

跟下面的语句一样

SELECT

  dbo.PE_CommonModel.GeneralID,

  dbo.PE_CommonModel.Title,

  dbo.PE_CommonModel.DefaultPicUrl

FROM

  dbo.PE_CommonModel

这里我们也不难看出,利用别名带来的好处是代码更加清晰便于阅读!

3.       dbo是什么东西?

他是数据库所有者,当他自己建立的数据库拥有和管理员一样的权限,这个你喜欢则加不喜欢则不加无所谓,不过本人推荐你加上.当然类似的还有dba喜欢了解多一点的朋友可以自己查询下资料喽.

WHERE
C.DefaultPicUrl != '' AND
    
C.Status = 99

WHERE 怎么感觉有点像ON,其实你也可以像你的感觉那么想,WHERE是约束条件,别忘了,我们要做的可是Flash焦点图,87篇文章中不可能都有图片吧,这里我们就需要用到上面WHERE关键字作为约束条件了

C.DefaultPicUrl != '' 意思为这个字段不为空的时候,才被列出,不为空那就是有图片喽,这样就达到我们需要的效果了!仅仅列出有图片的文章!

C.Status = 99
    
Status
是内容状态的意思,当为99为核审过的文章,因为我们总不希望草稿也被焦点图这么重要的位置展现出来嘛. AND当然是与的意思喽,也就是和的意思,当两个条件都成立才被列出!


ORDER BY
C.UpdateTime DESC

ORDER BY意思呢比较简单,取出的结果按按什么方式排序,也许您希望用点击数来排序,那么写C.Hits就可以了,DESC则为倒序的意思,您记住这个就可以,如果您不希望倒序排列,希望正常顺序,那么去掉DESC就可以了,默认的情况下就是正序排列的,如果您不放心也可以加个关键字ASC

看到这里的朋友,您辛苦了,您是不是明朗许多了呢!是的您或多或少的学到点东西了!

这里补充一下取出多少个可以用SELECT TOP 如我们取出10个则写  SELECT TOP 10 这句颇简单不做敖述
关于变量的传递[标签中的删除名称其实就是变量,值就是变量值]我们稍后讲解

下面就到了标签内容编辑,这标签内容编辑可不简单,我们先的需要分析下Flash说需要的数据结构是怎样的.例如,我给大家提供的Flash所需结构为

图片一#链接一#标题一|图片二#连接二#标题二|图片三#连接三#标题三

这里我选择了一个稍微复杂的数据要求,以保证我们的教程内容基于→更丰富!

数据要求分析:
"#"为用于分割一条信息的 图片地址/连接地址/标的内容 的分隔符
"|"为分割多条信息的分隔符

我们也能轻易发现无论是一条信息中的分隔符"#",和多条信息的分隔符"|"在末尾是不允许出现.
也因为这条约束稍微增加了我们教程的深度.

输出10条所需结构

"图片#连接#标题"为整体循环10次,并且在这十次过程中,每循环完成一次后需要添加一个 "|" 的分隔符


为了保证所涉及的相关知识范围在本帖讨论范围内/也为了让您能够学习到更多的知识
这里对于分隔符分割信息的方法不采用javascript脚本语言来实现,我们在丰富下我们SQL知识.

注:为了方便教程不至于容量太大,让您觉得头晕,我们这里仅仅添加几个参数

打开您的SiteFactory管理系统,并且登陆后台至标签管理!
单击左侧的添加标签:填写好标签名称/查询方式就可以了 如下图所示

图片点击可在新窗口打开查看此主题相关图片如下:
图片点击可在新窗口打开查看

完成后点击下一步 这里我们仅添加两个参数,并且填写上默认值
ShowNum    [用于控制显示多少条信息]
TitleLen       [用于控制标的的长度]

图片点击可在新窗口打开查看此主题相关图片如下:
图片点击可在新窗口打开查看


疑惑:
标签参数是什么?为什么要标签参数?
标签参数就是变量,什么是变量?可变的的东西就是变量!
参数名称就是变量名,参数值就是给变量赋的值.我还是不明白?
举个简单例子:
有朋友们喜欢吸烟,一盒烟中的烟支数量就是变量,他可能随着时间的推移而减少,因为你在抽他.
这里的烟盒就是变量名,里面的烟就是变量值,如新开封的一包烟为20支.这里的20就是变量值.
这就好比上面的ShowNum[显示多少条]我们给他的默认值为10条,这个时候ShowNum就是10.
好我明白了,可是为什么要用变量呢?
前面我们已经熟悉了SELECT TOP语句,如果希望取出10条结果就SELECT TOP 10
如果你觉得那个版位显示10条不够用,空荡荡的,又改变注意希望取出20条结果呢?
如果又改变注意,希望取出3条结果呢?如果我们每次都去修改SELECT TOP "NUM"语句那岂不是很麻烦.
这里我们就需要用到变量了,将上面的语句改写为 SELECT TOP @ShowNum
这样是不是方便许多?你需要显示100条的时候把变量ShowNum的值更改为100不就可以了吗?

好了,既然弄明白了就点击下一步吧,到了查询语句窗口了.
我们都学习过了基本的知识,都算小虾了,还用什么可视化SQL编辑,直接徒手输入吧,增加点熟练度!

SELECT TOP @ShowNum C.GeneralID,C.Title,C.DefaultPicUrl FROM dbo.PE_CommonModel C
INNER JOIN dbo.PE_U_Article A ON (C.GeneralID = A.ID)
WHERE C.DefaultPicUrl != '' AND C.Status = 99 ORDER BY C.UpdateTime DESC

上面的语句您都能看懂吗?如果看不懂那么您可能需要重新学习下上面的知识了.


既然到这里您都是明朗的,那么我们继续下一步,到可视化的标签编辑窗口开始学习我们XSLT知识

此主题相关图片如下:
图片点击可在新窗口打开查看


打开您的SiteFactory管理系统,并且登陆后台至标签管理!
单击左侧的添加标签:填写好标签名称/查询方式就可以了 如下图所示
SiteFactory的标签编辑面板,由3部分组成
1.红色的快捷调用
2.绿色的标签内容编辑
3.蓝色的构架一览
红色的快捷调用其实就是"片段代码"又由3个子面板组成,功能多但分类详细
有兴趣的朋友可以多多摸索和观察一下标签面板的构成,以增加熟练度.
蓝色的构架一览是一个非常实用的功能,这个朋友们在使用过程中会逐步体会到其优点.

好废话不多,我们开始制作标签.
这里先提及一下我一开始提到的一个js文件[SWFObject]
我想很多朋友时常遇到一些网页上的Flash提示用户 "单击已激活此控件" 的信息吧.
这往往是我们不想看到的.SWFObject就是一个解决方案
[过多的内容不在本文讨论范围内,详情朋友们可以搜索一下相关知识,下面为调用方法]
<div id="test"></div>
<script type="text/javascript">
var lewi= new SWFObject("影片路径", "影片别名", 宽度, 高度, "版本", "背景色");
lewi.addVariable("mypic_add",img);//增加变量,变量名/值
lewi.write("test");//将影片写入对应id的容器中
</script>

前面我们分析过输出10条结构为
"图片#连接#标题"为整体循环10次,并且在这十次过程中,每循环完成一次后需要添加一个 "|" 的分隔符
我们将它专业化,下面给出完整语句,请不要晕,我一条一条的讲解

<?xml version="1.0" encoding="utf-8"?>
<xsl:transform version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:pe="labelproc" exclude-result-prefixes="pe">
<xsl:param name="TitleLen"/>
<xsl:variable name="CountNum" select="count(/NewDataSet/Table)"/>
<xsl:output method="html" />
<xsl:template match="/">
<div id="asdf"></div>
<script type="text/javascript">
var img="<xsl:for-each select="/NewDataSet/Table">
<xsl:value-of select="pe:ConvertAbsolutePath(DefaultPicUrl)"/>#<xsl:value-of select="pe:GetInfoPath(GeneralID)"/>#<xsl:value-of select="pe:CutText(pe:EncodeText(Title,'htmldecode'),$TitleLen,'…')"/>
<xsl:if test="position()<$CountNum">|</xsl:if>
</xsl:for-each>
";
var lewi = new SWFObject("{PE.SiteConfig.ApplicationPath/}images/testfocus.swf", "asdf", 662, 155, "8", "ffffff");
lewi.addVariable("mypic_add",img);
lewi.write("asdf");
</script>
</xsl:template>
</xsl:transform>
这里仅仅需要注意上面红色部分和紫色部分即可

主题相关图片如下:
图片点击可在新窗口打开查看
这里我贴出右边的构架图,不难看出 当匹配到NewDataSet/Table的时候开始10次循环
将语句标准化,就是下面这样!
<xsl:for-each select="/NewDataSet/Table">
</xsl:for-each>
这里需要提及一下,XML很严格,必须要求有闭合标签!
<xsl:for-each>元素就是在XSLT中循环
select 的属性值是一个Xpath表达式,关于Xpath可以查阅相关资料,字面上的意思也很容易理解.

<xsl:value-of> 元素用于提取某个选定节点的值,如我们要提取标题,即Title则
<xsl:value-of select="Title"/>
如我我们把它放在上面的循环之中
<xsl:for-each select="/NewDataSet/Table">
<xsl:value-of select="Title"/>
</xsl:for-each>
这样标题内容就被循环了10次了,当然这还不能达到我们预期的效果,继续看
<xsl:for-each select="/NewDataSet/Table">
<xsl:value-of select="DefaultPicUrl"/>
<xsl:value-of select="GeneralID"/>
<xsl:value-of select="Title"/>

</xsl:for-each>
我想上面这3句您通过Title的例子已经可以完全理解了,当然到这一步还是没有能够达到我们需求的效果,稍加修改
<xsl:value-of select="DefaultPicUrl"/>#
<xsl:value-of select="GeneralID"/>#
<xsl:value-of select="Title"/>
在后面加上#号后..单条数据已经满足我们要求啦,现在需要的是能够在单条数据后增加一个"|"来分割,这可有点难度喔

注意下我们先前红色代码,我们已经为实现这个"|"做好了准备
<xsl:param name="TitleLen"/>
<xsl:variable name="CountNum" select="count(/NewDataSet/Table)"/>

param 为声明一个局部或全局参数
variable为声明局部或者全局的变量

前面我们有讲解过参数和变量,如果您这里感到疑惑,可以放回去仔细阅读
count 为返回节点的数量 不难看出我们上面节点数量为10.
我们在看这条语句
<xsl:if test="position()>$CountNum">|</xsl:if>
这里的if是条件判断 仅当某个指定的条件成立时才被应用
这意什么?当循环至最后一个的时候 count返回的节点数量已经不在大于0了,那么这个"|"将不会被添加进去.
这也就实现了最后一条不出现"|",到这里算是基本上大功告成,看代码:
<xsl:value-of select="DefaultPicUrl"/>#
<xsl:value-of select="GeneralID"/>#
<xsl:value-of select="Title"/>
<xsl:if test="position()>$CountNum">|</xsl:if>
这样我们就达到预期效果了
图片#连接地址#标题| 这样的结构了,剩下的就是让她包含在循环里面就可以了,就是下面的代码啦
<xsl:for-each select="/NewDataSet/Table">
<xsl:value-of select="DefaultPicUrl"/>#
<xsl:value-of select="GeneralID"/>#
<xsl:value-of select="Title"/>
<xsl:if test="position()>$CountNum">|</xsl:if> [这个循环到第10个是不会加上"|"的,为什么?前面说过,条件不成立了嘛]
</xsl:for-each>
好了到这里就算是完工了,剩下的就是休整下输出结果上面用到的几个内置函数,这里我给出说明
pe:ConvertAbsolutePath 转换到绝对路径
pe:GetInfoPath 取得信息路径
pe:EncodeText html代码解码
pe:CutText 截断长度
这些内置的扩展函数都相当简单而且非常实用!标签编辑器里面已经写的很详细了,这里不过多说明了!
好了,奉上完整的标签代码
<?xml version="1.0" encoding="utf-8"?>
<xsl:transform version="1.0" xmlns:xsl="
http://www.w3.org/1999/XSL/Transform" xmlns:pe="labelproc" exclude-result-prefixes="pe">
<xsl:param name="TitleLen"/>
<xsl:variable name="CountNum" select="count(/NewDataSet/Table)"/>
<xsl:output method="html" />
<xsl:template match="/">
<div id="asdf">此处显示  id "focusimg" 的内容</div>
<script type="text/javascript">
var img="<xsl:for-each select="/NewDataSet/Table">
<xsl:value-of select="pe:ConvertAbsolutePath(DefaultPicUrl)"/>#<xsl:value-of select="pe:GetInfoPath(GeneralID)"/>#<xsl:value-of select="pe:CutText(pe:EncodeText(Title,'htmldecode'),$TitleLen,'…')"/>
<xsl:if test="position()<$CountNum">|</xsl:if>
</xsl:for-each>";
var lewi = new SWFObject("{PE.SiteConfig.ApplicationPath/}images/testfocus.swf", "asdf", 662, 155, "8", "ffffff");
lewi.addVariable("mypic_add",img);
lewi.write("asdf");
</script>
</xsl:template>
</xsl:transform>
到这里能够告诉您一声,恭喜您,您可以自己动手尝试做一个属于您自己劳动结果的标签了!
这里我已经提供了,完成的标签和范例所需文件,不过我还是希望您能够通过自己动手做一个属于您自己的标签!遇到问题,解决不了,在资讯,直到自己完全弄懂了为止,否则您浪费时间看到这里又有什么意义呢?!

另外本教程写的也有点仓促,因为忙着写个超酷的Flash统计[暂时不能给出预览地址],如果您
哪部分没有看懂,请您回帖,我会详细的给您描述它的意义.


[这算是我的第6个小玩具了吧,原帖已经不能再编辑了不知何故,朋友们也可以通过那几个小玩具分析下代码,扩展知识]
[小玩具地址:http://bbs.powereasy.net/dispbbs.asp?boardID=73&ID=369462&page=2]

下载地址:
图片点击可在新窗口打开查看点击浏览该文件

动易中心录入:alang    责任编辑:alangyuafeng929 
  • 下一个动易中心: 没有了
  • 评论主题:★★★SQL查询/标签制作!动易全民人人皆会!★★★(评论内容只代表网友观点)
    版权所有:copyright 2005-2008 动易模板NO.1 核心:PowerEasy SiteWeaver™ 6.6 备案:鲁ICP备05007599号
    电话:0531-83711777(晚间)手机:13153001848 QQ:363881827 群号:一群13022466(满)二群36354619