phpcms万能字段的使用方法
今天想做一个单选的字段,
里面要使用别的字段,
于是研究了一下万能字段!
刚开始使用的时候,在网上,论坛里找了好久,没发现一个贴子有针对万能字段的使用说明,
官方的例子里也只有一个调用字段本身值的变量 {FIELD_VALUE}
在字段设置里写上{IF}这样的标签无效.php代码也被安全过滤了.
这时候我真的觉得万能字段,,还不如叫低能字段...这样的东西能实现什么?
当时我就想,或者我可以改一下,让他增加一点别的功能.比如判断?
于是我找到了模型类文件,找到了万能字段的调用.
看来看去,发现一个很好玩的东西.
caches/caches_model/caches_data/content_form.class.php
约450行
这是缓存文件里面的万能字段解析
在这里面我们可以发现一个有趣的东西,
这才是万能字段叫万能的真正原因;
preg_match_all('/{FUNC\((.*)\)}/',$formtext,$_match);
这一句话,很多人都能看明白,正则查找;
然后,下面的循环就有趣了.
foreach($_match[1] as $key=>$match_func) {
$string = '';
$params = explode('~~',$match_func);
$user_func = $params[0];
$string = $user_func($params[1]);
$formtext = str_replace($_match[0][$key],$string,$formtext);
}
会PHP的兄弟也许看到这里就明白了,
万能字段之所以万能.是因为他可以调用外部函数;
你想实现什么东西,只要写一个函数,
像我之前有提过,能不能实现和帝国一样的那样,调用另外一个表里的某个字段作为这个表的字段值!
看到这个东西,我就想笑了,感情这是小儿科!
我的天啊,这么好用的功能.官方,论坛,竟然没有任何一个人出来告诉我们!
真是....太过份了!
好吧,我来给大家分享.
//-----------------------------------------华丽丽的分割线
下面说一下怎么使用这个东西.
我用一个简单的东西给大家做个解说.用万能字段调用类别为作为例子
你不要告诉我,类别可以直接使用,不用万能字段也可以..我说,我只是举例,会不会转弯.那是你自己的事了!
开始,
第一步,文章模型中先把类别字段禁用,----(禁用后再用万能字段调用出来 , 像个白痴?)
第二步,增加一个万能字段.字段名 就叫 mytype 字段别名,我的类别
表单内容写上 {FUNC(my_cal_type~~{FIELD_VALUE})}
其它随意
增加完成后,我们去内容里增加一个文章,你会发现报错!!!
错了吗?真的错了?
告诉你!没错,就是这样子的!因为我们还没有写对应的方法.!
下面是第三步,
打开自定义函数文件,
不知道在哪?我告诉你 在这里,这里,打开这里的这个文件.
哦,在这里 /phpcms/libs/functions/extention.func.php
在里面增加一个方法~等一下,我写好直接贴上来
加了类别之后,在自定义函数文件中写上下面的代码!
//万能字段获取类别例
function my_cal_type($typiid = 0){
$TYPE = getcache('type_content','commons');
$srt = "<select name=\"info[mytype]\" id=\"mytype\" >";
foreach ($TYPE as $value) {
if ($typiid == $value['typeid']) {
$srt.="<option value='{$value['typeid']}' selected = 'selected'>{$value['name']}</option>";
}else {
$srt.="<option value='{$value['typeid']}'>{$value['name']}</option>";
}
}
$srt.="</select>";
return $srt;
}
然后,刷新一下增加文章内容页再看看!
摘自:http://bbs.phpcms.cn/thread-868750-1-1.html
phpcms万能字段的使用方法的更多相关文章
- phpcms万能字段如何使用php方法
来自:http://www.tantengvip.com/2013/12/phpcms-php-function/ phpcms后台内容模块->模型管理->添加字段功能很强大,你只需在ph ...
- python_way day18 html-day4, Django路由,(正则匹配页码,包含自开发分页功能), 模板, Model(jDango-ORM) : SQLite,数据库时间字段插入的方法
python_way day18 html-day4 1.Django-路由系统 - 自开发分页功能 2.模板语言:之母板的使用 3.SQLite:model(jDango-ORM) 数据库时间字 ...
- 获取sqlserver数据库中所有库、表、字段名的方法
获取sqlserver数据库中所有库.表.字段名的方法 2009年03月12日 星期四 下午 12:51 1.获取所有数据库名: SELECT Name FROM Master..SysDatabas ...
- PowerDesigner中在生成的数据库脚本中用name列替换comment列作为字段描述的方法
1 PowerDesigner中在生成的数据库脚本中用name列替换comment列作为字段描述的方法如下, 依次打开Tools -- Execute Commands -- Run Script,运 ...
- java反射机制(访问私有字段和私有方法)
来自:http://tutorials.jenkov.com/java-reflection/private-fields-and-methods.html 尽管我们通常认为通过JAVA的反射机制来访 ...
- mssql sqlserver 给已存在表添加新的字段及字段备注的方法
转自:http://www.maomao365.com/?p=8102 摘要: 下文讲述向已存在表上添加新字段及字段备注的方法,如下所示: 实验环境:sql server 2008 R2 1. 添加新 ...
- 【译】7. Java反射——私有字段和私有方法
原文地址:http://tutorials.jenkov.com/java-reflection/private-fields-and-methods.html =================== ...
- 使用反射功能在Unity运行状态通过Inspector面板修改字段和调用方法
使用反射功能在Unity运行状态通过Inspector面板修改字段和调用方法 效果展示 一个很简单的组件脚本 运行状态在Inspector面板可以随便修改字段和调用方法 方法调用日志 设计由来 最近在 ...
- PHPCMS 修改后台路径简便方法
之前在网上找了很多关于修改phpcms后台路径的修改方法,但是都太繁琐(个人感觉),终于找到了一个相对简单的修改方法,在这里和大家分享一下,希望互相学习. 第一步:在网站根目录创建一个文件夹,以后就要 ...
随机推荐
- Leetcode201. Bitwise AND of Numbers Range数字范围按位与
给定范围 [m, n],其中 0 <= m <= n <= 2147483647,返回此范围内所有数字的按位与(包含 m, n 两端点). 示例 1: 输入: [5,7] 输出: 4 ...
- 【心无旁骛】vuex-typescript-example
我不惮以最大的赞美去赞美这样的项目,真的是非常有创意又有能力. 先放上我喜欢的这个项目的开源地址:https://github.com/gluons/vuex-typescript-example 我 ...
- leetcode 75 Sorted Colors
两种解法 1)记录0和1的个数 然后按照记录的个数将0和1重新放入原数组,剩下的补2 2)双指针left,right left表示0~left-1都为0,即i之前都为0 right表示right+1~ ...
- ACM中Java使用注意事项
1. String 类用来存储字符串,可以用charAt方法来取出其中某一字节,计数从0开始, 而不是像C/C++那样使用 []访问是每个字符. 2. 在主类中 main 方法必须是 public s ...
- VS2012与windos版本不兼容问题
昨天晚上加完班,想着把windows更新下.今天上午就发现再运行VS报错了,提示VS2012与windows版本不兼容,打开.sln文件后,VS自动关闭.错误如下: 查看后网上提示安装VS2012的一 ...
- DP学习之路(1) 01背包
动态规划是算法中一门很重要的思想,其通过对每一步的假设规划,不停的寻找最优最有利的解决方案,然后一步一步求解出来. 而01背包是其中最基本的一种dp思想,其题目一般为给定一个容量为V的背包,然后有n件 ...
- OpenCV cvReleaseImage把图像怎么样了?
cvReleaseImage(img)和free.delete相同,只是把该指针img所指的内存给释放掉,但并没有把img指针本身干掉,其地址仍然不变(非NULL),只是该地址对应的内存是垃 ...
- 再谈MFC学习——模态对话框的数据传递
学习c++的目的就是为了使用封装好的类.而最最经典的封装类当然是微软的MFC窗体程序类. 学习MFC编程之前要学习c++的主要知识,掌握c++的基本编程思想. 以下就看下我学习的MFC模态对话框的数据 ...
- HDFS体系结构概述
- CENTOS 7更换系统启动默认内核
本文不再更新,可能存在内容过时的情况,实时更新请移步原文地址:CENTOS 7更换系统启动默认内核: 环境: CentOS Linux release 7.6.1810 (Core) : 1.查看当前 ...