phpcms 字段生成详解析

phpcms V9 内容模型管理 【1】理解模型   模型,系统知识的抽象表示。既然抽象了,那就得脑补一下。大家都是面向对象设计的专业人员,类就很抽象的,对比类的定义想象一下模型的概念。   举个例子,一般新闻类的信息,都具有标题、内容、作者、来源、发布时间等属性。不论是国内新闻,还是国际新闻、基本都具有这些属性项。那么我们就可以把这些属性项模型化,在PHPCMS V9中我们理解成“内容模型”。   当然,为了构建多样性的网 阅读详情
<?php
//此文件主要根据caches/caches_model/caches_data/model_field_1.php文件中的模型字段来动态的生成表单
//路径:phpcms/caches/caches_model/caches_data/content_form.class.php文件,主要用来返回内容添加页面左侧动态生成的表单
//此类主要用来动态生成内容添加页面的所有表单:内容添加页面左侧表单不是直接写在html中的,而是通过程序动态生成的,现将其分析一下
//此文件需要参考:model_feild_模型ID.cache.php文件,因为通过后台 模型管理->字段管理 中所有已存在或新加的字段都会被缓存在这个文件中.
 
class content_form {
    var $modelid; //模型id 1-文章模型 2-图片模型 3-下载模型 ,不同的模型在添加内容时会动态生成不同的表单
    var $fields; //所有模型字段信息
    var $id;
    var $formValidator; //表单验证
 
    function __construct($modelid,$catid = 0,$categorys = array()) {
        $this->modelid = $modelid;
        $this->catid = $catid;
        $this->categorys = $categorys;
        $this->fields = getcache('model_field_'.$modelid,'model'); //此缓存文件主要用来缓存模型字        段信息
        $this->siteid = get_siteid();
    }
 
//此方法主要用来获取所有动态生成好的表单,以便于在前台循环显示
 
    function get($data = array()) {
        $_groupid = param::get_cookie('_groupid');
        $this->data = $data;
        if(isset($data['id'])) $this->id = $data['id'];
        $info = array();
        $this->content_url = $data['url'];
 
/**
* $this->fields:主要存放从model_field_模型id.cache.php文件中获取过来的所有模型字段信息
* $field:单个模型字段信息
*/
 
    foreach($this->fields as $field=>$v) {
        if(defined('IN_ADMIN')) {
        if($v['iscore'] || check_in($_SESSION['roleid'], $v['unsetroleids'])) continue;
        } else {
        if($v['iscore'] || !$v['isadd'] || check_in($_groupid, $v['unsetgroupids'])) contin        ue;
    }
/**
* 表单类型:formtype
* 对应 后台->模型管理->字段管理->类型
* 对应 content_form.class.php文件中方法的名称
* 对应 caches/caches_model/caches_data/model_field_模型id.cache.php文件中键名
* 注意:通过 后台->模型管理->字段管理->添加字段 ,添加的新字段都将被缓存到model_field_模型id.cache.php文件中 */
 
    $func = $v['formtype']; //表单类型
    $value = isset($data[$field]) ? new_html_special_chars($data[$field]) : ''; //表单值
    if($func=='pages' && isset($data['maxcharperpage'])) {
        $value = $data['paginationtype'].'|'.$data['maxcharperpage'];
    }
    if(!method_exists($this, $func)) continue;
 
/**
* 1.$func:假设模型字段名称为text,则会调用$this->text()方法
* 2.$this->text()方法会生成并返回一个text类型的表单,如:<input type="text" name="info['keywords']" value="">
* 3.后面程序会将生成的表单放到$info[][]二维数组中,前台只需要循环此数组即可将网页所有的表单都呈现出来
*/
 
    $form = $this->$func($field, $value, $v);
    if($form !== false) {
    //默认情况下此常量已经被定义了
        if(defined('IN_ADMIN')) {
    //基本信息字段:基本信息字段将在添加页面左侧显示
        if($v['isbase']) {
    //添加内容页面:左侧部分的表单名称
            $star = $v['minlength'] || $v['pattern'] ? 1 : 0;
            $info['base'][$field] = array('name'=>$v['name'], 'tips'=>$v['tips'], 'form'=>$            form, 'star'=>$star,'isomnipotent'=>                 $v['isomnipotent'],'formty            pe'=>$v['formtype']);
        } else {
    //添加内容页面:右侧部分的表单名称
            $star = $v['minlength'] || $v['pattern'] ? 1 : 0;
            $info['senior'][$field] = array('name'=>$v['name'], 'tips'=>$v['tips'], 'form'=            >$form, 'star'=>$star,'                  isomnipotent'=>$v['isomnipotent'],'for            mtype'=>$v['formtype']);
        }
    } else {
        $star = $v['minlength'] || $v['pattern'] ? 1 : 0;
        $info[$field] = array('name'=>$v['name'], 'tips'=>$v['tips'], 'form'=>$form, 'star'        =>$star,'isomnipote            nt'=>$v['isomnipotent'],'formtype'=>$v['formtype']);
         }
    }
}
return $info;
}
 
//text方法主要用来生成一个text类型的表单:<span class="tag"><</span><span class="tag-name">input</span> <span class="attribute">type</span>=<span class="attribute-value">"text"</span> <span class="attribute">name</span>=<span class="attribute-value">"info[]"</span> <span class="attribute">value</span>=<span class="attribute-value">""</span> <span class="tag">/></span>  
function text($field, $value, $fieldinfo) {
 
}
 
//textarea方法主要用来生成一个textarea类型的表单:<span class="tag"><</span><span class="tag-name">textarea</span> <span class="attribute">name</span>=<span class="attribute-value">"info[]"</span> <span class="tag">></span><span class="tag"></</span><span class="tag-name">textarea</span><span class="tag">></span>  
function textarea($field, $value, $fieldinfo) { 
 
}
 
//editor方法主要用来生成一个在线编辑器,如:ckeditor编辑器
function editor($field, $value, $fieldinfo) {
 
}
下面还有很多,我就不贴代码了!


比如说:要查看title模型字段生成的表单:
一、caches/caches_model/caches_data/content_form.class.php文件中:$form = $this->$func($field, $value, $v);
这行代码其实就是在调用:function title($field, $value, $fieldinfo){}//参数1:模型字段或表单字段名称,如title    参数2:模型字段或表单字段的值    参数3:模型字段相关信息函数如下:
function title($field, $value, $fieldinfo) {
    extract($fieldinfo);
    $style_arr = explode(';',$this->data['style']);
    $style_color = $style_arr[0];
    $style_font_weight = $style_arr[1] ? $style_arr[1] : '';
 
    $style = 'color:'.$this->data['style'];
    if(!$value) $value = $defaultvalue;
    $errortips = $this->fields[$field]['errortips'];
    $errortips_max = L('title_is_empty');
    if($errortips) $this->formValidator .= '$("#'.$field.'").formValidator({onshow:"",onfoc    us:"'.$errortips.'"}).inputValidator({min:'.$minlength.',max:'.$maxlength.',onerror:"'.    $errortips_max.'"});';
    $str = '<input type="text" style="width:400px;'.($style_color ? 'color:'.$style_color.'    ;' : '').($style_font_weight ? 'font-weight:'.$style_font_weight.';' : '').'" name="inf o['.$field.']" id="'.$field.'" value="'.$value.'" style="'.$style.'" class="measure-inp    ut " onBlur="$.post(\'api.php?op=get_keywords&number=3&sid=\'+Math.random()*5, {data:$(    \'#title\').val()}, function(data){if(data && $(\'#keywords\').val()==\'\') $(\'#keywor    ds\').val(data); })" onkeyup="strlen_verify(this, \'title_len\', '.$maxlength.');"/><in    put type="hidden" name="style_color" id="style_color" value="'.$style_color.'">
    <input type="hidden" name="style_font_weight" id="style_font_weight" value="'.$style_fo    nt_weight.'">';
    if(defined('IN_ADMIN')) $str .= '<input type="button" class="button" id="check_title_al    t" value="'.L('check_title','','content').'" onclick="$.get(\'?m=content&c=content&a=pu    blic_check_title&catid='.$this->catid.'&sid=\'+Math.random()*5, {data:$(\'#title\').val    ()}, function(data){if(data==\'1\') {$(\'#check_title_alt\').val(\''.L('title_repeat').    '\');$(\'#check_title_alt\').css(\'background-color\',\'#FFCC66\');} else if(data==\'0\    ') {$(\'#check_title_alt\').val(\''.L('title_not_repeat').'\');$(\'#check_title_alt\').    css(\'background-color\',\'#F8FFE1\')}})" style="width:73px;"/><img src="'.IMG_PATH.'ic    on/colour.png" width="15" height="16" onclick="colorpicker(\''.$field.'_colorpanel\',\'    set_title_color\');" style="cursor:hand"/>
     <img src="'.IMG_PATH.'icon/bold.png" width="10" height="10" onclick="input_font_bold()    " style="cursor:hand"/> <span id="'.$field.'_colorpanel" style="position:absolute;" cla   ss="colorpanel"></span>';
    $str .= L('can_enter').'<B><span id="title_len">'.$maxlength.'</span></B> '.L('characte    rs');
 return $str; //返回的html表单
 }
 
 
 二、title()函数中的$filedinfo其实就是:caches/caches_model/caches_data/model_field_1.cache.php文件中如下代码:


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
array (
 'fieldid' => '3',
 'modelid' => '1',
 'siteid' => '1',
 'field' => 'title',
 'name' => '标题',
 'tips' => '',
 'css' => 'inputtitle',
 'minlength' => '1',
 'maxlength' => '80',
 'pattern' => '',
 'errortips' => '请输入标题',
 'formtype' => 'title',
 'setting' => '',
 'formattribute' => '',
 'unsetgroupids' => '',
 'unsetroleids' => '',
 'iscore' => '0',
 'issystem' => '1',
 'isunique' => '0',
 'isbase' => '1',
 'issearch' => '1',
 'isadd' => '1',
 'isfulltext' => '1',
 'isposition' => '1',
 'listorder' => '4',
 'disabled' => '0',
 'isomnipotent' => '0',
 ),
生成如下表单




本文永久地址:http://blog.it985.com/6673.html
本文出自 IT985博客 ,转载时请注明出处及相应链
phpcms添加多文本属性字段_详细教程 一、打开phpcms\modules\content\fields\fields.inc.php文件,增加字段类型'tabletext'=>'信息表格',二、在phpcms\modules\content\fields目录下,新建文件夹tabletext。相关参数中表格列名必填,列名为表格每列的名称,一行代表一个列名。... 阅读详情

相关推荐

PHPCMS在表单提交之后对某一个字段进行二次联动并显示在前台提示语上

如上问题有的来自我自身项目开发,有的收集网站,有的来自读者…如有侵权,立马删除。再者,针对此专栏中部分问题及其问题的解答思路或步骤等,存在少部分搜集于全网社区及人工智能问答等渠道,若最后实在是没能帮助到你,还望见谅!并非所有的解答都能解决每个人的问题,在此希望屏幕前的你能够给予宝贵的理解,而不是立刻指责或者抱怨!如果你有更优解,那建议你出教程写方案,一同学习!共同进步。ok,以上就是我这期的Bug修复内容啦,如果还想查找更多解决方案,你可以看看我专门收集Bug及提供解决方案的专栏。

**My Coding Family** 1044

【phpcms-v9】缓存目录caches下的各个文件的作用

第一:caches/caches_commons目录下缓存文件: 1.caches/caches_commons/caches_data/category_content.cache.php: 所有栏目对应的站点ID 2.caches/caches_commons/caches_data/category_content_1.cache.php: 当前站点id下所有栏目的详

PHP在线开发笔记 2万+

PHPCMS 9.6.6 精简增强包:PHP8原生支持、H5全上传、UEditor 4.16深度集成、无SSO轻量部署

基于PHPCMS V9.6.6深度重构的生产就绪版,完整兼容PHP8与MySQL8+,默认启用HTTPS环境适配。系统目录精简为单一/CMS根路径,移除PHPSSO认证中心、Flash组件、视频库模块及在线升级功能,降低维护复杂度与安全风险。前后台全面响应式重写,登录页、锁屏页、内容管理页均适配移动端;所有上传场景(附件、头像、编辑器内图片/视频)统一采用HTML5原生方案,裁剪与缩略图生成也由H5实现。内置UEditor 4.16.1,支持自动下载并压缩远程图、本地图片一键上传、微信图文粘贴导入、Word

sea99的博客 294

mysql php $res 指针 值_结果集中的字段与指针操作

结果集中的字段与指针操作实例/***结果集中的字段与指针操作*/require'mysqli_connect.php';if($res=mysqli_query($db,"select*fromstafflimit5")){while($row=mysqli_fetch_assoc($res)){print_r($row);echo'';}echo'';echo...

weixin_32459211的博客 295

phpcms地区数据库表深入解析与应用

phpcms系统是一种基于PHP开发的内容管理系统,它为网站开发者提供了一种高效且灵活的方式来搭建网站和管理网站内容。系统具有直观的用户界面,使得内容的创建、发布和管理变得简单快捷。phpcms不仅支持传统的文本、图片内容管理,还提供了用户权限控制、模板定制、插件扩展等高级功能。广泛应用于企业官网、个人博客、电子商务网站等不同类型的网络平台。这一灵活性和易用性是phpcms受到众多IT从业者青睐的重要原因。

weixin_42311427的博客 1013

Sourcetree与Gitee的完美协作:从身份验证到推送成功的全流程指南

本文提供了一份详细的Sourcetree与Gitee协作全流程指南,重点解决身份验证失败、Git版本配置及远端仓库设置等常见问题。通过分步讲解,帮助用户掌握从克隆、提交到成功推送的完整操作,并整合了使用个人访问令牌进行身份验证等关键热词信息,确保Windows与MacOS用户都能顺畅完成代码管理。

m2n3b4v5c6的博客 709

phpcms自定义字段原理介绍

近几天由于php项目开发需求,对于php自定义字段了解了一些,刚开始有些摸不着头脑,后来经过几天的摸索逐渐发现这款cms的强大之处了,心里也逐渐的认为,那些插件也不过是依据phpcms自定义字段功能的一个扩展而已,可能说的有些粗略了,在此php爱好者小编表示完全没有对插件开发者轻视的意思,表示一下尊重,对于建站者来说用phpcms建站有些时候不免轻松容易了些,但是也是提高开发效率的最初执行把 接

vm021的博客 1072

深入解析docx4j:从Word到PDF的高保真转换实战

本文深入解析了如何使用纯Java开源库docx4j实现Word到PDF的高保真转换。针对中文环境,重点讲解了字体映射原理、Linux服务器字体部署方案,并提供了完整的代码示例和配置方法。同时,文章涵盖了表格、图片处理、性能优化及生产环境部署指南,帮助Java开发者构建稳定、可控的文档转换服务。

weixin_29237635的博客 672

[PHPCMS V9二次开发]自定义字段模型-文本组

PHPCMS V9,我们在做类似于酒店房型等类型的时候,需要用到文本组字段模型,但PHPCMS并未提供该模型。如下图所示效果: 展示效果如下: 步骤/方法 打开phpcms\modules\content\fields目录,复制文件夹downfiles,并改名为textgroups。 ...

he91-com 304

DSSAT模型建模教程

随着数字农业和智慧农业的发展,基于过程的作物生长模型(Process-based Crop Growth Simulation Model)在模拟作物对气候变化的响应与适应、农田管理优化、作物品种和株型筛选、农业碳中和、农田固碳减排等领域扮演着越来越重要的作用。现有版本V4.7能模拟27种主要农作物的生长发育和产量形成过程,被广泛应用于精细农业、水肥管理、气候变化、粮食安全、土壤碳周转、环境影响、农业可持续性、农业生态等诸多与农业生产和科研有关的领域。如果你是个模型入门者,这次将让你体验一键模拟的乐趣。

weixin_55561616的博客 1413

FlowPic实战:从流量到图像的端到端加密应用识别

本文深入解析了FlowPic技术如何将网络流量转化为图像,并利用CNN模型进行端到端加密应用识别。该方法通过分析数据包大小和时序信息生成流量图像,有效绕过加密内容,实现对视频、聊天、文件传输等应用的精准分类。文章提供了从流量抓取、图像生成到轻量级CNN模型设计与训练的完整实战指南,并探讨了在VPN、Tor等复杂场景下的应用与挑战。

weixin_29046035的博客 151

PHPCMS中模板中$forminfos循环输出表单的代码详解

PHPCMS中后台模型管理处设置模型定段后,内容发布处和信息管理发布处自动循环输出各字段,生成表单,代码如下: XML/HTML代码 table cellpadding="0" cellspacing="1" class="table_form">      caption>修改信息caption>      {loop $forminfos $field $info}

风达的专栏 4501

华为OD机试 - 字符串筛选排序 - 数组(Python/JS/C/C++ 双机位C卷 100分)

k如果大于字符串长度则输出最大ASCII码值的字母所在字符串的位置索引,如果第k个最小ASCII码值的字母存在重复 则输出该字母的最小位置索引。输入一个由N个大小写字母组成的字符串,按照ASCII码值从小到大进行排序,查找字符串中第K个最小ASCII码值的字母(k>=1)。k如果大于字符串长度则输出最大ASCII码值的字母所在字符串的位置索引,如果有重复字母则输出字母的最小位置索引。输出字符串中第k个最小ASCII码值的字母所在字符串的位置索引。第二行输入k ,k必须大于0 ,k可以大于输入字符串的长度。

学Java,找哪吒 1391

帝国、PHPCMS及织梦三款CMS比较

早期的文章管理系统,数据表字段模型都会内置好,按自己的思路,把文章模型、信息模型、图片模型都内置,然后用户根据需要,在设置栏目时选择不同的模型,实现不同的需求。然而这种内置模型字段的方式,不能很好的满足站长的各种个性化需求,所以各种CMS都推出了自定义模型和自定义字段的功能。 对于PHP程序员来讲,自定义模型实际是在数据库中建立一个新的数据表,然后添加不同的字段来记录不同的数据,自定义字段功

wzjemb的专栏 1万+

2024年厦门市第31届小学生C++信息学竞赛试题与解析(第一部分选择题1-10)

2024年厦门市第31届小学生C++信息学竞赛试题与解析(第一部分选择题1-10)

汉克老师的博客 106

基于Multisim/TINA的H桥电机驱动电路设计与仿真分析

摘要 本文基于Multisim/TINA仿真平台,对H桥电机驱动电路进行了系统设计与分析。研究重点包括H桥拓扑结构的工作原理、PWM调速控制方法以及两种驱动方案对比分析。通过光耦隔离驱动与IR2110专用驱动IC的仿真对比,验证了IR2110自举电路在高低侧驱动中的优势。仿真实验着重分析了死区时间对防止直通现象的关键作用,并建立了直流电机的R-L-E等效模型进行动态特性仿真。结果表明,采用IR2110驱动方案配合适当的栅极电阻和自举电容参数,能够实现电机的高效双向调速控制。本研究为实际电机驱动系统的设计提供

huanghm88的专栏 137

php不想修改字段,解决PHPCMS的字段无法修改的问题

在 PHPCMS 后台新闻模型里面新建了两个字段,添加、修改内容一般没有问题。但是,如果在高级设置里面添加了“转向链接”,再返回来修改,发现自定义的两个字段无法修改,其它字段都可以修改。只要使用标题转向链接,很多字段都是没办法修改的,包括图片缩略图,关键字等等,更不用说是自定义字段了。这是什么原因呢?解决办法很简单。找到 include/fields/content_input.class.php...

weixin_27066963的博客 236

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

phpcms 站点管理增加联系方式备案等字段等

准备好记事本或者dreamweaver或者其它文本编辑器 打开\phpcms\languages\zh-cn\admin.lang.php  PHPCMS的中文语言定义文件。 查找“site_management”大概在505行,在上面新建一行。 加入新建字段的名称 $LANG['contacts'] = 'Contacts'; //联系方式 $LANG['co

春雨品牌 1201

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

phpcms 生成自己定义模型表单的过程

PHPCMS有模型管理,定义好一个模型之后PHPCMS会自动生成一个编辑这个模型的内容的表单。看看PHPCMS是怎么做到这一点的。 首先找到表单页面的地址大致是这样的 /index.php?m=content&c=content&a=add&menuid=&catid=6&pc_hash=dVlnS2&pc_hash=dVlnS2 根据PHPCMSV9 乱解读 之 PHPCMS V9的MVC

Young 2254

phpcms万能字段的使用方法

今天想做一个单选的字段,里面要使用别的字段,于是研究了一下万能字段!刚开始使用的时候,在网上,论坛里找了好久,没发现一个贴子有针对万能字段的使用说明,官方的例子里也只有一个调用字段本身值的变量 {FIELD_VALUE}在字段设置里写上{IF}这样的标签无效.php代码也被安全过滤了.这时候我真的觉得万能字段,,还不如叫低能字段...这样的东西能实现什么?当时我就想,或者我可以改一下,让...

acugck6042的博客 284

phpcms 专题中添加字段

phpcms v9 专题添加自定义字段及其调用 第一步:在数据库 专题内容表 中添加字段“copyfrom” 一定要找对数据库!!!不然会报错的v9_special_content 第二步:找到 /phpcms/modules/special/templates/content_add.tpl.php 和         /phpcms/modules

齐枫的博客 1399

phpcms推荐位调用自定义字段

默认phpcms是无法使用推荐位调用自定义字段的,直接写{pc:content action=“position” posid=“30” catid=“24” order=“listorder DESC” num=“4”}的话不会出错,但就是无法调用数据,显示的是空白。 调用代码 01.{pc:content action=“position” posid=“30” catid=“24” orde...

温小畅的博客 466

【笔记(4)】PHPCMS URL规则

在phpcms中经常遇到列表页跳转问题,数据库中URL字段都是系统自动生成的,所以在建立栏目时要

听海Movie的专栏 2302

phpcms上传php文件,phpcms v9 表单添加文件上传字段单个文件上传功能

phpcms v9提供了强大的模型管理功能,可以自定义字段,更符合自己的业务逻辑,那么如何二开一个单文件上传功能呢,跟着我一步一步操作,实现你需求的业务逻辑。第一步 添加模型添加字段类型选项在模型添加字段的配置文件目录./phpcms/modules/content/fields/fields.class.php 约 23行 位置,插入一行'file'=>'文件上传',第二步 先复制一份...

weixin_39669147的博客 709
上一篇: phpcms自定义字段原理介绍
下一篇: SVN 无法通过windows installer服务安装此安装程序包
vm021
博客等级 码龄11年 6粉丝 16原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值