首页
友情链接
精美壁纸
给我留言
更多
关于我
Search
1
uniapp Click点击事件冲突解决
4,884 阅读
2
【插件】UNI APP 实现商米打印机功能支持T1,T2,V2机型
4,881 阅读
3
【测试可用】个人码免签支付系统源码/免签支付系统/微信支付平台
3,064 阅读
4
Typecho七牛插件,为您的网站访问加速
1,716 阅读
5
windows10下docker:给已存在的容器添加端口映射的方法
1,583 阅读
Java
Spring Boot
Spring Mvc
Java基础
进阶知识
前端
uniapp
小程序/公众号
JavaScript
HTML/CSS
Vue
PHP
开源软件
商城
营销工具
开发工具
视频/教程
Discuz主题/插件
typecho主题/插件
SEO杂谈
数据库
MongoDB
MySQL
Redis
单片机
概念说明
电路相关
Python
devops
docker
k8s
linux
职场杂谈
登录
/
注册
Search
标签搜索
python
mysql
人人商城
php
java
docker
typecho
插件
微擎
seo
spring boot
discuz
队列
uni-app
phpcms
教程视频
开源系统
源码
工具
css
哈根达斯
累计撰写
111
篇文章
累计收到
167
条评论
首页
栏目
Java
Spring Boot
Spring Mvc
Java基础
进阶知识
前端
uniapp
小程序/公众号
JavaScript
HTML/CSS
Vue
PHP
开源软件
商城
营销工具
开发工具
视频/教程
Discuz主题/插件
typecho主题/插件
SEO杂谈
数据库
MongoDB
MySQL
Redis
单片机
概念说明
电路相关
Python
devops
docker
k8s
linux
职场杂谈
页面
友情链接
精美壁纸
给我留言
关于我
搜索到
111
篇与
哈根达斯
的结果
2021-06-28
Typecho控制台日志打印 实现Typecho系统二次开发log日志打印查看
本文主要讲解如何实现typecho博客系统实现控制台日志打印功能,方便开发者可以查看日志输入,便于开发者定位问题,并解决使用日志需要日志目录有可写权限。一、编写日志文件Logger.php作者已经在网上找了一个人家写好的日志文件类,感觉使用还是不错的,大家复制使用即可,如果喜欢复制的,可以在文章末尾下载本php日志类文件文件放置var/目录下,即var/Logger.php<?php /* * Logger 日志类 * @date 2016/12/21 * @author 300js * 简单快捷debug类 * 优点:少配置或零配置,支持任何格式数据记录,支持数G数据存储.支持在浏览或linux环境查看 * 配置: * 可以在外部更改的常量: * 支持html便捷浏览模式或纯txt查看,值html|txt defined('MINI_DEBUG_TYPE') or define('MINI_DEBUG_TYPE', 'html'); 调试模式,1可写,0不可写 defined('MINI_DEBUG_FLAG') or define('MINI_DEBUG_FLAG', 1); jquery 地址 defined('MINI_DEBUG_JSPAHT') or define('MINI_DEBUG_JSPAHT', 'http://cdn.bootcss.com/jquery/1.8.3/jquery.js'); debug 可写的目录设置,结尾一定要加 保证有可写权限 defined('MINI_DEBUG_PATH') or define('MINI_DEBUG_PATH', __DIR__ . DIRECTORY_SEPARATOR); * * 更改存储目录: define('MINI_DEBUG_PATH', __DIR__ . '/');//必须后面加斜杆 / Logger::log('err', 'myFlag'); * 存储不同的文件名: define('MINI_DEBUG_PATH', __DIR__ . '/'); Logger::setCacheFile(date('Y-m-di'));//无需设置文件后缀 Logger::log('err', 'myFlag'); * 更改存储格式: define('MINI_DEBUG_PATH', __DIR__ . '/'); define('MINI_DEBUG_TYPE', 'txt');//默认为html Logger::log('err', 'myFlag'); * 覆盖文件,相当将之前的数据删除,写入新的数据,可做清空数据用 define('MINI_DEBUG_PATH', __DIR__ . '/'); Logger::log(1, 'myFlag', false); */ class Logger { private static $config = array( 'isSetFixx' => false,//是否已追加后缀标识 'cacheFile' => 'debug',//缓存的文件名,无需设置后缀 ); private static $_cacheFile = ''; /** * 设置日志文件,可文件名,可加相对路径,无需设置后缀名称 * @param string $cacheFile */ final public static function setCacheFile($cacheFile) { self::$config['cacheFile'] = $cacheFile; } /** * 记录日志 * @param mix $data 数据 * @param string $memo 标识 * @param boolean $isPush 是否追加,默认true * @param string $titleStr title * @return boolean 成功与否 */ final public static function log($data, $memo = 'None', $isPush = true, $titleStr = '日志记录') { self::_setBaseParam(); return self::_baseLog($data, $memo, $isPush, $titleStr); } /** * 获取当前的缓存文件 * @return type */ final public static function getCacheFile() { return self::$_cacheFile; } /** * 基础的日志方法 * @param mix $data 内容 * @param string $memo 标识 * @param boolean $isPush 是否追求,默认true * @param string $titleStr Title * @return boolean|int */ private static function _baseLog($data, $memo, $isPush = true, $titleStr = '日志记录') { if(!MINI_DEBUG_FLAG) return false; $cacheFile = MINI_DEBUG_PATH . self::$config['cacheFile']; if(!$isPush) unlink ($cacheFile); switch (strtolower(MINI_DEBUG_TYPE)) { case 'txt': $str = self::_setFormatTxt($data, $memo); break; default: $str = self::_setFormatHtml($data, $memo, $cacheFile, $titleStr); break; } self::$_cacheFile = $cacheFile; try{ if($isPush) file_put_contents($cacheFile, $str, 8); else file_put_contents($cacheFile, $str); } catch (Exception $ex) { } return true; } /** * 设置html格式,可以浏览器上方便查看 * @param type $data 数据 * @param type $memo 标识 * @param type $cacheFile 缓存文件 * @param type $titleStr * @return string */ private static function _setFormatHtml($data, $memo, $cacheFile, $titleStr){ $DebugFilePath = $_SERVER["PHP_SELF"];//当前处理页面 $timespan = microtime(true);//时间戳 $sBlockHTML = "\n\n\n<div class='block' _k='".md5($memo)."' _l='".$memo."'><span style='display:none'><------orderIndex-------></span>"; /*判断是否存在头信息*/ $baseHtml = ''; if(!is_file($cacheFile)) { $baseHtml = self::_getBaseHtml(MINI_DEBUG_JSPAHT, $titleStr); } $str = ''; $str .= $baseHtml; $str .= $sBlockHTML; $str .= "<span class='no' style='color:blue;'>NO</span>:\n\n"; $str .= "<br/><span style='color:blue;'>Date</span>:\t".date("Y-m-d H:i:s")."\n"; $str .= "<br/><span style='color:blue;'>File</span>:\t".$DebugFilePath."\n"; $str .= "<br/><span class='memo' style='color:blue;'>Memo</span>:\t".$memo."<br>\n"; // $str .= "<span style='color:blue;'>Action:</span>:\t".$_SERVER['QUERY_STRING']."<br>\n"; $str .= "----------------------------------------<span class='infoswitch'><a href='javascript:void(0)' >展开/收起</a></span>\n<div class='info'>"; ob_start(); if(is_array($data)) print_r($data); elseif(is_string($data)) echo $data; else var_dump($data); $a = ob_get_contents(); ob_end_clean(); $str .= "<xmp>"; $str .= $a; $str .= "</xmp>"; $str .= "</div>\n<hr></div>\n\n\n"; return $str; } /** * 设置txt纯文本格式 * @param type $data * @param type $memo * @return type */ private static function _setFormatTxt($data, $memo) { $DebugFilePath = $_SERVER["PHP_SELF"];//当前处理页面 $str = ''; $str .= 'Memo:' . $memo; $str .= ' Time:' . date('Y-m-d H:i:s'); $str .= ' File:' . $DebugFilePath; $str .= PHP_EOL; ob_start(); if(is_array($data)) print_r($data); elseif(is_string($data)) echo $data; else var_dump ($data); $a = ob_get_contents(); ob_end_clean(); $str .= $a; $str .= PHP_EOL; return $str; } /** * 获取处理的js html * @param type $jsPath * @param type $titleStr * @return type */ private static function _getBaseHtml($jsPath, $titleStr) { $baseHtml = <<<___html <!doctype html><html><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /><title>{$titleStr}</title><script src="{$jsPath}" type="text/javascript"></script><style type="text/css"> body { margin: 0px; padding: 0px; height: 100%; } body, th, td { font-family: Tahoma, Verdana, Arial, Helvetica, sans-serif; font-size: 12px; color: #333; } </style></head><body><div id="tabs"></div></body></html> <script> $(function() { var _oMemo = {all:{label:'all', total:$("div.block").length}}; var j=1; $("div.block").each(function(){ if(typeof _oMemo[$(this).attr('_k')] == 'undefined') { _oMemo[$(this).attr('_k')] = {}; } if(typeof _oMemo[$(this).attr('_k')]['total'] == 'undefined'){ _oMemo[$(this).attr('_k')]['total'] = 1; _oMemo[$(this).attr('_k')]['label'] = $(this).attr('_l'); $(this).find(".no").html("NO:" + j); }else { _oMemo[$(this).attr('_k')]['total'] += 1; $(this).find(".no").html("NO:" + j); } j++; }); var sUl = ""; for(var k in _oMemo){ sUl += '<li><a _k="'+k+'" href="javascript:void(0)" >'+_oMemo[k]['label']+'('+_oMemo[k]['total']+')</a></li>'; } $('div#tabs').html("<ul>"+sUl+"</ul><div style=\"position:absolute;top:10px;right:20px;\" class='allinfoSwith'><a href='javascript:void(0)' >全部 展开/收起</a></div>"); $('div#tabs li a').click(function(){ var _showK = $(this).attr('_k'); if(_showK == 'all'){ var i = 1; $("div.block").each(function(){ $(this).find(".no").html("NO:" + i); i++; }); $('div.block').show(); }else{ $('div.block').hide(); $('div.block[_k="'+_showK+'"]').show(); var p = 1; $('div.block[_k="'+_showK+'"]').each(function(){ $(this).find('.no').html("NO:"+p); p++; }); } }); $('div.block span.infoswitch a').click(function(){ var _o = $(this).parents('div.block').find('div.info').eq(0); _o.toggle(); }); var allinfoSwithIndex = 0; $('div.allinfoSwith a').click(function(){ allinfoSwithIndex%2==0 ? $('div.info').hide() : $('div.info').show(); allinfoSwithIndex++; }); }); </script> ___html; return $baseHtml; } /** * 初使常量及判断 */ private static function _setBaseParam(){ /**支持html便捷浏览模式或纯txt查看,值html|txt*/ defined('MINI_DEBUG_TYPE') or define('MINI_DEBUG_TYPE', 'html'); /**调试模式,1可写,0不可写*/ defined('MINI_DEBUG_FLAG') or define('MINI_DEBUG_FLAG', 1); /**jquery 地址*/ defined('MINI_DEBUG_JSPAHT') or define('MINI_DEBUG_JSPAHT', 'http://cdn.bootcss.com/jquery/1.8.3/jquery.js'); /**debug 可写的目录设置,结尾一定要加 / */ defined('MINI_DEBUG_PATH') or define('MINI_DEBUG_PATH', __DIR__ . DIRECTORY_SEPARATOR); self::_setFileFixx(); } /** * 设置文件后缀 * @param type $cacheFile */ private static function _setFileFixx() { $_default_name = '_log'; if(stripos(self::$config['cacheFile'], 'debug') !== false) { $_default_name = ''; } $baseName = pathinfo(self::$config['cacheFile'], PATHINFO_BASENAME); if(strpos($baseName, '.') !== false && self::$config['isSetFixx'] == true) { return; } switch (strtolower(MINI_DEBUG_TYPE)) { case 'txt': self::$config['cacheFile'] .= $_default_name . '.txt'; self::$config['isSetFixx'] = true; break; default: self::$config['cacheFile'] .= $_default_name . '.html'; self::$config['isSetFixx'] = true; break; } } } 二、 include日志文件因默认框架不会自动加载文件需要在config.inc.php配置文件中加载文件日志,并定义相关配置常量1. 配置修改修改配置文件核心代码// 在24行出添加 // 定义日志文件类型:txt文本,html网页,建议开发使用网页,便于查看 define('MINI_DEBUG_TYPE', 'html'); // 定义日志文件目录 define('MINI_DEBUG_PATH', __TYPECHO_ROOT_DIR__ . '/logs/'); //在35行后添加 require_once 'Logger.php'; 三、日志使用可以在你需要输入日志的地方,使用日志// 参数1:日志内容,参数2:日志业务TAG Logger::log('测试日志','baidu'); //支持数组形式输出 Logger::log(array('url'=>'测试1','name'=>'淘宝'),'taobao'); 四、查看日志在浏览器中访问http://测试域名/logs/debug.html 即可查看日志内容五、 常见问题debug.html文件未生成答:需要检查logs日志目录是否存在需要开发者自己建目录,检查logs目录是否有读写权限六、 文件下载logger类文件下载地址{cloud title="Logger文件下载" type="bd" url="https://pan.baidu.com/s/1kex_meyPkca0dIEyuvBuQQ" password="8qpm"/}
2021年06月28日
660 阅读
0 评论
0 点赞
2021-06-27
npm新手使用教程
本文主要讲解前端构建工具npm的学习使用,旨在为初学者可以快速的进行使用,一、安装与初始化软件安装使用npm 需要安装nodejs,可到官网进行下载安装,安装推荐使用稳定版,下载后根据提示安装即可,本文不展开安装过程描述node下载地址: 点击去官网下载初始化git在使用 npm 之前,需要先对当前的目录进行初始化:npm init可以先运行 npm init -h 对init的参数做更详细的了解: npm init -h npm init Usage: npm init [--force|-f|--yes|-y|--scope] npm init <@scope> (same as `npx <@scope>/create`) npm init [<@scope>/]<name> (same as `npx [<@scope>/]create-<name>`) aliases: create, innit Run "npm help init" for more info 这里面提示 npm help init 可以看到更多的操作指南,就不赘述了。直接运行 npm init 的时候,会有一步一步的提示,让开发者输入相应的信息。之后在当前目录就会产生我们熟悉的 package.json 文件了。如果不想这么麻烦,可以直接 npm init -y 来跳过输入步骤。建议在进行 npm 初始化之前,先对目录做 git 初始化,这样的好处是,在 npm init 时, repo 项会自动填充为 git 的 origin 源。 git init git remote add origin git://xxxxx 初始化总结在使用 npm 之前,应当使用 npm init 对目录进行初始化,创建 package.json 文件。使用 npm init -y 来跳过初始化交互过程。建议先进行 git init ,并配置好 origin 源。二、包管理安装npm包执行命令 npm install <package-name> #也可以简写为 npm i <package-name> 同时安装多个包npm i <package1> <package2> <package3> ...安装全局包 npm install -g <package-name> 三、依赖层级包有两个依赖层级: 项目依赖 和 开发依赖 。项目依赖的意思是,当前项目发布运行需要该包支持,那么在使用 webpack 之类进行打包时,该包应当被打入到最后的package中。比如 react redux antd 之类。此类包会标记在 package.json 中的 dependencies 字段。开发依赖中的包,当前项目对其不应有运行依赖,一般都是围绕项目编译、打包、集成等做辅助工作的周边工具。比如 webpack 以及各种 babel 插件。此类包会标记在 package.json 中的 devDependencies 字段。当然,在项目打包期间,打包工具会做 treeshake 动作来晃掉未使用的包,但维护一个严谨的package依赖关系,应当是前端在管理项目时要重点关注的事情,更何况 treeshake 也是有局限的。安装项目依赖npm install <package-name> npm install <package-name> --save npm install <package-name> -S # 安装开发依赖 npm install <package-name> --save-dev npm install <package-name> -D 一个真实的 package.json 代码:{ ... "dependencies": { "@babel/core": "^7.14.6", "@babel/plugin-transform-react-jsx": "^7.14.5", "chalk": "^2.4.2", "commander": "^7.2.0", "md5": "^2.3.0", "watch": "^1.0.2" }, "devDependencies": { "@types/babel__core": "^7.1.14", "@types/md5": "^2.3.0", "@types/watch": "^1.0.1", "ts-node": "^10.0.0", "typescript": "^4.3.4" } }四、卸载包# 卸载项目依赖 npm uninstall -S <package-name> # 卸载开发依赖 npm uninstall -D <package-name> # 卸载全局包 npm uninstall -g <package-name> 五、全局包就像 webpack-cli 或者 create-react-app 之类的工具,当 npm 安装其为全局时,这些包可以被当成一个工具,在 bash 命令中直接运行。安装全局包有几个地方需要注意:安装位置是否在环境变量中做了配置?否则会无法执行。一些类似nvm的工具,会对 -g 的包按 node 版本进行安装,切换 node 版本之后可能会找不到该包,或者出现问题1的情况。Mac系统中,如果是从官网下载dmg包安装,在安装 -g 时需要 sudo ,同样 uninstall 也需要 sudo 。建议使用 Homebrew 安装 node 。像 webpack ts-node tsc 这些工具,可安装为项目的开发依赖,通过 npm 运行,不必安装为 -g 。这样做的好处是, 项目与开发环境解耦 。下面是在开发依赖中配置 ts 编译器、在 scripts.build 中对 ts 文件进行编译的例子: { "scripts": { "build": "tsc ./src/*.ts --esModuleInterop -d -t ES5 --lib es5 --outDir dist" }, "devDependencies": { "typescript": "^4.3.4" } } package-lock.json用来锁定安装包的版本号。这个文件有可能造成一些问题,比如锁定的低版本已经从 npm 源下线了。所以当对版本没有强要求,或者是对包作者足够信赖时,我一般会把这个文件放入 .gitignore 。而需要锁定的版本,直接在 package.json 中写死。六、关于版本号版本号中 ^ 字符,经测试是不会跳大版本的。比如 npm i webpack@^3 ,只会安装webpack3的最新版本,并不会安装webpack4甚至webpack5。如果想安装最新版本,使用 @latest 版本号npm i <package-name>@latest转载声明本文原文出处: https://juejin.cn/post/6976843799574085669
2021年06月27日
537 阅读
0 评论
0 点赞
2021-06-26
【实战篇】人人商城据库正删改查常用函数介绍七)
本章主要讲解微擎及人人商城数据库操作,学完后你可以学会对数据进行增删改查,进行业务逻辑代码编写数据库常用操作方法有:pdo_get、pdo_getall、pdo_getcolumn、pdo_getslice、pdo_insert、pdo_update、pdo_delete数据新增1.添加记录2.批量添加数据查询数据修改数据删除数据库事务其他tablename为了防止微擎系统的表与其它系统命名冲突,安装微擎时均会指定一个表前缀,在写SQL语句时,需要将表名称附加上表前缀。可以使用 tablename() 函数 $sql = "SELECT * FROM ".tablename('users'); echo $sql; //假设配置数据库表前缀为'ims_', 输入语句为'SELECT * FROM ims_users'
2021年06月26日
421 阅读
0 评论
0 点赞
2021-06-26
【实战篇】人人商城如何开发一个新功能【六】
本章节为大家讲解微擎框架下人人商城开发一个新功能。不管学习什么东西,动手实际会让大家更深入了解它,那我们今天就来动手亲自实现一个简单的功能,通过此功能你将了解如下几个知识点。人人商城控制器人人商城路由人人商城权限控制学习前提条件(TODO配图)已经学会php基本语法和mysql基本操作,并本地安装完成已经成本安装微擎框架及人人商城系统一、新增功能业务员信息门店收集,业务员可通过手机网页,录入门店信息。主要使用技术点:新建手机网页端信息收集后台可查询门店信息记录二、代码编写1. 新建业务表 CREATE TABLE `ims_ewei_shop_businesser` ( `id` int(10) NOT NULL AUTO_INCREMENT, `uniacid` int(10) DEFAULT NULL, `businesser_name` varchar(64) DEFAULT NULL COMMENT '业务员姓名', `businesser_phone` varchar(12) DEFAULT NULL COMMENT '业务员电话', `status` int(2) DEFAULT '1' COMMENT '状态1启用0禁用', `remark` varchar(255) DEFAULT NULL COMMENT '备注', `create_time` int(11) DEFAULT NULL COMMENT '创建时间', `openid` varchar(64) DEFAULT NULL, PRIMARY KEY (`id`) USING BTREE ) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8 ROW_FORMAT=COMPACT COMMENT='业务员表';2. 新建模型手机端控制器Controller公众号端控制器需继承MobilePage 控制器手机端访问路由:host.com/app/index.php?i=2&c=entry&m=ewei_shopv2&do=mobile&r=goods.detail&id=2 class Businesser_EweiShopV2Page extends MobilePage { //主页面 public function main(){ //业务逻辑代码 global $_W; global $_GPC; } //查询业务员门店信息 public function store_list(){ //业务逻辑代码 global $_W; global $_GPC; } } Web控制器ControllerPC运营后台端控制器需继承WebPage 控制器访问控制器:host.com/web/index.php?c=site&a=entry&m=ewei_shopv2&do=web&r=store.businesser class Businesser_EweiShopV2Page extends WebPage { //查询业务员列表 public function main(){ //业务逻辑代码 global $_W; global $_GPC; // 根据实际业务进行chax } } 三、菜单与权限运营后台需要设置菜单与权限ammin外的用户才能进行访问1. 菜单设置菜单设置addons\ewei_shopv2\core\model\system.php中684行代码左右开始,设置成功后可查看代码页面是否已经显示菜单。 array( 'title' => '业务员管理', 'route' => 'businesser' ) 2. 权限设置权限设置在文件addons\ewei_shopv2\core\com\perm.php中347行代码左右,设置成功后可查看权限列表是否以有权限'businesser' => array( 'text' => '业务员管理', 'main' => '查看列表', 'add' => '添加-log', 'edit' => '修改-log', 'view' => '查看', 'delete' => '删除-log' ),总结到这里我们就完成了简单人人商城功能新增。
2021年06月26日
532 阅读
0 评论
0 点赞
2021-06-26
【理论篇】人人商城微擎框架说明(五)
本章节开始步入开发篇阶段,本文主要为大家介绍微擎人们的一些一些基本内容,包含他的基本框架结构,目录介绍,以及文件说明,人人商城是基于微擎上做的开发,了解微擎的基础知识是十分必要的。框架目录微擎目录机构 we7 ├─ addons 模块安装目录(意为附加组件) │ ├─ business 模块的名称(示例) │ │ ├─ images 建议 css 文件也放此目录. │ │ ├─ template 模板目录 │ │ │ ├─ mobile APP 端模板目录 │ │ │ │ └─ ... *.html APP 端模板文件 │ │ │ └─ ... *.html Web 端模板文件 │ │ ├─ inc 引用的 php 文件目录 │ │ │ ├─ mobile Mobile端目录 │ │ │ │ ├─ xxx.inc.php 微站入口 │ │ │ │ └─ ... . │ │ │ └─ web Web端模板目录 │ │ │ ├─ xxx.inc.php 微站管理入口 │ │ │ └─ ... . │ │ ├─ icon.jpg 模块图标 │ │ ├─ preview.jpg 模块预览 │ │ ├─ manifest.xml 安装清单 │ │ ├─ module.php 模块设置 │ │ ├─ processor.php 消息处理 │ │ ├─ receiver.php 消息订阅 │ │ ├─ webapp.php PC版页面功能 │ │ ├─ wxapp.php 小程序接口功能 │ │ ├─ hook.php 嵌入点 │ │ └─ site.php 微站页面 │ └─ ... 其他扩展模块 ├─ api . │ └─ accesstoken.php 多系统共用accesstoken接口 ├─ attachment 附件文件夹 │ ├─ audios 音频附件文件夹 │ └─ images 图片附件文件夹 │ ├─ global 系统公共文件夹 │ │ └─ 上传年份 │ │ └─上传月份 │ │ └─ 随机文件名 │ └─ $uniacid ... 按公众号年月组织的图片文件 ├─ app 微站(Mobile)入口 │ ├─ common . │ │ ├─ bootstrap.app.inc.php . │ │ ├─ common.func.php . │ │ └─ template.func.php . │ │ └─ tpl.func.php . │ ├─ resource 微站资源文件 │ │ ├─ css 样式文件 │ │ ├─ fonts 字体资源 │ │ └─ js . │ ├─ source 控制器 │ ├─ themes 微站皮肤 │ │ ├─ default 系统默认 │ │ └─ ... 自定义皮肤 │ └─ index.php 微站入口 ├─ data . │ ├─ config.php 系统配置 │ └─ db.php . ├─ framework 微擎系统通用的工具类和方法 │ ├─ builtin 微擎内建模块 │ │ ├─ basic 文字回复模块 │ │ ├─ core 会话消息统计 │ │ │ └─ receiver.php . │ │ ├─ cover 通用封面回复 │ │ ├─ default 默认回复模块 │ │ ├─ music 音乐回复模块 │ │ ├─ news 图文回复模块 │ │ ├─ userapi 自定义接口回复模块 │ │ └─ ... . │ ├─ class 系统功能类 . │ ├─ function 系统功能函数 │ ├─ library 其他函数库 │ ├─ model 业务功能model │ ├─ table 数据库表model │ ├─ bootstrap.inc.php 核心文件 │ ├─ const.inc.php 常量定义文件 │ └─ version.inc.php 版本说明 ├─ payment 支付 ├─ web 后台管理(Web)入口 │ ├─ common 公用文件 │ │ ├─ bootstrap.sys.inc.php . │ │ ├─ common.func.php . │ │ ├─ frames.inc.php . │ │ └─ permission.func.php . │ │ └─ template.func.php . │ │ └─ tpl.func.php . │ ├─ resource 资源文件 │ │ ├─ components JS组件 │ │ ├─ css 样式文件 │ │ ├─ fonts 字体资源 │ │ ├─ home 后台客户端资源文件 │ │ ├─ images 图片文件 │ │ └─ js . │ │ ├─ app 系统js功能 │ │ ├─ lib js第三方库文件 │ │ └─ require.js . │ ├─ source 后台管理控制器 │ ├─ themes 后台管理视图 │ │ ├─ default 内建后台管理样式 │ │ └─ ... 定制界面样式 │ └─ index.php 后台入口 ├─ api.php 公众平台与微擎系统通信的接口 ├─ index.php 微擎入口 └─ install.php 微擎安装程序 入口执行流程多数入口文件都是问index.php,微擎目前执行执行入口文件,在入口文件中,会加载framework文件夹下,框架核心文件bootstrap.inc.php,那我们来see(看)see(kan)这个文件都干了什么勾当!加载其它文件核销文件中预加载了一些框架必要核心,包含但不限于如下配置文件data/config.php常量文件framework/const.inc.php类加载和方法加载文件framework/class/loader.class.php其它文件如下代码: load()->func('global');// 全局方法 load()->func('compat');//扩展兼容方法如json_encode,openssl_encrypt等 load()->func('compat.biz');//用户扩展方法 load()->func('pdo');//数据库CURD方法 load()->classs('account');//会员账户 load()->model('cache');//平台缓存 load()->model('account'); load()->model('setting'); load()->model('module'); load()->library('agent'); load()->classs('db'); load()->func('communication'); 给大家解释下这些方法加载的意思load()->func :加载framework/function下对应的*.func.php方法文件load()->model :加载framework/model下对应的*.mod.php方法文件load()->classs :加载framework/classs下对应的*.class.php类文件load()->library :加载framework/library下对应的第三方库文件2. 定义变量/常量比较常见的也是后续开发过程中都会用的$_GPC中保存web开发相关,$_W保存系统配置相关两个变路由约定及使用GET 参数中的 c、a、do为微擎系统的路由参数,应当避免与系统参数冲突,在程序中可以使用 $controller、$action、$do来获取对应的路由三个参数举例说明web客户端正常路由: http://w7.cc/web/index.php?c=site&a=entry&do=themeset上例子中为web下source/site文件夹中entry.ctrl.php文件,themeset执行方法,模块插件路由: http://w7.cc/web/index.php?c=site&a=entry&do=themeset&module_name=we7_demo 则会路由至 /addons/we7_demo/site.php 文件中的 doWebThemeset() 方法。app端正常路由: http://we7.cc/app/index.php?i=1&j=2&c=entry&a=wxapp&do=list 上例子中为web下source/entry文件夹中wxapp.ctrl.php文件,list执行方法,模块插件: http://we7.cc/app/index.php?i=1&j=2&c=entry&a=wxapp&do=list&module_name=we7_demo则会路由至 /addons/we7_demo/wxapp.php 文件中的 doPageList() 方法插件插件为微擎扩展的核心方式,后续介绍的人人商城也是作为微擎框架的插件做二次开发,主要目录为addons下,后面章节我们将为大家介绍如何开发一个简单微擎插件应用总结本文主要为大家介绍微擎的基础框架,以及入口文件执行流程,更多详细的内容还需要大家自己仔细的阅读源代码去理解。
2021年06月26日
737 阅读
0 评论
0 点赞
1
...
20
21
22
23