模板制作教程:模板技巧
自定义网站表单/全局表单提交样式
网站表单提交界面如果使用{$myfield}等标签时会自动输出系统默认的表单域样式,在实际网站中如果开发者需要改变默认样式怎么办?
例如下图的样式:
1、这是默认表单中的form代码
{php extract(dr_get_form_post_value('liuyan'))}调试信息:{$debug}
2、删除需要默认变量,并替换成自己的表单输入框代码
{php extract(dr_get_form_post_value('liuyan'))}调试信息:{$debug}
3、表单输入框代码格式要求,其name值必须和默认表单保持一致,例如
那么自己的表单代码就可以写成:
当前栏目高亮写法
判断栏目高亮原理是栏目变量catids数组存储的是此栏目的id集合,开发者可以利用当前栏目id是否存在于这个集合中来判断高亮,例如:
{if in_array($栏目id号, $循环体前缀字母.catids)} active{/if}
共享栏目判断高亮:
{category ********} 在循环体中判断当前栏目高亮显示 {if IS_SHARE && $catid && in_array($catid, $t.catids)} active{/if} {/category}
独立栏目判断高亮:
{category module=news ********} 在循环体中判断当前栏目高亮显示 {if MOD_DIR == "news" && $catid && in_array($catid, $t.catids)} active{/if} {/category}
当前已登录用户
在模板标签中显示当前已经登录的用户信息:
{if $member} 会员名称:{$member.username} 会员邮箱:{$member.email} 手机号码:{$member.phone} 真实姓名:{$member.name} 其他字段:{$member.字段名称} 会员头像:{$member.avatar} 是否是后台管理员:{$member.is_admin} 用户组id:{print_r($member.groupid)} 数组id号 显示加入了哪些用户组: {loop $member.group $tt}用户组ID:{$tt.id} 级别名称:{$tt.group_level} 用户组名称:{$tt.group_name} 有效期:{dr_date($tt.stime)} ~ {dr_date($tt.etime)}
{/loop} 是否是后台管理员:{if $member.is_admin} 是管理员 {/if} // 属于哪个管理员角色组,例如角色组8888 {if $member.is_admin && \Phpcmf\Service::M()->table("admin_role_index")->where("roleid", 888)->where("uid", $member.id)->counts()} 账号属于888这个管理员组中 {/if} {else} 没登录 {/if}
用户组申请按组设计模板
默认情况下的用户组申请界面的模板是:apply_index.html
在一些项目中可能会有这种需求:不同的用户组申请时可以设置不同的模板
那么设置方式是:
例如给用户组(8)单独设置一套申请时的模板
访问用户组申请界面:index.php?s=member&c=apply&m=index&gid=8
默认界面是这样:
这个默认界面调用的是:apply_index.html模板
现在复制apply_index.html改名为apply_8.html,8表示用户组id号,然后在改这个模板内容就可以实现用户组8单独的申请模板了
比如在新模板上加一些显示的内容等等:
当前模板属于哪种页面
在当前页面中判断当前属于哪种类型的页面,比如是否是首页,是否是栏目页等
以下方法只适用于动态和伪静态页面,不适合纯静态页面。
判断是否是首页
{if $indexc} 是 {/if}
-----判断栏目页----
判断是共享栏目页
{if IS_SHARE && \Phpcmf\Service::L('Router')->uri() =="category/index"} 是 {/if}
判断是否是共享栏目页
{if IS_SHARE && \Phpcmf\Service::L('Router')->uri() =="category/index"} 是 {/if}
判断是否是独立模块news的栏目页
{if MOD_DIR == "news" && \Phpcmf\Service::L('Router')->uri() == MOD_DIR."/category/index"} 是 {/if}
-----判断内容页----
判断是否是内容页
{if \Phpcmf\Service::L('Router')->uri() =="show/index"} 是 {/if}
判断是否是共享模块内容页
{if IS_SHARE && \Phpcmf\Service::L('Router')->uri() =="show/index"} 是 {/if}
判断是否是独立模块news内容页
{if MOD_DIR == "news" && \Phpcmf\Service::L('Router')->uri() ==MOD_DIR."/show/index"} 是 {/if}
判断是否是独立模块首页
{if $indexm} 是 {/if}
通过uri的方式判断页面
\Phpcmf\Service::L('Router')->uri() 获取当前url的uri地址
-----判断搜索页----
{if $is_search_page} 这是搜索模板 {/if}
-----判断模块---
{if MOD_DIR=="news"} 这是news模块 {/if}
通过前端jq插件 infinite-scroll 实现ajax瀑布流加载
ajax瀑布流加载方案 有两种 一种是官方提供的
https://www.xunruicms.com/doc/534.html
另外一种便是通过我这种前端 jq插件 实现的 下面说方法
列表的调用案例
- class="listbox" 对应下面的 container: ".listbox",
{list action=module module=news page=1 pagesize=10 urlrule=index.php?page=[page]}
- {$t.title} class="item" 对应下面的 item: ".item", {/list}
下载 jq插件 infinite-scroll (在下面附件下载) 代码放在list循环之后
至此已经完成 案例请查看 http://poscms4.ew98.com/wenzhang
代码下载也可以自行百度下载
在模板中读取本模板有哪些可以使用的变量
在模板中读取本模板有哪些可以使用的变量,仅限于模板文件中使用,****.html:
{var_dump($this->_options)}
这个标签是输出当前模板可用的变量,比如输出格式为:
{$上面的打印参数作为变量}
示例:
1、打印格式如果是这样:
那么模板标签变量就可以写成:
{$member.id} 输出为1 {$member.email} 输出为 上栗的邮件地址
把序列号1变成01,2变成02,自动保留两位
把序列号1变成01,2变成02,自动保留两位的模板写法技巧
例子中以$key作为序号变量
例1:比如变量是从1开始的写法:
{$key}
补0写法为:
{str_pad($key, 2, '0', STR_PAD_LEFT)}
例2:比如变量是从0开始的写法:
{$key+1}
补0写法为:
{str_pad($key+1, 2, '0', STR_PAD_LEFT)}
多级栏目导航循环显示
多级栏目导航循环显示效果是:鼠标放在栏目导航上面,会下拉显示第二级栏目列表,然后放在第二级栏目时会显示第三级栏目列表,等等
例如默认模板的写法是这样的:template/pc/default/home/header.html
这是调用共享栏目的分级语法:
{category module=share pid=0}
-
{category module=share pid=$t.id return=t2}
-
{$t2.name}
{if $t2.child}
-
{category module=share pid=$t2.id return=t3}
- {$t3.name} {/category}
{/category}
只写了第三层,开发者可以根据网站实际情况写第4、5、6、7、8、9层。
调用文章列表时判断指定时间加标记
1、比如在调用文章列表中,如果当前文章是今天更新的记录,就加一个new标记
{module **********}
{if date('ymd') == date('ymd', $t._updatetime)} 表示当天的文章 {/if}
{/module}
2、比如在调用文章列表中,如果当前文章是三天内更新的记录,就加一个new标记
{module **********}
{if (SYS_TIME - $t._updatetime) < 86400 * 3} 表示三天内的文章 {/if}
{/module}
3、比如在调用文章列表中,如果当前文章是7天内更新的记录,就加一个new标记
{module **********}
{if (SYS_TIME - $t._updatetime) < 86400 * 7} 表示7天内的文章 {/if}
{/module}
同一个网站内容以不同的模板来展示数据技巧
需求场景:
网站多套模板时可以分别查看各个模板预览网站
方案一:以网站域名为识别对象
例如:主站域名是www.xr.com,站2的域名是www.xr2.com或者xr2.xr.com
例如主站域名是:www.xr.com,入口地址是:/www/wwwroot/www.xr.com/index.php
那么新模板预览网站例如是:
域名是:www.xr2.com,网站目录是:/www/wwwroot/www.xr2.com/
按照下方布局来摆放模板和风格!
index.php内容是
注意:每个目录的user.ini文件要删除掉
方案二:以网站目录为识别对象
例如:主站域名是www.xr.com,站2的域名是www.xr.com/xr2/
例如主站域名是:www.xr.com,入口地址是:/www/wwwroot/www.xr.com/index.php
那么新模板预览网站例如是:
域名是:www.xr.com/xr2/,网站目录是:/www/wwwroot/www.xr.com/xr2/index.php按照下方布局来摆放模板和风格!
index.php内容是
在模板调用时,如果用到{$t.url}类似这种url标签,需要做一次替换,否则url地址不会变好的!
{dr_rp($t.url, ROOT_URL, SITE_URL)}
后台模块内容列表状态属性技巧
设置自定义字段格式,让他在后台可以实时的选取存储值,可以作为状态调用
格式必须满足:
是|1 否|0
前端调用技巧:
{module module=news tjzt=1} 表示调用推荐状态的文章列表 {$t.title} {if $t.tjzt}推荐{/if} {/module}
栏目类型的调用
判断当前栏目类型是单页还是模块还是外链调用
栏目类型字段名称:
tid
值介绍:
0 单页 1 模块 2 外链
list.html和show.html表示当前栏目的调用方法:
{if $cat.tid==0} 单页 {elseif $cat.tid==1} 模块 {else} 外链 {/if}
循环体内的写法,直接修改前缀就行了
{if $循环前缀.tid==0} 单页 {elseif $循环前缀.tid==1} 模块 {else} 外链 {/if}
广告管理数据操作和创建思路
广告管理思路很简单,主要是用于后台录入一些图片和地址,前端来调用这些图片和地址
这种需求我们直接使用【网站表单】的知识来做;
如何创建【网站表单】? 方法就不重复写了,前面章节都有介绍。
本视频操作了网站表单建立【广告管理】功能,和前端如何去调用后台录入的广告数据,非常方便。
分页标签问题
分页三参数:
page=1 表示开启分页 pagesize=10 表示每10条数据开始分页 urlrule=xxx[page]xxx 表示下一页的url规则
通过这三个参数来构造分页功能
可选参数(v4.5.2支持):
firsturl=xxx 指定第一页的规则,如果不选使用urlrule参数来适配
可选参数(4.5.3支持)
maxlimit=999 只最大显示999条记录,如果本次查询非常多,可以设置这个参数来限定只显示999条
注意事项:
1、存在catid参数时,不能直接使用pagesize,pagesize和urlrule都会无效
{module module=product catid=9 pagesize=6 page=1 urlrule=wei-[page].html}
一旦出现catid参数时,这时候,系统会调后台栏目设置的分页规则了,也就是意味着一旦出现catid值,那么pagesize和urlrule就失效了。
那么,如何存在catid参数是,又让我的自定义pagesize和urlrule生效呢,
只需要加参数 sbpage=1,那么改写为:
{module module=product catid=9 pagesize=6 page=1 sbpage=1 urlrule=wei-[page].html}
2、存在catid参数+page=1时,不能使用num参数,num参数将会无效
3、存在page=1时,不能使用num参数,num参数将会无效
单独写上下页标签
需要写在循环标签之后 当前页码:{$page} 总页数:{$nums} 总条数:{$total} 下一页:{str_replace('{page}', min($page+1, $nums), $pagerule)} 上一页:{str_replace('{page}', max($page-1, 1), $pagerule)} 首页: ------如果循环标签规定了return=xxx,那么需要改成----- 当前页码:{$page_xxx} 总页数:{$nums_xxx} 总条数:{$total_xxx} 下一页:{str_replace('{page}', min($page_xxx+1, $nums_xxx), $pagerule_xxx)} 上一页:{str_replace('{page}', max($page_xxx-1, 1), $pagerule_xxx)}
将独立模块首页作为网站首页
以独立模块demo为例,一般情况下:
首页模板是:index.html
独立模块首页模板是:demo/index.html
有些需求想要实现把独立模块的首页(demo/index.html)作为网站的首页。
1、打开网站首页模板index.html
2、把模板代码改写成:
{php $ci->_module_init('demo');}{template "demo/index.html"}
这句话表示首页模板直接调用demo模块首页的的模板,实现直接调用独立模块首页了
把序列号key分页后继续累积值的读取方法
{$key} 在第一页自增到 分页数时,如果进入第二页 {$key}会从0开始标记,以下代码可以在第二页以后继续累加值。
例如,{$key+1}表示以下格式:
1
2
3
4
5
--第二页--
1
2
3
4
5
---------------------第二种情况--------------------------------------
实现类似下面的代码格式:
1
2
3
4
5
--第二页--
6
7
8
9
10
---
需要改成:
{php echo ($page>1 ? $key + (($page-1) * $pagesize) : $key) + 1;}
同时存在多个分页标签的写法
需求:在同一个页面可能同时存在多个分页时(本教程需要4.3.15及以上版本使用)
例如,此页面是首页,那么下一页的分页规则就是:,index.php?page=2&page2=2,index.php?page=2&page3=2,。。。。
标签写法为:
1、【index.php?page=2&page1=2】
{module module=news page=page1 pagesize=10 urlrule=index.php?page=2&page1=[page]}
2、【index.php?page=2&page2=2】
{module module=news page=page2 pagesize=10 urlrule=index.php?page=2&page2=[page]}
3、【index.php?page=2&page3=2】
{module module=news page=page3 pagesize=10 urlrule=index.php?page=2&page3=[page]}
如果是非首页其他页面时,需要改对应的分页规则就行,否则下一页就点不开了。
账号退出代码
用于退出当前账号的登录信息
方法一:如果加装过系统的js,直接使用退出函数即可
我要退出
方法二:如果没有加装系统的js,需要自己写ajax退出函数
我要退出 function dr_loginout() { $.ajax({type: "GET",dataType:"json", url: "/index.php?s=api&c=api&m=loginout", success: function(json) { var oss_url = json.data.sso; // 发送同步登录信息 for ( var i = 0; i < oss_url.length; i++){ $.ajax({ type: "GET", url:oss_url[i], dataType: "jsonp", success: function(json){ }, error: function(){ } }); } alert(json.msg); setTimeout('_window.location.href="'+json.data.url+'"', 2000); } }); }
内容置顶功能的实现方法
1、为内容模块创建模块字段,以article模块为例子
2、新建字段
3、创建radio字段:sfzd
4、返回到模块设置中,点击配置按钮
5、设置后台列表字段
往下拉
目的是让他显示在后台列表,方便控制
5、回到内容管理中
出现了方便点击的开关了
6、前端如何调用判断呢?
{module****标签中 加上参数 sfzd=1} 表示只调用置顶的内容 {module****标签中 加上参数 order=sfzd} 表示只调用置顶的内容排在前面循环
模块内容标题加粗功能的实现
1、为内容模块创建模块字段,以article模块为例子
2、新建字段
3、创建radio字段:shifoujiacu
4、返回到模块设置中,点击配置按钮
5、设置后台列表字段
往下拉
目的是让他显示在后台列表,方便控制
5、回到内容管理中
出现了方便点击的开关了
6、前端如何调用判断呢?
在循环中判断 {if $t.shifoujiacu==1}表示加粗的{else}普通的{/if} 内容详情界面判断 {if $shifoujiacu==1}表示加粗的{else}普通的{/if}
内外多层循环的注意事项(必须指定return)
当存在内外多层循环时必须指定return变量,例如:
{category **** } {module ****} {/module} {/category}
这样内外循环,就不对了,需要给他们指定return,来区分变量前缀,需要改成:
{category **** return=t1} {module **** return=t2} {/module} {/category} {$debug_t1}
一旦指定了return变量,那么循环体中的变量前缀也要发生改变,例如以前是$t.xxx需要改成 $t1.xx
侦探debug变量需要加上后缀,例如:{$debug_t1}
首页分页显示模块内容
首页进行模块内容分页显示,用到的标签是module,
{module module=news page=1 pagesize=10 urlrule=/index.php?page=[page]} {$t.title} {/module} {$pages}
这是很标准的写法,循环news模块内容列表,每页显示10条内容,下页地址格式是:index.php?page=2。
========伪静态模式=========
绝大部分站点下页都会才有伪静态的模式,例如下页格式为:/page-2.html的写法:
{module module=news page=1 pagesize=10 urlrule=/page-[page].html} {$t.title} {/module} {$pages}
这时候访问下页会出现404现象,需要手动写上解析规则,config/rewrite.php:
"page\-([0-9]+)\.html(.*)" => 'index.php?c=home&m=index&page=$1',
表单id属性已重复定义 (myform)
表单id属性已重复定义 (myform)
这种情况是一个页面出现了多个form,你需要改成把表单的ID改成不同的名字,例如
2
改为id="myform2",加上编号,然后下面的提交按钮也需要改
改成'myform2', 一一对应起来,多个表单框就改变其他数字
判断用户是不是管理员
分享判断用户是否是管理员的几个场景
判断指定用户是否管理员
示例1:在show.html内容页调用内容发布者是不是管理员
{php $user=dr_member_info($uid);} {if $user.is_admin} 是管理员 {else} 不是管理员 {/if}
如果是在循环标签内调用,只需将$uid改成$t.uid
判断当前登录用户是否管理员
前端模板中调用当前登录的会员
{if $member} {if $member.is_admin} 是管理员 {else} 不是管理员 {/if} {if $member.is_admin && \Phpcmf\Service::M()->table("admin_role_index")->where("roleid", 888)->where("uid", $member.id)->counts()} 账号属于888这个管理员角色组中 {/if} {else} 没登录,无法判断 {/if}
判断是否用户中心
判断当前页面是不是用户中心页面
{if IS_MEMBER}是的{/if}
单选字段Radio 设置默认选中项
创建了单选字段,发布内容时默认是没有选择任何选项的,如下图所示:
如果想默认就选中某个选项怎么办?
比如,默认就选择第3个
实现方法:
进入字段编辑界面,默认选中项填写第3个选项的值即可,如下图所示
保存后,再发布内容就可以看到默认选中了,如下图所示:
不知道在哪里进入字段修改界面?
参考文档:https://www.xunruicms.com/doc/451.html
如何关闭“余额支付”这个支付方式?
微信与支付宝支付越来越方便,很多项目就没必要有余额支付了。宸逸CMS该如何关闭余额支付呢?
这要分多种情况。
1、通用订单
如果是通用订单的付款是可以关闭的
只需在订单配置中关闭即可,如下图所示:
2、其它价格字段
如果是模块内容购买,就到价格字段编辑中关闭即可
3、购买用户组
购买用户组是的付款方式,是没有关闭余额支付的功能的,但也是有办法解决的。
直接上视频教程
图片解说:
关联字段Related和Members自定义模板
关联字段Related和Members自定义模板
模板文件解析:
1、弹窗选择界面,/dayrui/Fcms/View/api_related.html (Members是api_members.html)
2、发布时关联后的显示界面,/dayrui/Fcms/View/api_related_field.html(Members是api_members_field.html)
自定义模板文件方法,以Related字段为例(Members字段类似)
1、进入字段界面,我们设置一个名字,例如叫:guanlian
2、弹窗选择界面,复制文件/dayrui/Fcms/View/api_related.html 到新的文件名:
/dayrui/My/View/api_related_guanlian.html ,然后自己修改这个文件即可
---如果提示模板不存在时,需要再复制一份文件到:/dayrui/My/View/module或member/api_related_guanlian.html
3、发布时关联后的显示界面,复制文件/dayrui/Fcms/View/api_related_field.html 到新的文件名:
/dayrui/My/View/api_related_field_guanlian.html ,然后自己修改这个文件即可
过滤指定内容中图片视频空行等内容但保留换行-自定义过滤函数
在做企业网站时,常常需要在首页调用公司简介内容,最佳方案是直接调用公司简介栏目的详情内容,但内容中有可能插入了视频、图片、框架等等,首页只需要调用文字。
系统内置的dr_clearhtml会把换行也过滤掉,所以文字挤在一起不好看。
可以通过自定义函数来实现个性化过滤需求。
打开:config/custom.php
添加
~s','',$str); //过滤图片 $str = preg_replace('~
调用示例
调用栏目ID为1的栏目内容,过滤并截取600字
{dr_strcut(dr_reserve_text(dr_share_cat_value(9, 'content')), 600)}
效果如下:
过滤掉了图片、视频、空行的同时保留了换行,完美
外部网站调用CMS数据
在外部网站或者静态html页面上调用宸逸cms数据方法
1、在宸逸cms中开启开发者模式,index.php开启
2、然后访问宸逸cms首页,并查看源代码,如下图:
3、按照上图红线地址,创建一个模板
/template/pc/default/home/api/waibu.html
4、模板内容,随便写,你可以用标签查询news模块的数据,例如
{module module=news num=10} {$t.title}{/module}
5、然后在外部网站或者静态html页面加入以下代码,就可以读取到宸逸cms内容了
页面需要提前加载jquery
网店系统-商品列表与内容页面添加购物车
网店store系统,在商品列表页需要添加购物车功能。
第一步:
在列表页模板中引用商城必须JS
第二步:
循环列表中添加购物车按钮
加入购物车
这样就已经可以成功添加购物车了。
第三步:页面实时显示购物车数量
如果希望在页面实时显示购物车数量。
只需添加
0
自动调用当前栏目下的栏目模型字段
如果创建了许多“栏目模型字段”且栏目较多,且每个栏目划分的字段都不一样,那么在栏目列表页及内容详情页想要调用这些字段就比较麻烦。
分享如下自动判断当前栏目划分字段的调用方法
1、循环当前栏目划分的字段
{loop $cat['field'] $f} ... {/loop}
判断字段类型方便调用值
完整调用
show.html
{loop $cat['field'] $f} {php $fe= $ci->module['category_data_field'][$f];} {if $fe && $fe.fieldtype=="Text"} 文本字段:{$fe.name}:{$this->_options[$fe.fieldname]} {elseif $fe && $fe.fieldtype=="Radio"} 单选字段:{$fe.name}:{php $field = dr_field_options($ci->module['category_data_field'][$fe.fieldname]['id']);}{$field[$this->_options[$fe.fieldname]]} {elseif $fe && $fe.fieldtype=="Select"} 下拉选项:{$fe.name}:{php $field = dr_field_options($ci->module['category_data_field'][$fe.fieldname]['id']);}{$field[$this->_options[$fe.fieldname]]} {/if} {/loop}
循环列表中
{search ...} {loop $cat['field'] $f} {php $fe=$ci->module['category_data_field'][$f];} {if $fe && $fe.fieldtype=="Text"}文本字段:{$t[$fe.fieldname]}{elseif $fe && $fe.fieldtype=="Radio"}单选按钮:{php $field = dr_field_options($ci->module['category_data_field'][$fe.fieldname]['id']);}{$field[$t[$fe.fieldname]]}{elseif $fe && $fe.fieldtype=="Select"}{$this->_options[$fe.fieldname]} 下拉选项:{php $field = dr_field_options($ci->module['category_data_field'][$fe.fieldname]['id']);}{$field[$t[$fe.fieldname]]}{/if} {/loop} {/search}
前端模板引用框架内置图标库
CMS内置了 bootstrap-icons+Font Awesome 两套开源图标库,查看地址:你的域名/admin.php?c=api&m=icon
系统后台界面所有图标都是内置图标库的,有些应用插件都会用到内置图标库,比如【悬浮在线客服】的图标就是引用内置图标库的。
所以前端模板中可以自由选择引用内置图标库
在模板区添加即可。
英文时间输出 strftime
做英文网站时,可能需要调用英文的时间,如下图所示
下面分享下英文时间输出方法
一、时间显示函数
{strftime("显示参数", 时间戳数字)}
二、示例
{strftime("%A, %d. %B %Y %I:%M%p", $_updatetime)}
结果如下:
三、显示参数格式
%y 两位数的年份表示(00-99) %Y 四位数的年份表示(000-9999) %m 月份(01-12) %d 月内中的一天(0-31) %H 24小时制小时数(0-23) %I 12小时制小时数(01-12) %M 分钟数(00=59) %S 秒(00-59) %a 本地简化星期名称 %A 本地完整星期名称 %b 本地简化的月份名称 %B 本地完整的月份名称 %c 本地相应的日期表示和时间表示 %j 年内的一天(001-366) %p 本地A.M.或P.M.的等价符 %U 一年中的星期数(00-53)星期天为星期的开始 %w 星期(0-6),星期天为星期的开始 %W 一年中的星期数(00-53)星期一为星期的开始 %x 本地相应的日期表示 %X 本地相应的时间表示 %Z 当前时区的名称 %% %号本身
如何修改默认付款方式?
如何设置默认付款方式?
比如,英文站时将paypal付款方式设为默认
实现方法
只需在模板循环付款方式前面添加如下代码即可
{php $pay_default="paypal";}
如果是默认支付宝
{php $pay_default="alipay";}
添加位置
{php $pay_default="paypal";} {loop $pay_type $name $t}
判断是否开启第三方登录
根据判断显示登录按钮
1、QQ登录
1 2 3 | { if isset( $ci ->member_cache[ 'oauth' ][ 'qq' ][ 'id' ]) && $ci ->member_cache[ 'oauth' ][ 'qq' ][ 'id' ]} 已开启QQ登录 {/ if } |
2、微博登录
1 2 3 | { if isset( $ci ->member_cache[ 'oauth' ][ 'weibo' ][ 'id' ]) && $ci ->member_cache[ 'oauth' ][ 'weibo' ][ 'id' ]} 已开启微博登录 {/ if } |
3、PC微信登录
1 2 3 | { if isset( $ci ->member_cache[ 'oauth' ][ 'weixin' ][ 'id' ]) && $ci ->member_cache[ 'oauth' ][ 'weixin' ][ 'id' ]} 已开启PC微信登录 {/ if } |
4、微信公众号登录
1 2 3 | { if isset( $ci ->member_cache[ 'oauth' ][ 'wechat' ][ 'id' ]) && $ci ->member_cache[ 'oauth' ][ 'wechat' ][ 'id' ]} 已开启公众号登录 {/ if } |
各平台登录代码见文档:
https://www.xunruicms.com/doc/408.html
判断访客语言自动跳转(英文访客自动跳转到英文版)
判断访客浏览器环境,如果是英文,就自动跳转到英文版,日语就自动跳转到日语版。
实现方法
1、打开 config/hooks.php
在
\Phpcmf\Hooks::app_on('appname', 'cms_init', function() { // 在网站初始化之后,加载模板之前执行的程序,例如判断用户是否登录 // 获取浏览器语言设置 $language = $_SERVER['HTTP_ACCEPT_LANGUAGE']; // 判断是否包含英文语言代码 if (strpos($language, 'en') === 0) { // 如果是英文,则跳转到en.xxxx.com if ($_SERVER['HTTP_HOST'] != 'en.xxxx.com') { header('Location: http://en.xxxx.com'); exit; } } else { // 否则跳转到www.xxxx.com if ($_SERVER['HTTP_HOST'] != 'www.xxxx.com') { header('Location: http://www.xxxx.com'); exit; } } });