织梦CMS二次开发程序实例
- 格式:doc
- 大小:383.00 KB
- 文档页数:71
下面我们将通讲解一个留言本实例,来帮助你更好的掌握PHPCMS V9的二次开发流程。
并在开发过程中体验PHPCMS V9。
在此我们只做基本功能的演示,更多的功能开发,期待你的继续挖掘。
4.1需求分析本实例用PHPCMS V9基础功能开发设计一个留言本管理系统,要求如下:后台:可管理、回复、删除留言信息可控制留言是否前台显示可对留言系统配置设置选项,例如是否起用验证码,默认是否显示、是否允许游客留言等配置。
模块配置信息可多站点存储。
可批量管理所有未回复留言后台管理演示效果如下图所示:前台:根据后台模块配置选项,控制是否显示在线留言填写表单。
在线提交留言,根据后台配置选项,是否显示验证码,是否需管理员审核显示。
留言列表页,需根据后台配置每页条数进行分页。
前台演示效果如下图所示:4.2数据库和数据表的设计这里使用Mysql数据库来存储信息。
首先构建一个留言信息表 guestbook ,它有12个字段,即消息编号(gid),站点ID(siteid),标题(title),内容(content),回复内容(reply),回复状态(reply_status),会员ID(uid),会员姓名(username),审核状态(passed) ,留言时间(inputtime),回复人(replyer),回复时间(replytime)。
下面是创建该表的SQL代码:CREATE TABLE `phpcms_guestbook` (`gid` smallint(5) NOT NULL auto_increment,`title` char(80) NOT NULL,`content` text NOT NULL,`reply` text NOT NULL,`userid` mediumint(8) unsigned NOT NULL default '0',`username` char(20) NOT NULL,`gender` tinyint(1) unsigned NOT NULL default '0',`head` tinyint(3) unsigned NOT NULL default '0',`email` char(40) NOT NULL,`qq` char(15) NOT NULL,`homepage` char(25) NOT NULL,`hidden` tinyint(1) unsigned NOT NULL default '0',`passed` tinyint(1) unsigned NOT NULL default '0',`ip` char(15) NOT NULL,`addtime` int(10) unsigned NOT NULL default '0',`replyer` char(20) NOT NULL,`replytime` int(10) unsigned NOT NULL default '0',PRIMARY KEY (`gid`),KEY `hidden` (`hidden`,`gid`));4.3创建模块目录PHPCMS v9框架中的模块,位于phpcms/modules目录中每一个目录称之为一个模块,如果要创建一个模块,只要在 phpcms/modules 目录下创建文件夹并放入你的控制器类就可以了。
第八节二次开发后的织梦网站上传到虚拟空间一、突破dede标题长度60字节限制正确修改方法dedecms 对文章的标题长度作了限制,最长为60字节,这显然不够用。
下面是修改方法:1、进入dedecms后台,系统——系统基本参数——其他选项——文档标题最大长度——在这修改为200或更大(其实200应该是足够了)。
2、进入phpmyadmin,点击dede_archives 进入表——title——点击编辑——输入200 (根据需要调整)二、水印图片的设置:后台—系统设置三、修改连接数据库的密码:dedecms修改数据库的密码方法:站点根目录下-data-common.inc.php,修改用户名及密码即可四、文章下方的投票样式修改方法根目录—>include dedevote.class.php,打开修改相应的代码即可。
五、本地测试好的DEDE织梦程序怎么上传到新空间1、本地测试好的dede整个程序,将除intall文件之外的所有文件全部上传到FTP中。
2、将dede原始数据没有更改过的install文件夹上传到FTP中。
3、上传成功后,在地址栏中输入:http://域名/install/index.php,进行初始环境的安装,在安装过程中需要输入虚拟空间MYSQL数据的帐号及密码,其它选项自己设定即可。
安装成功。
4、将在本机使用的MYSQL数据库导出成独立SQL文件,登陆到虚拟空间的MYSQL管理界面,将本机数据库文件导入对虚拟空间中对应的数据库中。
5、导入完成,将install安装文件夹删除,将后台登陆文件夹改名:dede mycenter,测试网站即可。
六、上传到空间方法21.将二次开发的文件全部上传到虚拟空间,删除install/install_lock.txt2.更改install/index.php.bak 为index.php3.将install/index.html文件删除4.输入http://你的域名/install/index.php按向导操作即可。
织梦功能整理1、核心a)常用操作i.网站栏目管理ii.所有档案列表iii.等审核的档案iv.我发布的文档v.评论管理vi.内容回收站b)内容管理i.分类信息ii.普通文章iii.图片集iv.软件v.商品vi.专题管理c)附件管理i.上传新文件ii.附件数据管理iii.文件式管理器d)频道模型i.内容模型管理ii.单页文档管理iii.联动类别管理iv.自由列表管理v.自定义表单e)批量维护i.更新系统缓存ii.文档批量维护iii.搜索关键词维护iv.文档关键词维护v.重复文档检测vi.自动摘要|分页vii.TAG标签管理viii.数据库内容替换f)系统帮助i.参考文档ii.意见建议反馈iii.官方交流论坛2、模块a)模块管理i.模块管理ii.上传新模块iii.模块生成向导b)辅助插件i.插件管理器ii.挑错管理iii.百度新闻iv.文件管理器v.广告管理vi.友情链接vii.投票模块viii.bShare分享插件ix.站内新闻发布x.邮件订阅c)圈子管理i.分类设置ii.圈子列表iii.主题管理d)邮件订阅i.会员邮件管理ii.订阅期刊管理iii.订阅分类管理iv.群发期刊管理v.获取邮件地址vi.邮件列表管理e)问答管理i.栏目管理ii.问题管理iii.答案管理iv.幻灯片管理3、生成a)自动任务i.一键更新网站ii.更新系统缓存b)HTML更新i.更新主页HTMLii.更新栏目HTMLiii.更新文档HTMLiv.更新网站地图v.更新RSS文件vi.获取JS文件vii.更新专题HTML4、采集a)采集管理i.采集节点管理ii.临时内容管理iii.导入采集规则iv.监控采集模式v.采集未下载内容b)批量维护i.更新系统缓存ii.文档批量维护iii.搜索关键词维护iv.文档关键词维护v.重复文档检测vi.自动摘要|分页vii.TAG标签管理viii.数据库内容替换5、会员a)会员管理i.注册会员列表ii.会员级别设置iii.积分头衔设置iv.会员模型管理v.会员短信管理vi.会员留言管理vii.会员动态管理viii.会员心情管理b)支付工具i.点卡产品分类ii.点卡产品管理iii.会员产品分类iv.会员消费记录v.商店订单记录vi.支付接口设置vii.配货方式设置6、模块a)模板管理i.默认模板管理ii.标签源码管理iii.自定义宏标记iv.智能标记向导v.全局标记测试b)系统帮助i.参考文档ii.意见建议反馈iii.官方交流论坛7、系统a)系统设置i.系统基本参数ii.系统用户管理iii.用户组设定iv.服务器分布/远程v.系统日志管理vi.验证安全设置vii.图片水印设置viii.自定义文档属性ix.软件频道设置x.防采集串混淆xi.随机模板设置xii.计划任务管理xiii.数据库备份/还原xiv.SQL命令行工具xv.文件校验[S]xvi.病毒扫描[S]xvii.系统错误修复[S] b)支付工具i.点卡产品分类ii.点卡产品管理iii.会员产品分类iv.会员消费记录v.商店订单记录vi.支付接口设置vii.配货方式设置c)系统帮助i.参考文档ii.意见建议反馈iii.官方交流论坛。
标签篇adminname仅内容模板V55,V56,V57获得责任编辑名称基本语法{dede:adminname /}arclist全局标记V55,V56,V57获取指定文档列表基本语法{dede:arclist flag='h' typeid='' row='' col='' titlelen='' infolen='' imgwidth='' imgheight='' type='' orderby='' keyword='' limit='0,1'}<a href='[field:arcurl/]'>[field:title/]</a>{/dede:arclist}标签属性∙col:分多少列显示(默认为单列),5.3版中本属性可以通过多种方式进行多行显示∙row:返回文档列表总数(获取的总记录数)∙typeid:栏目ID,在列表模板和档案模板中一般不需要指定,在首页模板中允许用","分开表示多个栏目∙getall:在没有指定这属性的情况下,在栏目页、文章页模板,不会获取以","分开的多个栏目的下级子类∙titlelen:标题长度等同于titlelength∙infolen:表示内容简介长度等同于infolength∙imgwidth:缩略图宽度∙imgheight:缩略图高度∙type: 栏目类型image含有缩略图commend推荐∙orderby:文档排序方式∙keyword:含有指定关键字的文档列表,多个关键字用","分∙innertext:单条记录样式∙aid:指定文档ID∙idlist:提取特定文档(文档ID∙channelid:频道ID∙limit:(起始ID从0开始)表示限定的记录范围(如:limit='1,2' 表示从ID为1的记录开始,取2条记录∙flag:自定义属性值:头条[h]推荐[c]图片[p]幻灯[f]滚动[s]跳转[j]图文[a]加粗[b]∙noflag:同flag,但这里是表示不包含这些属性∙orderway:值为desc 或asc ,指定排序方式是降序还是顺向排序,默认为降序∙subday:表示在多少天以内的文档∙Limit和row 的优先级limit 优先∙关于图片显示,如果没有type属性那么所有记录都显示缩略图,没有缩略图的显示默认的,type属性值为image 时显示只带缩略图的记录,type属性值为commend时显示推荐的记录∙同一属性多次存在时,执行最后一个属性值arclistsg全局标记V55,V56,V57单表独立模型的文档列表调用标记基本语法{dede:arclistsg flag='h' typeid='' row='' col='' titlelen='' orderway='' keyword='' limit='0,1'}<a href='[field:arcurl/]'>[field:title/]</a>{/dede:arclistsg}标签属性∙row:返回文档列表总数∙typeid:栏目ID,在列表模板和档案模板中一般不需要指定,在封面模板中允许用","分开表示多个栏目∙titlelen:标题长度等同于titlelength∙orderwey:排序方向∙keyword:含有指定关键字的文档列表,多个关键字用","分∙innertext:单条记录样式(innertext是放在标签之间的代码)∙arcid:指定文档ID∙idlist:提取特定文档(文档ID)∙channelid: 频道ID∙limit:表示限定的记录范围∙flag:自定义属性值:头条[h]推荐[c]图片[p]幻灯[f]滚动[s]跳转[j]图文[a]加粗[b]∙subday:表示在多少天以内的文档∙arcpagelistask全局标记V55,V56,V57问答调用标签基本语法{dede:ask row='6' qtype='new' tid='0' titlelen='24'}<dd><span class="tclass">[<a href='[field:typeurl/]'>[field:tidname/]</a>]</span><span class="tlink"><a href="[field:url/]">[field:title/]</a></span></dd>{/dede:ask}标签属性∙row:调用条数∙qtype:排序类型commend 推荐、ok 表示已解决问题、high 高分问题、new 最新问题∙tid:栏目id,默认是全部∙titlelen:标题长度autochannel全局标记V55,V56,V57指定排序位置的单个栏目的链接基本语法{dede:autochannel partsort='' typeid=’’}{/dede:autochannel}标签属性∙partsort:栏目所在的排序位置∙typeid:获取单个栏目的顶级栏目bookcontentlist全局标记V55,V56,V57连载图书最新内容调用基本语法{dede:bookcontentlist row='12' booktype='-1' orderby='lastpost' author='' keyword=''} <table width="100%" border="0" cellspacing="2" cellpadding="2"><tr><td width='40%'>[[field:cataloglink/]] [field:booklink/]</td><td width='40%'>[field:contentlink/]</td><td width='20%'>[field:lastpost function="GetDateMk(@me)"/]</td></tr></table>{/dede:bookcontentlist}标签属性∙row:调用记录条数∙booktype:图书类型,0 图书、1 漫画,默认全部∙orderby:排序类型,当按排序类型为commend 表示推荐图书∙author:作者∙keyword:关键字booklist全局标记V55,V56,V57连载图书调用基本语法{dede:booklist row='12' booktype='-1' orderby='lastpost' author='' keyword=''}<a href='[field:bookurl /]'>[field:bookname /]</a><br />{/dede:booklist}标签属性∙row:调用记录条数∙booktype:图书类型,0 图书、1 漫画,默认全部∙orderby:排序类型,当按排序类型为commend 表示推荐图书∙author:作者∙keyword:关键字cattree全局标记V55,V56,V57调用树形类目基本语法{dede:cattree typeid='' catid='' showall=''/}标签属性∙typeid:顶级树id∙catid:上级栏目id∙showall:在空或不存在时,强制用产品模型id;如果是yes 刚显示整个语言区栏目树;为其它数字则是这个数字的模型的id∙Typeid 存在值表示获取该栏目同级的同类型分类树,catid 存在值获取该栏目下的分类树∙Catid 的优先级高于typeidchannel全局标记V55,V56,V57用于获取栏目列表基本语法{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}标签属性∙typeid:栏目ID∙reid:上级栏目ID∙row:调用栏目数∙col:分多少列显示(默认为单列)∙type:son表示下级栏目,self表示同级栏目,top顶级栏目(top 最高,只要有该值不管typeid 和reid 的值)∙currentstyle:应用样式∙channelartlist全局标记V55,V56,V57获取当前频道的下级栏目的内容列表标签基本语法{dede:channelartlist row=6}<dl><dt><a href='{dede:field name='typeurl'/}'>{dede:field name='typename'/}</a></dt> <dd>{dede:arclist titlelen='42' row='10'} <ul class='autod'><li><a href="[field:arcurl /]">[field:title /]</a></li><li>([field:pubdate function="MyDate('m-d',@me)"/])</li></ul>{/dede:arclist}</dl>{/dede:channelartlist}标签属性∙typeid:频道ID∙row:获取的栏目返回值demotag全局标记V55,V56,V57这仅是一个演示标签基本语法{dede:demotag /}feedback全局标记V55,V56,V57用于调用最新评论基本语法{dede:feedback}<ul><li class='fbtitle'>[field:username function="(@me=='guest' ? '游客' : @me)"/] 对[field:title/] 的评论:</li><li class='fbmsg'> <a href="plus/feedback.php?aid=[field:aid/]" class='fbmsg'>[field:msg /]</a></li></ul>{/dede:feedback}标签属性∙row:调用评论条数∙titlelen:标题长度∙infolen:评论长度flink全局标记V55,V56,V57用于获取友情链接基本语法{dede:flink row='24'/}标签属性∙type:链接类型∙row:链接数量∙titlelen:站点文字的长度∙linktype:链接位置内页∙typeid:所有类型,可以在系统后台[模块]-[友情链接]中的“网站类型管理”中查看∙flinktype全局标记V55,V56,V57用于获取友情链接类型基本语法{dede:flink row='24'/}标签属性∙row:链接类型数量∙titlelen:链接文字的长度group全局标记V55,V56,V57圈子调用标签基本语法{dede:group row='6' orderby='threads' titlelen='30'}<li><span><img style="visibility: inherit;" title="[field:groupname/]" src="[field:icon/]" /></span> <span><a href="[field:url/]" title="[field:groupname/]" target="_blank">[field:groupname/]</a></span></li>{/dede:group}标签属性∙row:调用条数∙orderby:排列顺序(默认是主题数)∙titlelen:圈子名称最大长度groupthread全局标记V55,V56,V57圈子主题调用标签基本语法{dede:groupthread gid='0' orderby='dateline' orderway='desc' row='12' titlelen='30'}<li><a href='[field:groupurl/]' target="_blank">[[field:groupname function="cn_substr(@me,10)"/]]</a><a href="[field:url/]" title="[field:subject/]" target="_blank">[field:subject/]</a>([field:lastpost function="GetDateMk('@me')"/])</li>{/dede:groupthread}标签属性∙gid:圈子id,默认为全部∙orderby:排序,默认为时间∙orderway:排序方向,默认是最新主题在前∙row:记录数∙titlelen:主题标题(subject)最大长度hotwords全局标记V55,V56,V57获取网站搜索的热门关键字基本语法{dede:hotwords /}标签属性∙num:关键词数目∙subday:天数∙maxlength:关键词最大长度∙infoguide全局标记V55,V56,V57分类信息的地区与小分类搜索基本语法{dede:infoguide /}infolink全局标记V55,V56,V57调用分类信息地区与类型快捷链接基本语法{dede:infolink /}json全局标记V57调用某个远程连接的json数据库基本语法{dede:json url='http://yoursite/json.php' cache=300}[field:id/]-[field:title/]<br/>{/dede:json}标签属性∙url:json数据地址∙cache:缓冲时间likearticle全局标记V55,V56,V57自动关连文档标签基本语法{dede:likearticle row='' col='' titlelen='' infolen=''}<a href='[field:arcurl/]'>[field:title/]</a>{/dede:likearticle}标签属性∙col:分多少列显示(默认为单列)∙row:返回文档列表总数∙titlelen:标题长度等同于titlelength∙infolen:表示内容简介长度等同于infolength∙mytypeid:手工指定要限定的栏目id,用,分开表示多个∙innertext:单条记录样式(指标签中间的内容)likepage全局标记V55,V56,V57调用相同标识单页文档基本语法{dede:likepage likeid='' row=''/}标签属性∙row:调用条数∙likeid:标识名∙likesgpage全局标记V55,V56,V57单页文档调用标签基本语法{dede:likespage row=''/}标签属性∙row:调用条数loop全局标记V55,V56,V57调用任意表的数据标签基本语法{dede:loop table='dede_archives' sort='' row='4' if=''} <a href='[field:arcurl/]'>[field:title/]</a>{/dede:loop}标签属性∙table:查询表名∙sort:用于排序的字段∙row:返回结果的条数∙if:查询的条件memberinfos全局标记V55,V56,V57文档关连的用户信息基本语法{dede:memberinfos mid = '' /}标签属性∙mid:用户IDmemberlist全局标记V55,V56,V57会员信息调用标签基本语法{dede:memberlist orderby='scores' row='20'}<a href="../member/index.php?uid={dede:erid /}">{dede:erid /}</a> <span>{dede:field.scores /}</span>{/dede:memberlist}标签属性∙row:调用数目∙iscommend:是否为推荐会员∙orderby:按登陆时间排序money 按金钱排序scores 按积分排序myad全局标记V55,V56,V57获取广告代码基本语法{dede:myad name=''/}标签属性∙typeid:投放范围,0为全站∙name:广告标识∙mynews全局标记V55,V56,V57站内新闻调用标签基本语法{dede:mynews row='' titlelen=''/}标签属性∙row:调用站内新闻数∙titlelen:新闻标题长度∙mytag全局标记V55,V56,V57用于获取自定义宏标记的内容基本语法{dede:mytag typeid='0' name=''/}标签属性∙name:标记名称,该项是必须的属性,以下2、3是可选属性∙ismake:默认是no 表示设定的纯HTML代码,yes 表示含板块标记的代码∙typeid:表示所属栏目的ID,默认为0 ,表示所有栏目通用的显示内容,在列表和文档模板中,typeid默认是这个列表或文档本身的栏目ID∙php全局标记V55,V56,V57调用PHP代码基本语法{dede:php}$a = "dede";echo $a;{/dede:php}productimagelistsoftmsg软件内容模板V55,V56,V57下载说明标签基本语法{dede:softmsg /}sonchannel全局标记V55,V56,V57子栏目调用标签基本语法{dede:sonchannel}<a href='[field:typeurl/]'>[field:typename/]</a>{/dede:sonchannel}标签属性∙row:返回数目∙col:默认单列显示∙nosonmsg:没有指定ID子栏目显示的信息内容∙sqlV55,V56,V57用于获取MySQL数据库内容的标签基本语法{dede:sql sql='' db='default'}[field:title/]{/dede:sql}标签属性∙sql:需要查询的sql语句∙appname: 默认为default,即当前dedecms的数据库,如果需要自定义,可以在data/tag/sql.inc.php中扩展,具体扩展方法查看配置文件头部说明tag全局标记V55,V56,V57TAG调用标签基本语法{dede:tag sort='new' getall='0'}<a href='[field:link/]'>[field:tag /]</a>{/dede:tag}标签属性∙row:调用条数∙sort:排序方式month,rand,week∙getall:获取类型0 为当前内容页TAG标记,1为获取全部TAG标记type全局标记V55,V56,V57表示指定的单个栏目的链接基本语法<a href="[field:typelink /]">[field:typename /]</a>{/dede:type}标签属性∙typeid:指定栏目IDvote全局标记V55,V56,V57用于获取一组投票表单基本语法{dede:vote id='' lineheight='22' tablewidth='100%' titlebgcolor='#EDEDE2' titlebackground='' tablebgcolor='#FFFFFF'/}{/dede}标签属性∙id:数字,当前投票ID∙lineheight:表格高度∙tablewidth:表格宽度∙titlebgcolor:投票标题背景色∙titlebackground:标题背景图∙tablebg:投票表格背景色。
本文实例讲述了dedecms5.7文章二次开发实现阅读全文功能的方法。
分享给大家供大家参考。
具体分析如下:阅读全文功能其实在很多的流行站点都有的,比如网易,新浪等,随着文章内容的增加,当一个页面有多个分页的时候,就会显示出这个“在本页阅读全文”的链接,点击这个链接之后出现的,将是这篇文章以没有分页出现的型式,那么在dedecms5.7如何在文章内容页添加阅读全文功能呢?这个阅读全文有什么用呢?说白了,也就是提高用户体验,下面让我们看看,怎么简单现实这个功能.修改文件:include/arc.archives.class.php注意:做任何修改前都要备份好原文件.第一步:打开include/arc.archives.class.php文件查找://issystem==-1往下大概145行找到:复制代码代码如下:$this->Fields['userip'] = $this->addTableRow['userip'];在下面一行添加:复制代码代码如下:$this->Fields['body2'] = $this->addTableRow['body'];第二步查找:复制代码代码如下:$this->dsql->ExecuteNoneQuery("Update `dede_archives` SET ismake=1 WHERE id='".$this->ArcID."'");在上一行添加以下代码:复制代码代码如下://阅读全文开始if($this->TotalPage > 1) {//用正则匹配把分页符去掉$this->Fields['body2'] = preg_replace('/# p#副标题# e#/U', '',$this->Fields['body2']);$this->SplitFields = explode("#p2222#",$this->Fields['body2']);$this->Fields['tmptitle'] = (emptyempty($this->Fields['tmptitle']) ? $this->Fields['title'] : $this->Fields['tmptitle']);$this->Fields['title'] = $this->Fields['tmptitle'];$this->TotalPage = count($this->SplitFields);$this->Fields['totalpage'] = $this->TotalPage;$TRUEfilenameall = $this->GetTruePath().$fileFirst."_all.".$this->ShortName;$this->ParseDMFields(1,0);$this->dtp->SaveTo($TRUEfilenameall);if($cfg_remote_site=='Y' && $isredir);$this->ftp->upload($localfile, $remotefile, 'ascii');}}//阅读全文结束第三步:查找获得静态页面分页列表,代码如下:复制代码代码如下:/*** 获得静态页面分页列表** @access public* @param int $totalPage 总页数* @param int $nowPage 当前页数* @param int $aid 文档id* @return string*/function GetPagebreak($totalPage, $nowPage, $aid){if($totalPage==1){return "";}//$PageList = "<li><a>共".$totalPage."页: </a></li>";$PageList = "";$nPage = $nowPage-1;$lPage = $nowPage+1;if($nowPage==1){$PageList.="<a href='javascript:void(0);'><</a>";}else{if($nPage==1){$PageList.="<a href='".$this->NameFirst.".".$this->ShortName."' target='_self'><</a>";}else{$PageList.="<a href='".$this->NameFirst."_".$nPage.".".$this->ShortName."' target='_self'><</a>";}}for($i=1;$i<=$totalPage;$i++){if($i==1){if($nowPage!=1){$PageList.="<a href='".$this->NameFirst.".".$this->ShortName."' target='_self'>1</a>";}else{$PageList.="<a class=\"here\" href='javascript:void(0);' target='_self'>1</a>";}}else{$n = $i;if($nowPage!=$i){$PageList.="<a href='".$this->NameFirst."_".$i.".".$this->ShortName."' target='_self'>".$n."</a>";}else{$PageList.="<a class=\"here\" href='javascript:void(0);' target='_self'>{$n}</a>";}}}if($lPage <= $totalPage){$PageList.="<a href='".$this->NameFirst."_".$lPage.".".$this->ShortName."' target='_self'>></a>";}else{$PageList.= "<a href='javascript:void(0);'>></a>";}$PageList.= "<a href='".$this->NameFirst."_all.".$this->ShortName."'>阅读全文</a>";return $PageList;}也就是在return $PageList 上一行添加了一行代码:复制代码代码如下:$PageList.= "<a href='".$this->NameFirst."_all.".$this->ShortName."'>阅读全文</a>";修改完成后,保存文件,更新一下页面就可以看到效果了.希望本文所述对大家的dedecms建站有所帮助。
这篇文章主要为大家介绍了dedecms实现任意页面调用当前会员信息的方法,是dedecms二次开发中非常常见的实用技巧,需要的朋友可以参考下本文实例讲述了dedecms实现任意页面调用当前会员信息的方法。
分享给大家供大家参考。
具体实现方法如下:1、在你需要调用的页面里面<head></head>之间加入代码如下:<script language="javascript" src="/include/dedeajax2.js"></script><script language="javascript" type="text/javascript">function CheckInfo(){var taget_obj = document.getElementByIdx_x('_userinfo');myajax = new DedeAjax(taget_obj,false,false,'','','');myajax.SendGet2("/member/ajax_loginuser.php");DedeXHTTP = null;}</script>2、复制\member\ajax_loginsta.php 更名为:ajax_loginuser.php这个名字,跟上面的myajax.SendGet2("/member/ajax_loginuser.php");/这一句名字一定要对应.3、在需要调用的页面的<body></body>里面写上<div id="_userinfo"></div>样式就自己写咯,写完后不要忘记写上下面这一句引用Js.代码如下:<script language="javascript" type="text/javascript">CheckInfo();</script><!--记住一定要和上面的function 声明值一致-->4、这里我就把ajax_loginuser.php的代码贴出来.代码如下:<?phprequire_once(dirname(__FILE__)."/config.php");AjaxHead();if($myurl == '') exit('');$uid = $cfg_ml->M_LoginID;!$cfg_ml->fields['face'] && $face = ($cfg_ml->fields['sex'] == 'Ů')? 'dfgirl' : 'dfboy';$facepic = emptyempty($face)? $cfg_ml->fields['face'] : $GLOBALS['cfg_memberurl'].'/templets/images/'.$face.'.png';?><div class="userinfo"><!--有没有发现这个和上面的div值一样,这个就是返回到网页显示的值,当然,是登陆成功后。
程序篇4.1、自定义模型使用教程在织梦系统中有内容模型这个概念,不同内容模型可以用来构建不同内容形式的站点,在系统中自带了以下几种模型:普通文章、图集、软件、商品、分类信息、专题。
通过系统自带的模型,我们可以用来构建不同类型的站点,例如:使用图集可以做一个图片站,用软件模型构建一个软件下载站点。
当然以上随系统附带的模型被称为系统模型,用户可以自己定义一些模型,比如图书、音乐专辑等,自定义了这些模型才可以构建更多内容形式的站点,本篇将讲述如何使用系统的自定义模型管理功能来实现内容模型的构建。
我们首先登录系统后台,点击[核心]-[内容模型管理],进入内容模型管理界面,如下图所示:这里我们介绍几个相关参数的概念:•ID号用于区分模型的唯一ID,一般常规模型的ID都是大于0的,比如普通文章、软件等,如果使用了单表模型,ID一般需要小于-1,例如这里的分类信息模型;•频道名称用于识别频道类型的标识;•识别id系统用于识别的id,这个关系到模板方面;•附加表系统内容附加表项;•模型类型分为系统类型和自动类型,系统类型为固化在系统中的内容模型,自动类型为用户可创建的内容模型类型;接下来我们开始介绍如何使用自定义模型管理来创建一个自己的模型,并且用于建设不同内容类型的网站中去。
这里我们介绍一些周边的内容,几个要用到的概念:•字段在数据库中,表的列称为字段,织梦系统也是如此,但更恰当的说法,存储某个内容信息单元,称为字段,例如标题、来源、作者等都是一个字段;•内容系统主表程序将一些公用字段存储在系统主表dede_archives,例如:标题、关键词、缩略图等,主表具体字段可以查询织梦帮助中心()的有关二次开发手册数据表部分的内容;•附加表不同内容模型对应不同的附加表,通常以dede_addon[识别ID]命名,附加表中存放的都是详细内容的相关字段(非公用),例如:文章内容(dede_addonarticle)、软件类型(dede_addonsoft)、图片集合(dede_addonimage)等;•单表独立模型存储时候不用到“主表+附加表”的结构形式,直接使用单个数据表进行存储内容数据,这样脱离主从表,减少主表数据服在开销,可以从很大程度上解决数据负载问题;明白了以上几个概念我们可以来学习如何来自己创建一个内容模型了。
使⽤VisualStudio对逐浪CMS进⾏⼆次开发使⽤Visual Studio对逐浪CMS进⾏⼆次开发Zoomla!逐浪CMS基于最新的微软Visual Studio 2013研发,优秀的⼯具保证优秀的功能与扩展⽀持性。
⾼级的⽤户可能需要进⾏⾃主的⼆次开发,作为开放性的软件内核,我们⽀持⾃由的进⾏⼆次开发,我们在下载了逐浪CMS 程序后(即发布的不含.cs的源码包),打开Visual Studio,选择菜单栏—⽂件—⽹站:选择逐浪CMS所在的⽂件夹,点击打开按钮:弹出提⽰框,点是好了,逐浪CMS已经打开,在Visual Stadio⽂件管理器的右⽅,我们可以看到逐浪CMS的⽬录结构与aspx⽂件(如下图所⽰)。
开发者在此界⾯,可以采⽤Visual Studio进⾏⾃由的⼆次开发,如增加⽂件夹、增加⽂件、调⽤数据库。
本教程中⽰范增加⼀个页⾯,并调⽤系统数据库直接输出在⾃定义的Default2.aspx⽂件上。
选中⽂件夹--右键—添加—Web窗体.(⽰例:为在3D这个⽂件夹下新建页⾯),页⾯⽂件名称输⼊Default2.aspx以上操作完成,我们就在3D⽂件夹下,建⽴了⼀个名为Default2.aspx的页⾯⽂件了。
有两个⽂件,⼀个为Default2.aspx(前台页⾯⽂件,放置html和asp控件),Default2.aspx.cs是后台⽂件,书写C#代码。
以上操作完成后,我们就可以通过http://地址:端⼝/3D/Default2.aspx访问这个页⾯了,如图.三,完成⼀个⽰例:从数据库指定表中获取数据,并在页⾯输出显⽰1,以上操作完成,我们就拥有⼀个空⽩页⾯了,下⼀步我们开始书写代码打开Default2.aspx.cs⽂件,在Page_Load中调⽤逐浪的内置函数,书写代码。
Defaul2t.aspx.cs中Default2.aspx中代码书写完成后,我们就可以在前台查看效果了。
dedecms二次开发总结1.后台所有目录在upload/dede2.后台大标题修改在upload/dede/inc/inc_menu.php3控制器有三个,例如ad_add.php ad_main.php ad_edit.php4.模板放在templets下面,名字跟模块名字相同,格式为htm5.在数据库中增加数据,直接写sql语句$query = "INSERT INTO #@__ad(ad_code,ap_code,ad_name,weight,ck_flg,lang_id,show_flg, position,dis_id,ad_info,ad_pic,bg_colour,font_colour,width,hei ght,ps_id,link_url)VALUES('$ad_code','$ap_code','$ad_name','$weight','$ck_flg','$ lang_id','$show_flg','$position','$dis_id','$ad_info','$ad_pic',' $bg_colour','$font_colour','$width','$height','$ps_id','$link_url ');";$dsql->ExecuteNoneQuery($query);ShowMsg("成功增加一个广告!","ad_main.php");exit();6.也可以放入一个数组中,然后处理$dsql->Execute('dd','SELECT * FROM `#@__myadtype` ORDER BY id DESC');$option = '';while($arr = $dsql->GetArray('dd')){$option .= "<option value='{$arr['id']}'>{$arr['typename']}</option>\n\r";}7.模板分配$dlist = new DataListCP();$dlist->SetTemplet(DEDEADMIN."/templets/ad_main.htm");$dlist->SetSource($sql);$dlist->display();8.模板输出{dede:datalist}<td>{dede:field.weight /}</td><td>{dede:ng_id function='lang(@me)'/}</td>{/dede:datalist}9.模板输出可以使用函数改变输出值,function='lang(@me)'.函数在模块中定义.10.用旧数据插入随即排练插入多条数据INSERT INTO t_device(`DV_CODE`,`LANG_ID`,`PT_ID`)SELECTDV_CODE, LANG_ID, PT_IDFROM t_adver_ap11.添加全选按钮,进行删除等操作,删除只能是删除本页全选的数据<a href="javascript:selAll()"class="coolbg">全选</a><a href="javascript:noSelAll()"class="coolbg">取消</a><a href="javascript:checkArc(0)"class="coolbg"> 审核 </a><a href="javascript:showArc(0)"class="coolbg"> 显示 </a><a href="javascript:delArc(0)"class="coolbg"> 删除 </a>js代码function selAll(){for(i=0;i<document.form2.arcID.length;i++){if(!document.form2.arcID[i].checked){document.form2.arcID[i].checked=true;}}}function noSelAll(){for(i=0;i<document.form2.arcID.length;i++){if(document.form2.arcID[i].checked){document.form2.arcID[i].checked=false;}}}//获得选中文件的文件名function getCheckboxItem(){var allSel="";if(document.form2.arcID.value) return document.form2.arcID.value;for(i=0;i<document.form2.arcID.length;i++){if(document.form2.arcID[i].checked){if(allSel=="")allSel=document.form2.arcID[i].value;elseallSel=allSel+"`"+document.form2.arcID[i].value;}}return allSel;}//获得选中其中一个的idfunction getOneItem(){var allSel="";if(document.form2.arcID.value) return document.form2.arcID.value;for(i=0;i<document.form2.arcID.length;i++){if(document.form2.arcID[i].checked){allSel = document.form2.arcID[i].value;break;}}return allSel;}function checkArc(ad_id){var qstr=getCheckboxItem();//if(aid==0) aid = getOneItem();location="ad_edit.php?qstr="+qstr+"&dopost=check";}function showArc(ad_id){var qstr=getCheckboxItem();//if(aid==0) aid = getOneItem();location="ad_edit.php?qstr="+qstr+"&dopost=show";}function delArc(ad_id){var qstr=getCheckboxItem();//if(ad_id==0) ad_id = getOneItem();location="ad_edit.php?qstr="+qstr+"&dopost=delete";}编辑模块代码if($dopost=='delete'){$qstrs = explode("`",$qstr);//print_r($qstrs);if( !empty($ad_id) && empty($qstr) ){$dsql->ExecuteNoneQuery("DELETE FROM `#@__ad` WHERE ad_id='$ad_id' ");ShowMsg("成功删除一则广告代码!",$ENV_GOBACK_URL);exit();}if($qstr==''){ShowMsg("请至少选择一个!",$ENV_GOBACK_URL);exit();}foreach($qstrs as $ad_id){$dsql->ExecuteNoneQuery("DELETE FROM `#@__ad` WHERE ad_id = '$ad_id' ");};ShowMsg("成功删除广告!",$ENV_GOBACK_URL);exit;}总结:写一个函数,获取全选的id值,然后各种按钮对应的操作以及传过去的值,这也写在一个js中,例如本例中delarc();然后在模块中根据各种情况进行操作,例如判断是从单个点击过来的,还是通过全选过来的.12.对于让select 选择后保持状态的问题最恨的招数就是把参数定死,然后在页面的对应选择框中加入如下代码<?php if ($_GET['ck_flg']==0) echo 'selected'; ?>这种情况用于进行搜索时候,默认值在数据库中没有值,但是你在一开始需要把所有结果都显示出来,(如果不加参数,会出现默认值为未审核,未审核的值为0)13.用以前模块改写时.容易出现问题,(我把广告管理改为应用管理),在插入数据库中时,始终改变不了类别,纠结了一晚上,原来是sql语句在修改时带上逗号或是丢了逗号,每回都那么巧,都有错,一定要细心.灵异事件发生,就要细心,细心,再细心!!!!14.如何在预览图片然后返回,一个办法是写链接时候target="_blank";另外一种办法就是先写个div,加载时候隐藏,然后用js控制,当点击原图片的时候,显示div,把这个div层的图片换掉,当再次点击,div又隐藏.控制层(定义一个函数)function MediaType($nurl){return "图片<a href=\"javascript:;\" onClick=\"ChangeImage('$nurl');\"><imgsrc='../include/dialog/img/picviewnone.gif' name='picview' border='0' alt='预览'></a>";}view层<style>.napisdiv{right:100px;top:200px;width:150px;height:100px;position:absolute ;z-index:3}</style><script>function ChangeImage(surl){document.getElementById("floater").style.display="block";document.getElementById('picview').src = surl; }function ChangeImages(surl){document.getElementById("floater").style.display="none";document.getElementById('picview').src = surl; }window.onload=hidediv;function hidediv(){document.getElementById("floater").style.display="none";}</script><div id="floater"class="napisdiv"><a href="javascript:;" onClick="ChangeImages('../include/dialog/img/picviewnone.gif');"> <img src='../include/dialog/img/picviewnone.gif'id='picview' name='picview'border='0'alt='单击关闭预览'style='z-index:10000'> </a></div><td>{dede:field.mediatype function="MediaType(@me)"/}</td>15.当数据库插不入数据的时候,检查两个方面,一个是sql语句是否错误,另一个是字段是否为非空.。
Dede二次开发程序详解(来自网上,摘录而成)调用说明:推荐会员(带用户头像)[quote]{dede:sql sql="SELECT mid,mtype,userid,uname,matt,faceFROM dede_memberwhere matt = 1 and mtype='个人'LIMIT 0 , 10"}头像:<img src="[field:face runphp='yes']if(!@me)@me = '/attachment/upload/87/11787.gif'; [/field:face]" />用户名:<a href='[field:global name='cfg_cmspath'/]/member/?[field:userid/]/'>[field:uname/]</a>{/dede:sql}[field:face runphp='yes']if(!@me)@me = '/image/post/smile/default/14.gif'; [/field:face]为用户头像图片[img]/attachment/upload/87/11787.gif[/img]是如果用户头像为空的话要显示的图像这个大家自己改吧[/quote]调用说明:会员积分排行[quote]{dede:sql sql="Select mid,userid,uname,scores From dede_member order by scores desc limit 0,10"}<dd><span class="name"><a href='[field:global name='cfg_cmspath'/]/member/?[field:userid/]/'>[field:uname/]</a></span><span class="jifen">积分[field:scores/]</span></dd>{/dede:sql}全部测试通过[/quote]这时需要通过dedecms后台中的ucenter模块进行Ucenter配置。
然后,在浏览器地址栏输入http://localhost/dede/login.php,打开后台管理登录界面,输入密码后进入dedecms后台管理。
dedecms后台管理界面的左侧导航栏,点击“模块”标签,注意下面的“UCenter模块”。
点击“UCenter配置”,进入以下页面。
“服务端地址“填:http://localhost/ucenter(本地机),创始人密码即是你在安装UCenter时设定的创始人密码;服务端IP地址填你的Ucenter安装的空间IP(本地机填127.0.0.1),输入后点“确认安装”。
出现安装成功提示。
退出dedecms管理后台,再次进入UCenter用户管理中心,这时我们会发现在“应用管理”中多了一项“我的网站”,并且显示的是“通信成功”了。
我们再通过浏览器访问http://localhost/uchome/index.php,用管理员的账号进入Uchome首页,点击“设置”进入另外一页,再点击右上角的“高级管理”,输入密码后点击“进入平台”进入高级管理平台。
在左侧导航栏的“高级设置”中找到一项“UCenter应用”点击进入。
在这里我们可以看到我们加入的三个应用,分别点击三个应用下面的“提交更新“。
退出管理界面,现在我们再回过头去测试一下看就可以同步了。
七、经验总结及疑问如果没有做到Dedecms、UChome、Discuz!中同时登录及退出的问题其关键就是在uchome中的“ucenter应用”中没有“提交更新”。
有时候安装dedecms、uchome或ucenter出现问题安装不了或出错等等,有的很多就是环境没有搭载好,所以我建议就安装dedecms提供的DedeAMPZForServer套件,至少在服务器的搭载上我们不需要花费太多的精力。
另外注意的是UCenter的配置。
比如“通信密钥”是否一致。
这个一般是导致 UCenter 与Dedecms、UChome、Discuz!等通信失败的主要原因之一。
这个密钥是可以自己随便写的,但要保证 UCenter 与 DIscuz 的密钥一致。
又比如“ID”。
查看 UCenter 后台的应用 ID 是否与Dedecms、UChome、Discuz!等后台的 ID 一致,如不一致,请修改各个应用后台的"UCenter 应用 ID"。
这个也是导致 UCenter 与 DIscuz 通信失败的主要原因之一。
关于UCenter的配置等这一点可以参考UCenter官方提供的说明手册。
功能:图书封面图片调用,含标题代码:<table border="0" width="100%" cellspacing="0" cellpadding="0"><tr>{dede:sql sql="Select id,bookname,author,pubdate,body,litpic From dede_story_books order by id desc limit 0,10"}<td><a href="/book/[field:idfunction=DedeID2Dir(@me)/]/[field:booknamefunction=GetPinyin(@me)/]-[field:id/].html"><imgsrc="[field:litpic/]" border="0" width="75" height="100" /></a><br /><a href="/book/[field:id function=DedeID2Dir(@me)/]/[field:bookname function=GetPinyin(@me)/]-[field:id/].html">[field:booknamefunction="cn_substr(@me,12)"/]</a></td>{/dede:sql}</tr></table>功能:最新连载内容调用,含栏目名称、书名、章节名、发布时间。
代码:<table width="688" border="0" cellpadding="0" cellspacing="0"> {dede:bookcontentlist row=10 booktype=0 orderby=lastpost author= keyword=}<tr><td align="left" width="30"></td><td width="300" align="left">[field:cataloglink/][field:booklink/]</td><td width="318" align="left">[field:contentlink/]</td><td width="40" align="right">[field:lastpostfunction="GetDateMk(@me)"/]</td></tr>{/dede:bookcontentlist}</table>功能:热门图书调用代码:{dede:booklist row=5 booktype=0 titlelen=10 imgwidth=80 imgheight=100 orderby=weekcc}[field:imglink /]{/dede:booklist}功能:推荐图书调用代码:{dede:booklist row=5 booktype=0 titlelen=10 imgwidth=80 imgheight=100 orderby=commend}[field:imglink /]{/dede:booklist}分类信息功能:调用地区与类型代码:{dede:infolink}<b>地区:</b>[field:nativeplace /]<br /><b>类型:</b>[field:infotype /]{/dede:infolink}功能:调用最新信息代码:{dede:arclistsg row=10 titlelen=32 orderby=pubdate channelid=-8 idlist=}[[field:typelink/]] [field:textlink/][field:pubdatefunction="MyDate(m-d,@me)"/]{/dede:arclistsg}功能:分类信息图片调用代码:{dede:arclistsg row=1 titlelen=30 flag=c,a infolen=80 orderby=pubdate channelid=-8 typeid=6 imgwidth=105 imgheight=137}<a href="[field:arcurl/]">[field:image/]</a><br/><ahref="[field:arcurl/]" >[field:title /]</a>{/dede:arclistsg}会员模块功能:分列显示,按积分排行,带头像。