dede观看总结自己总结
知识点一:
{dede:arclist channelid="18" addfields="language,pfz" limit="0,5"}
<li class="c[field:global.autoindex/]"><a href="[field:arcurl/]" target="_blank"><img src="[field:litpic/]" alt="[field:title/]" /></a><p>
[field:language/]
</p><b><a href="[field:arcurl/]" target="_blank">
[field:title/]
</a><img src="[field:global name='cfg_templets_skin'/]/images/1.jpg"><em>[field:pfz/]分</em></b></li>
{/dede:arclist}
1.标签arclist:是一个dede自带的标签,能够显示归档表的各个记录,以列表的形式显示出来的,但是这个只能显示归档表的字段是不能显示附加表的字段
如果需要显示附加表的字段就需要使用额外的标记即增加附加表的字段标记:addfields="language,pfz"
arclist存在很多的标签:
显示归档表的字段的格式是[field:字段/]其中[field:arcurl/]是连接到详情页面的超链接,这个字段是从dede后台的左边的模板的标签的例子可以看出
{dede:arclist flag='h' typeid='' row='' col='' titlelen='' infolen=''
imgwidth='' imgheight='' listtype='' orderby='' keyword='' limit='0,1'}
<a href='[field:arcurl/]'>[field:title/]</a>
{/dede:arclist}
2.标签2,include:包含文件文件标签可以将公共的部分,如头部与尾部包含进来:
格式如下:{dede:include filename='模板文件.htm'/}
例子:{dede:include filename='head.htm'/}
3.标签3,栏目标签channel可以获取栏目列表
例子:
<!--select列表from dede arctype-->
<!--大家注意typeurl并不是dede_arctype表的字段,他是在程序中计算得到的!-->
{dede:channel orderby="id" type="top" row="8"}
<li><a href="[field:typeurl/]" title="手机电影" target="_self">
[field:typename/]
</a></li>
{/dede:channel}
我们可以猜得到这个是查找arctype表得到的列表,但是点击进入栏目的详情页面使用字段[field:typeurl/]这个会发现跟数据库中存储的字段是有差别的,所以是这个值是在程序中现算出来的
但是是怎么知道的这个字段标签的呢?看官方文档,可以看到它用的位置是在超链接里面,所以是根据位置可以判断用法如下:
{dede:channel type='top' row='8' currentstyle="<li><a href='~typelink~' class='thisclass'>~typename~</a> </li>"}
<li><a href='[field:typelink/]'>[field:typename/]</a> </li>
{/dede:channel}
然后再结合数据库可以猜想出这个标签是结合数据库中的arctype这个标签:然后观看这个标签的源码就可以发现其内部实现:D:\web\dedecms\include\taglib\channel.lib.php
所以学习的方法就是:根据官方文档其用法,猜其查的数据库中的哪个表,然后追踪源码验证自己的想法;
如上官方的例子可以看出[field:arcurl/]是放在超链接里面所以可以猜测这个就是连接到详情页的超链接
4.由于dede标签是不能够嵌套的,所以在dede:arclist标签中,如果需要使用全局变量则需要将全局变量的dede标签转化成字段形式避免嵌套
如:[field:global name='cfg_templets_skin'/]可以看到dede标签转化成字段,其中global说明是全局的变量!
5.dede还存在自动增长的全局变量,不过用法跟一般的全局变量有区别,增加了一个点如果[field:global.autoindex/]表示列表自动增长
知识点二:全局变量存在于文件include/common.inc.php
例子:dedecms系统中自带文件common.inc.php中存在$cfg_soft_lang = 'utf-8';这里就设置了全局变量
<meta http-equiv="Content-Type" content="text/html; charset={dede:global.cfg_soft_lang/}" />在网页中设置该网页面的字符编码还是应用dede标签
语法:{dede:global.全局变量/},所以还可以在框架对应的文件中自定义全局变量!
6.面包屑标签:当前位置:{dede:field.position/}{dede:field.title/}
7.内容标签:如果跳转到内容页之后就可以直接用对应的dede标签进行显示详情页面的附加表的字段:如下:
{dede:field.title/},{dede:field.language/},{dede:field.area/},{dede:field.year/},{dede:field.director/},{dede:field.actors/},{dede:field.introduce/}
8.利用ajax对电影进行评分:
步骤:1.鼠标移动选中对应星星,2.鼠标点击就发起ajax发送数据到服务器
前端代码:
<script type="text/javascript">
//给所有的小星星绑定一个mouseover
//1.使用jquery如何去选中id下的所有图片
$("#rank_pic img").mouseover(function(){
//把当前选中的星星变成黄色
str=$(this).attr('src');
str=str.replace("rank_3.gif","rank_1.gif");
str=str.replace("rank_4.gif","rank_2.gif");
$(this).attr("src",str);
//下面的this表示小手指着的那个小星星
$(this).prevAll().each(function(){
//替换这个下面的this表示遍历的时候的小星星
//替换这个星星的src
str=$(this).attr('src');
//js中如何替换的src重新放回到
str=str.replace("rank_3.gif","rank_1.gif");
str=str.replace("rank_4.gif","rank_2.gif");
$(this).attr("src",str);
});
//替换后面的星星,黄色-》灰色
$(this).nextAll().each(function(){
//替换这个下面的this表示遍历的时候的小星星
//替换这个星星的src
str=$(this).attr('src');
//js中如何替换的src重新放回到
str=str.replace("rank_1.gif","rank_3.gif");
str=str.replace("rank_2.gif","rank_4.gif");
$(this).attr("src",str);
});
});
//2.给每个星星绑定click事件
$("#rank_pic img").click(function(){
//算出评分值
var pfz=($(this).prevAll().length+1)/2;
//获取当前内容的id在内容页可以获得内容页的主表和附加表的字段!
var id={dede:field.aid/};
//使用ajax技术
$.ajax({
type:"get",
url:"{dede:field name='phpurl'/}/pinfen.php?type=pinfen&id="+id+"&pfz="+pfz,
success:function(msg){
//alert("收到结果是"+msg);
$("#rank").html(msg);
}
});
});
</script>
思路:两个星星表示一分,所以需要用(length+1)/2
第一个方法:鼠标滑过将前面的星星全部设置为黄色星星,两种情况一种是左半边星星替换,一种是右半边的星星替换,然后将后面的星星也替换成灰色星星,不设置数据交互
第二个方法:鼠标点击提交数据到服务器,/plus/pinfen.php这里使用了全局变量{dede:field name='phpurl'}
其中phpurl是根据副本之前的模板的源码知道它是指向插件的目录,所以看源码是非常重要的,包括在公司里面一些标签是公司内部定义的:
<small>点击:</small>
<script src="{dede:field name='phpurl'/}/count.php?view=yes&aid={dede:field name='id'/}&mid={dede:field name='mid'/}" type='text/javascript' language="javascript"></script>
次</div>
可以看到如果我们遇到类似的问题就可以看之前公司的实现类似功能的源码!
前端代码:
<li>用户评分:<font id="rank"><script src="{dede:field name='phpurl'/}/pinfen.php?type=getfen&id={dede:field name='id'/}" type='text/javascript' language="javascript"></script></font> 分 (共有<font id="rank_num">...</font>人评分)</li>
可以动态的获取数据库的评分;
服务器代码:
<?php
require_once(dirname(__FILE__)."/../include/common.inc.php");
//这里去完成评分任务
$pfz=$_GET['pfz'];
$aid=$_GET['id'];
if($type=="getfen"){
$sql="SELECT pfz from dede_addonmovie where aid=$id";
$row=$dsql->GetOne($sql);
//如果获取到了分数就可以将代码传到前台并且写入html文件
if(is_array($row))
{
echo "document.write('".$row['pfz']."');\r\n";
}
//下面是对电影进行评分,就是update操作
}else if($type=="pinfen"){
$sql="UPDATE dede_addonmovie set pfz=$pfz where aid=$id";
$dsql->ExecuteNoneQuery($sql);
//更新成功后,我们需要计算这个评分值我简化为以最后一个评分为准
$sql="SELECT pfz from dede_addonmovie where aid=$id";
//取出数据库中的值,这里在工作时,需要看源码或者手册,
$row=$dsql->GetOne($sql);
//这里通过$row[0]
//返回结果的原因是前台的ajax通过获取数据通过jq将分数更改成返回的结果,这样评分就会产生联动的效果!
echo $pfz;
}
解读服务器源码:其中引入common.inc.php文件可以使用全局变量,$dsql就是一个全局性的对象,然后可以执行sql语句,之后利用getOne就可以获取结果,
获取分数的时候需要使用插件里面的php文件动态获取而不是使用dede标签的原因:
因为dede是全站静态化的,如果数据库评分即使更新数据,再次刷新页面是不会变化的,因为需要在后台重新生成一下,但是如果是通过src动态获取的就不一样了
因为刷新的时候就会查询数据库,将评分显示在界面上,如果不这样做的话,就会出现点击评分就会发生变化,但是再次刷新页面,这样分数会变成原来的样子,
根据之前的模板文件点击率是将数据发送到插件count.php我们来看下这个文件的规律,只有把这个文件研究清楚了就可以模拟了!可以看到查询操作是用GetOne方法
而更新操作是用ExecuteNoneQuery,所以这个归宿到数据库Curd都是不一样的,所以这个都是层次之间的映射!
9.下载地址由于是以一个非常多个信息存储在数据库的一个字段中,所以需要考虑一些专门的函数来处理这个下载地址,那么就需要自己在文件include/extend.func.php写扩展函数:
然后根据扩展函数处理dede标签得到的字段:{dede:field.download function='format(@me)'/}扩展函数如下:
/*
返回下载地址HTML的函数
*/
function format($str1){
//其实已经拿到了,我们使用var_dump看到了
//知识点1,字符串换行是有一个符号,windows下换行符是"\r\n",linux下面是\n
//首先统一一下换行符号;
$str1=str_replace("\r\n","\n",$str1);
$arr1=explode("\n",$str1);
//遍历$arr1
//$val1就表示一行数据(一个完整的下载地址)索引记录
//arr3是一个三维数组,arr3[n][]是一个二维数组传值传二位,每一行下载记录是一次传入!
$arr3=array();
foreach($arr1 as $k1=>$val1){
//继续explode
$arr2=explode("|",$val1);
//如果第四次和第一次都是3gp那么$arr3[3gp][]=二维数组
//所以这样无论是穿插不同类型的格式输入还是任意增加不同类型都不会影响
//因为三维的第一个分类都是按照每个记录的第一个字段进行填充的,所以
//只会根据这个类型的多少来进行记录,是将每条记录看作是一个单元所以
//重复再多的单元也不会出问题的!$arr2[0]就是格式类型,$arr2[1]就是标题,$arr2[2]是分辨率,$arr2[3]:是下载地址!
$arr3[$arr2[0]][]=array(
'title'=>$arr2[1],
'fbl'=>$arr2[2],
'url'=>$arr2[3]
);
}
$res="";
global $ac;//dede提供了一个全局的Archives类对象实例
global $cfg_templets_skin;
//该对象实例可以取出
//var_dump($arr3);
//exit();
//下一步的工作是,通过$arr3来生成我们的HTML码
//$val3相当于是一个电影类型的所有下载地址
foreach($arr3 as $k3=>$val3){
$res.=
<<<HTMLSTR
<H2 id="downloadurls">{$ac->Fields['title']}{$k3}下载地址<font class="f1">温馨提示:一键下载功能可一次下载{$k3}格式所有分节电影!</font><span><a href="javascript:;" onclick="return d3gp()"><img src="{$cfg_templets_skin}/images/yijian_3gp.gif" border="0" /></a></span></H2>
HTMLSTR;
$res.="<div class=\"downurls\"><ul>";
foreach($val3 as $k=>$download){
//下面的才是具体的信息
$res.=<<<LISTR
<li><a href="http://www.a67.com/download/26059-0" title="魔侠传之唐吉可德01 3GP下载" target="_blank" rel="nofollow">{$download['title']}</a> (格式:{$k3} / 分辨率:{$download['fbl']})<span><a href="{$download['url']}" target="_blank" rel="nofollow">迅雷高速下载</a></span><span><a href="http://www.a67.com/download/26059-0" target="_blank" rel="nofollow">下载到电脑</a></span></li>
LISTR;
}
}
$res.="</ul></div>";
return $res;
}
10.自定义插件:
可以看到ask插件是以一个单独mvc的模式存在的,分为model和view,control文件夹,所以我们需要模仿ask插件写一个自己定义插件。
<a href="{dede:global.cfg_pl_dir/}/index.php?c=pinglun&a=listpl&aid={dede:field.aid/}"可以看到在模板中是首先在common.inc.php文件中
定义一个全局变量,
//cms系统的评论目录
$cfg_pl_dir = $cfg_cmspath.'/pinglun';然后利用c指定控制器和a指定对应的方法名,然后带上参数aid对
--------------------------------
#include <QtGui/QApplication>
#include <QLabel>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
QLabel *label = new QLabel("Hello, world!");
label->show();
return a.exec();
}
dede观看总结自己总结的更多相关文章
- dede使用方法----调用导航
在这里,极力推荐学习dede的朋友们观看老李的零基础织梦仿站系列课程的视频,讲的超级棒的~~ 网址链接是:http://www.dede888.com/15daylessons.html. 好了,言归 ...
- 关于开启.NET在线提升教育培训的通知! - 可在此页面观看在线直播!
年前在线公开课程通知: 近期在开启VIP课程,隔天讲一次,年前其它时间插空讲公开课,主题:设计模式系列 1:培训 - 大概不会讲的内容: 1:不讲系列. 2:不讲入门. 3:不讲我不懂的! 2:培训 ...
- 织梦多语言站点,{dede:include filename=''/}引入问题
织梦模板include插入非模板目录文件出现"无法在这个位置找到"错误的解决办法 以下是dede V55_UTF8 查dede include标签手册 (3) include 引入 ...
- dede织梦批量导入关键词
在后台替换对应的文件件即可. 注意:如果你的关键字长度超过16个字符的话,需要更改 dede 中 keywords 表中的keyword 字段字符长度 article_keywords_main.ph ...
- dede织梦cms-dede:autochannel标签
按排序位置的获取单个栏目的链接信息 >>dede>> {dede:autochannel partsort='' typeid=''}{/dede:autochannel} & ...
- dede 简略标题调用标签
一.简略标题调用标签: 1.{dede:field.shorttitle/} 不可以在{dede:arclist}标签中套用,一般放在网页titile处; 2.[field:shorttitle/] ...
- DEDE 常用的调用方法
DEDE织梦常用的调用常规调用: 网站名称调用:<title>{dede:global.cfg_webname/}</title> 网站关键词调用:<meta name= ...
- 如何去掉dede列表推荐时标题被加粗
dede在列表推荐文章默认为加粗不清楚的可以看图: 那个加黑的是默认的.如果你不想要被加黑,可以做如下改动.在include里找到文件:arc.listview.class.php查找并删除(注释掉也 ...
- 如何让{dede:channel}有子栏目显示子栏目,无子栏目不显示同级栏目
我们在使用织梦系统制作网站时经常会遇到网站栏目较多,显示当前栏目下的二级与三级栏目时,使用栏目嵌套标签,但是当三级栏目为空时,会显示同级栏目.从用户体验角度出发,常理情况下也是需要空白的,即二级栏目下 ...
随机推荐
- C#中的函数式编程:序言(一)
学了那么久的函数式编程语言,一直想写一些相关的文章.经过一段时间的考虑,我决定开这个坑. 至于为什么选择C#,在我看来,编程语言分三类:一类是难以进行函数式编程的语言,这类语言包括Java6.C语言等 ...
- Python 常用命令
对Python进行软件的安装.卸载和查看,是我们在日常工作中经常要做的事情,有的时候会突然忘记常用的命令,所以在此记录下来: pip 安装软件包 pip install xxx 卸载软件包 pip u ...
- Unity中List的随机排序(乱序)
为什么要给List排序做一个Unity限定条件呢 首先,是C#中的List泛型,若是Java,直接调用Collection.shuffle()就OK了 而Unity的C#版本较低,不能使用Random ...
- UML系列图2
时序图: 用例图:
- python中干掉tornado的连接失败日志
用了tornado真的是比较舒服,很多事都为你做好了. 但也有不令人满意的地方--对于我这个洁癖来说,自动给我的控制台打印不受我控制的信息是不能忍受的. 连接到一个新的地方,如果失败,tornado会 ...
- AngularJs踩过的坑
1. 使用checkbox和radio时, 不能使用ng-model直接绑定原始对象, 需要绑定一个对象的某个子属性, 才能把值绑定到scope <label><input type ...
- String类详解
看了很多文章事实证明之前的通过new创建String对象只有一个是错误的,实际上创建一个或者创建两个对象,一个在堆区,一个在常量池,当常量池中已经存在就不会创建.看了一篇非常好的文章http://ww ...
- Jdk1.7+eclipse搭建Java开发环境
Jdk1.7+eclipse搭建Java开发环境 1. 下载jdk1.7 http://www.oracle.com/technetwork/java/javase/downloads/jdk7 ...
- 在nuxt中加入element-ui插件遇到的问题
gen1.首先进入nuxt的官网跟着步骤实现内容. https://zh.nuxtjs.org/guide/plugins 2.在我们的项目目录中找plugin 根据图片中的表示引入内容: impor ...
- linux小白成长之路2————yum安装火狐浏览器
1.使用终端: CentOS左上角:应用程序>收藏>终端  2.使用root权限安装软件: 输入:sudo -i 输入密码(上篇安装linux虚拟机时设定的登录密码,也是超级管理员密码) ...