包含“F”的产品文档
业务系统开发文档>短信接口开发文档
fig.php (配置项客户配置项,在插件设置中显示) 三、开发流程以智简魔方官方短信平台接口为例:1、创建实名认证目录\public\plugins\sms\idcsmart\;①目录名以小写字母+下划线形式,必须以字母开头,如idcsmart; 2、创建入口文件:Idcsmart.php:①命名空间namespace sms\idcsmart(控制器下命名空间对应相应目录即可,其它同理);②以目录名大驼峰+.php,创建在短信接口根目录下,如idcsmart\Idcsmart.php;③文件中需要定义info属性,示例:# 基础信息public $info = array(    'name'        => 'Idcsmart',//Demo插件英文名,改成你的插件英文就行了    'title'       => '智简魔方',    'description' => '智简魔方官方短信平台接口',    'status'      => 1,    'author'      => '智简魔方',    'version'     => '1.0.1',    'help_url'     => 'https://my.idcsmart.com/goods.htm?id=922',//申请接口地址);④必须实现install()安装以及uninstall()卸载方法,没有额外操作,返回true即可;⑤需要实现以下方法方法名称描述参数返回getCnTemplate获取国内模板template_id:模板ID;config:自定义配置;示例:['template_id'=>1,'config'=>{}];status:状态,success成功,error失败;template.template_id:模板ID;template.template_status:模板状态,0未提交,1审核中,2通过,3未通过;成功示例:["status"=>"success","template"=>["template_id"=>"w3423","template_status"=>2]];失败示例:["status"=>"error","msg"=>"模板ID错误"]createCnTemplate创建国内模板title:模板标题;content:模板内容;config:自定义配置;示例:["title"=>"test","content"=>"测试内容","config"=>{"key"=>"value"}]status:状态,success成功,error失败;template.template_id:模板ID;template.template_status:模板状态,0未提交,1审核中,2通过,3未通过;成功示例:["status"=>"success","template"=>["template_id"=>"w3423","template_status"=>2]];失败示例:["status"=>"error","msg"=>"模板ID错误"] putCnTemplate修改国内模板title:模板标题;content:模板内容;config:自定义配置;示例:["title"=>"test","content"=>"测试内容","config"=>{"key"=>"value"}]status:状态,success成功,error失败;template.template_id:模板ID;template.template_status:模板状态,0未提交,1审核中,2通过,3未通过;成功示例:["status"=>"success","template"=>["template_id"=>"w3423","template_status"=>2]];失败示例:["status"=>"error","msg"=>"模板ID错误"] deleteCnTemplate删除国内模板template_id:模板ID;config:自定义配置;示例:['template_id'=>1,'config'=>{}];status:状态,success成功,error失败;成功示例:["status"=>"success"];失败示例:["status"=>"error","msg"=>"模板ID错误"] sendCnSms发送国内短信mobile:手机号;content:模板内容;config:自定义配置;template_id:模板ID;templateParam:模板参数,参考附表1示例:["mobile"=>"129483782423","content"=>"测试内容","config"=>{"key"=>"value"},'template_id'=>1,'templateParam'=>1]status:状态,success成功,error失败;content:已替换参数的模板内容;msg:错误信息成功示例:["status"=>"success","content"=>"测试内容"];失败示例:["status"=>"error","msg"=>"模板ID错误","content"=>"测试内容"] getGlobalTemplate获取国际模板template_id:模板ID;config:自定义配置;示例:['template_id'=>1,'config'=>{}];status:状态,success成功,error失败;template.template_id:模板ID;template.template_status:模板状态,0未提交,1审核中,2通过,3未通过;成功示例:["status"=>"success","template"=>["template_id"=>"w3423","template_status"=>2]];失败示例:["status"=>"error","msg"=>"模板ID错误"]createGlobalTemplate创建国际模板title:模板标题;content:模板内容;config:自定义配置;示例:["title"=>"test","content"=>"测试内容","config"=>{"key"=>"value"}]status:状态,success成功,error失败;template.template_id:模板ID;template.template_status:模板状态,0未提交,1审核中,2通过,3未通过;成功示例:["status"=>"success","template"=>["template_id"=>"w3423","template_status"=>2]];失败示例:["status"=>"error","msg"=>"模板ID错误"] putGlobalTemplate修改国际模板title:模板标题;content:模板内容;config:自定义配置;示例:["title"=>"test","content"=>"测试内容","config"=>{"key"=>"value"}]status:状态,success成功,error失败;template.template_id:模板ID;template.template_status:模板状态,0未提交,1审核中,2通过,3未通过;成功示例:["status"=>"success","template"=>["template_id"=>"w3423","template_status"=>2]];失败示例:["status"=>"error","msg"=>"模板ID错误"] deleteGlobalTemplate删除国际模板template_id:模板ID;config:自定义配置;示例:['template_id'=>1,'config'=>{}];status:状态,success成功,error失败;成功示例:["status"=>"success"];失败示例:["status"=>"error","msg"=>"模板ID错误"] sendGlobalSms发送国际短信mobile:手机号;content:模板内容;config:自定义配置;template_id:模板ID;templateParam:模板参数,参考附表1示例:["mobile"=>"129483782423","content"=>"测试内容","config"=>{"key"=>"value"},'template_id'=>1,'templateParam'=>1]status:状态,success成功,error失败;content:已替换参数的模板内容;msg:错误信息成功示例:["status"=>"success","content"=>"测试内容"];失败示例:["status"=>"error","msg"=>"模板ID错误","content"=>"测试内容"]  3、创建默认短信模板①在插件根目录下创建config/smsTemplate.php文件;②文件内容返回一个数组即可,如下:return [    [        'title' => '验证码',        'content' => '验证码@var(code),5分钟内有效!请勿泄漏于他人',        'name'=>'code'    ],]title标题;content内容,带参数;name为系统模板标识,唯一;③系统默认模板参考附表2;④在install安装中返回模板数组,系统会自动创建模板; 4、到后台短信通知管理,可以查看接口列表,安装、配置即可使用。 四、示例参考智简魔方官方短信平台接口idcsmart 五、附附表1、templateParam参数列表(国际国内参数一样)参数名描述类型示例system_website_name系统网站名系统智简魔方system_website_url系统网站地址系统www.idcsmart.comorder_id订单ID订单125order_create_time订单创建时间订单1707094285order_amount订单金额订单1.00product_name产品名称(包括商品名和主机名)产品测试-ser23142123product_marker_name商品名称产品测试product_first_payment_amount产品首付金额产品100.00product_renew_amount产品续费金额产品100.00product_binlly_cycle产品周期产品计费周期免费free,一次onetime,周期先付recurring_prepayment,周期后付recurring_postpaidproduct_active_time产品激活时间产品1707094285product_due_time产品到期时间产品1707094285product_suspend_reason产品暂停原因产品到期暂停renewal_first续费X天后到期第一次提醒产品1renewal_second续费X天后到期第二次提醒产品2client_register_time客户注册时间客户1707094285client_username用户名客户testclient_email邮件客户135460@qq.comclient_phone手机号客户16548765643client_company公司客户智简魔方client_last_login_time最后登录时间客户1707094285client_last_login_ip最后登录ip客户122.32.13.3account账户名客户test 附表2、系统默认短信模板(以下模板内容为官方短信平台模板内容,使用需修改)系统模板标识(name)模板标题(title)模板类型模板内容(content)示例code验证码系统验证码@var(code),5分钟内有效!请勿泄漏于他人client_login_success用户登录客户您的账号@var(account)成功登录系统,如不是本人操作请及时修改密码client_register_success用户注册客户@var(account),感谢您支持@var(system_website_name)client_change_phone客户更改手机客户您的手机号被改为:@var(client_phone),请注意账户安全client_change_password客户更改密码客户您的密码被改为:@var(client_password),请注意账户安全order_create订单创建订单您已下单,订单:@var(order_id)(订单号),请及时支付host_pending产品开通中产品您的产品:@var(product_name)(产品名称)正在开通,请耐心等待host_active开通成功产品您的产品:@var(product_name)(产品名称),已开通可使用host_suspend产品暂停通知产品您的产品:@var(product_name)(产品名称),由于@var(product_suspend_reason),已停用host_unsuspend产品解除暂停通知产品您的产品:@var(product_name)(产品名称),已解除暂停host_terminate产品删除通知产品您的产品:@var(product_name)(产品名称),由于到期未续费,已删除host_upgrad产品升降级产品您已成功升级产品@var(product_name),感谢您的支持host_renewal_first第一次续费提醒产品您的产品:@var(product_name)(产品名称),还有@var(renewal_first)天到期,请及时续费host_renewal_second第二次续费提醒产品您的产品:@var(product_name)(产品名称),还有@var(renewal_second)天到期,请及时续费host_overdue_first逾期付款第一次提醒产品您的产品:@var(product_name)(产品名称)已到期,将会删除,请及时续费host_overdue_second逾期付款第二次提醒产品您的产品:@var(product_name)(产品名称)已到期,将会删除,请及时续费host_overdue_third逾期付款第三次提醒产品您的产品:@var(product_name)(产品名称)已到期,将会删除,请及时续费order_overdue订单未付款通知订单您的订单:@var(order_id)(订单号)尚未支付,金额@var(order_amount),请及时支付admin_order_amount订单金额修改订单您的订单:@var(order_id)(订单号)金额修改为@var(order_amount),请及时支付order_pay订单支付通知订单您的订单:@var(order_id)(订单号)支付成功,支付金额为:@var(order_amount)元order_recharge充值成功通知订单充值成功,本次充值金额为:@var(order_amount)元 
财务系统使用文档>其他>财务更新后-前台用户无法登录
若是升级前,魔方财务前台用户中心可以正常登录,升级后,提示用户密码错误。具体报错如下所示。        注意:该问题不是BUG,而是更新后的财务,增加了会员中心加密功能,增强了安全性。(该特性是 V3.6.1之后添加的)        该加密机制以适配官方的主题模板,但若是使用了三方的主题模板,可能不支持加密,就会导致用户前台无法登录。解决办法一、更换为魔方官方的会员中心(不演示了)解决办法二、为 自定义的会员中心 关闭 登录加密功能。
魔方云系统使用文档>10. 网站管理与升级>资源包
管理员将各个资源配置打包成套餐类型(及资源包),这个资源包可以分配给代理用户,有资源包的代理商就可以进行实例创建、用户创建,类似于用户代理的模式。 1、进入资源包页面,创建资源包 2、资源包创建 3、将创建的资源包分配给用户使用注意:分配了资源包的用户就是代理商,可以根据资源包的配置创建实例或者创建子账户 4、管理员查看资源分配情况 5、代理商必须选择资源包,进行实例创建、子账户创建,当资源包里面的资源被使用完毕,则不能再创建实例/子账户  6、代理商查看自己名下资源包资源的使用情况 
魔方云系统使用文档>11. 关于三方对接>WHMCS对接弹性IP
fclouddisk模块的data目录需要给写入权限,用于缓存操作步骤1、添加弹性IP的服务器接口服务器hash参数说明:<zjmfdir>admin</zjmfdir>  // 二级目录<user_prefix>xxx</user_prefix> // 用户前缀,用于区分不同平台对接<username>uid</username>  // 创建用户名类型,uid=用户ID,其他=邮箱/手机号注意:hash参数需要和关联的魔方云模块一致,否则可能会出现用户不一致的情况,username建议使用uid 2、添加弹性IP产品,模块名称选择魔方云弹性IP 3、设置产品参数,此处可以直接设置,也可以设置可选配置项可选配置选项:node_group|节点分组ID、area|区域ID、node|节点ID、ip_group|IP分组ID、in_bw|进带宽、bw|带宽 4、保存后,可以到前台会员中心购买相关产品 5、产品订购后,可以进入产品内页,关联云主机 6、也可以进入云主机内页,直接将弹性IP分配给该云主机  
业务系统开发文档>插件开发
fo属性,示例:# 插件基本信息public $info = array(    'name'        => 'IdcsmartTicket', //插件英文名,作为插件唯一标识,改成你的插件英文就行了    'title'       => '智简魔方工单插件', //插件名称    'description' => '智简魔方工单插件', //插件描述    'author'      => 'idcsmart',  //开发者    'version'     => '1.0',      // 版本号);④必须实现install()安装以及uninstall()卸载方法⑤可实现钩子方法,如要实现订单创建后钩子after_order_create,则可在此文件中创建public function afterOrderCreate($param)公共方法;⑥系统会在订单创建后的位置放置⑤中的钩子,放置方式:hook(‘after_order_create’,[‘id’=>$orderId]) ;⑦如果定义变量noNav,表示不需要默认导航(具体参考7,插件后台导航)public $noNav; 3、创建插件后台控制器 idcsmart_ticket\controller\TicketController.php①命名空间addon\idcsmart_ticket\controller;②继承后台基类控制器PluginAdminBaseController,增加了权限控制,允许使用一些通用方法;③get_admin_id()可获取后台管理员登录ID;④实现接口,如public function ticketList(),系统默认访问此接口的url为:网站地址/admin/addon?_plugin=idcsmart_ticket&_controller=ticket&_action=ticket_list,说明:系统默认地址默认登录,若需要免登录访问,需要自定义路由(见后面自定义路由);⑤系统提供了生成④中默认访问地址的方法:idcsmart_addon_url($url,$vars=[],$is_admin=false)参数说明:url: 格式:插件名://控制器名/方法,如 IdcsmartTicket://Ticket/ticketListvars: 参数,默认为空数组Is_admin: 是否后台,默认为false 4、创建插件前台控制器idcsmart_ticket\controller\clientarea\TicketController.php①命名空间addon\idcsmart_ticket\controller\clientarea;②继承前台基类控制器PluginBaseController,允许使用一些通用方法;③get_client_id()可获取前台客户登录ID;④实现接口,如public function ticketList(),系统默认访问此接口的url为:网站地址/console/addon?_plugin=idcsmart_ticket&_controller=ticket&_action=ticket_list或者:网站地址/console/addon?_plugin=1&_controller=ticket&_action=ticket_list,1表示插件ID;说明:系统默认地址默认登录,若需要免登录访问,需要自定义路由(见后面自定义路由);⑤系统提供了生成④中默认访问地址的方法:idcsmart_addon_url($url,$vars=[],$is_admin=false)参数说明:url: 格式:插件名://控制器名/方法,如 IdcsmartTicket://Ticket/ticketListvars: 参数,默认为空数组Is_admin: 是否后台,默认为false 5、插件提供两种路由:①、系统默认url带参数,参考4②、自定义路由,插件根目录下定义route.php,示例:前台路由:Route::group('console/v1',function (){Route::get('ticket',"\\addon\\idcsmart_ticket\\controller\\clientarea\\TicketController@ticketList")->append(['_plugin'=>'idcsmart_ticket','_controller'=>'ticket','_action'=>'ticket_list']);# 带上默认参数,可以使用继承控制器app\admin\controller\PluginBaseController的一些通用方法,也可以不追加这些参数(_plugin插件名称C风格,_controller控制器名称C风格,_action方法名称C风格)})->middleware(\app\http\middleware\ParamFilter::class)->middleware(\app\http\middleware\CheckHome::class);#前台需要登录就使用此中间件后台路由:Route::group(DIR_ADMIN . '/v1',function (){ Route::get('ticket',"\\addon\idcsmart_ticket\controller\TicketController@ticketList")->append(['_plugin'=>'idcsmart_ticket','_controller'=>'ticket','_action'=>'ticket_list']);})->middleware(\app\http\middleware\ParamFilter::class)->middleware(\app\http\middleware\CheckAdmin::class);#后台需要登录就使用此中间件 6、插件多语言①创建语言文件lang/zh-cn.php,返回如下格式的数组:return [    'success_message' => '请求成功',    'ticket_title_require' => '请输入工单标题','ticket_log_client_create_ticket' => '{client}新建工单:{ticket_id}',] ②使用lang_plugins('语言标识',$param=[])实现多语言,$param为语言文件中参数,格式['{client}'=>'wyh'],如:lang_plugins('ticket_log_client_create_ticket',['{client}'=>'wyh','{ticket_id}'=>1]);③前端多语言文件  前台语言文件:在template/clientarea/lang/目录下index.js文件;  后台语言文件:在template/admin/lang目录下(function () {  const module_lang = {    "zh-cn": {      add: "添加",    },    "zh-hk": {      add: "添加",    },    "en-us": {      add: "Add",    },  };  const DEFAULT_LANG = localStorage.getItem("backLang") || "zh-cn";  window.module_lang = module_lang[DEFAULT_LANG];})();    具体参考idcsmart_ticket工单插件 7、插件后台导航①导航默认会创建在插件导航之下,默认链接:plugin/插件名/index.html,对应template/admin/index.php文件,同时需要在lang/下的语言文件创建如下格式的语言,nav_plugin_addon_插件名:'nav_plugin_addon_idcsmart_ticket' => '工单', ②自定义导航,若是一级导航,会增加在插件导航之上,管理导航之下,在插件根目录下创建sidebar.php,示例:/* *  自定义后台导航菜单(仅支持一二级),注意系统会在插件导航下默认创建url为"plugin/插件名称/index.html"的导航,因此需要在template/admin/目录下创建index.php文件作为插件入口 */return [    [ # 一级导航        'name' => 'nav_plugin_addon_ticket', # 导航名称,不要与系统冲突(参考idcsmart_nav表中name字段),同时需要在lang/目录下定义语言        'url'  => '', # 为空表示一级导航,不需要链接        'icon' => 'tools', # 图标,获取图标:https://tdesign.tencent.com/vue/components/icon        'in' => '', # 一级导航,此值为空        'child' => [ # 二级导航            [                'name' => 'nav_plugin_addon_ticket_list', # 导航名称                'url' => 'ticket', # 链接格式,会自动加上.html                'in' => 'nav_user_management', # 可定义导航在某个一级导航之下,默认会放置在此一级导航最后的位置(获取方式:idcsmart_nav表中的parent_id==0的name字段)                'icon' => '', # 图标,获取图标:https://tdesign.tencent.com/vue/components/icon            ],            [                'name' => 'nav_plugin_addon_ticket_internal_list', # 导航名称                'url' => 'ticket_internal', # 链接格式,会自动加上.html                'in' => '', # 可定义导航在某个一级导航之下,默认会放置在此一级导航最后的位置                'icon' => '', # 图标,获取图标:https://tdesign.tencent.com/vue/components/icon            ],        ]    ],]; 8、插件前台导航①导航默认会创建在插件导航之下,默认链接:plugin/插件名/index.html;②自定义导航,会增加在插件导航之上,管理导航之下,在插件根目录下创建sidebar_clientarea.php,示例:/* *  自定义前台导航菜单(仅支持一二级) */return [    [        'name' => 'nav_plugin_addon_ticket', # 链接名称,同时需要在lang/目录下定义语言        'url'  => '', # 链接格式,会自动加上.html        'icon' => '', # 图标        'child' => [ # 二级菜单            [                'name' => 'nav_plugin_addon_ticket_list',                'url' => 'ticket',                'icon' => '', # 图标            ],        ]    ],];  9、插件后台权限管理在插件根目录下创建auth.php,示例如下(注意定义语言):<?php/* *  定义权限,系统会默认插入名称为插件名的一级权限,以下仅需定义二级/三级权限;(首先,要使用二级权限,插件后台控制器需要继承app\event\controller\PluginAdminBaseController基类控制器) */return [    [        'title' => 'auth_plugin_addon_ticket_list', # y用户工单        'url' => 'ticket',        'child' => [ # 操作权限            [                'title' => 'auth_plugin_addon_ticket_view', # 工单查看                'url' => '',                'auth_rule' => 'TicketController::ticketList',  # 工单列表具体控制器方法                'auth_rule_title' => 'auth_rule_plugin_addon_ticket_list'  # 具体权限名称            ],            [                'title' => 'auth_plugin_addon_ticket_receive',                'url' => '',                'auth_rule' => 'TicketController::receive',                'auth_rule_title' => 'auth_rule_plugin_addon_ticket_receive'  # 具体权限名称            ],            [                'title' => 'auth_plugin_addon_ticket_resolved',                'url' => '',                'auth_rule' => 'TicketController::resolved',                'auth_rule_title' => 'auth_rule_plugin_addon_ticket_resolved'  # 具体权限名称            ],        ]    ],    [        'title' => 'auth_plugin_addon_ticket_detail', # 工单详情        'url' => 'ticket_detail',        'child' => [            [                'title' => 'auth_plugin_addon_ticket_view',                'url' => '',                'auth_rule' => 'TicketController::index',                'auth_rule_title' => 'auth_rule_plugin_addon_ticket_index'  # 具体权限名称            ],            [                'title' => 'auth_plugin_addon_ticket_reply',                'url' => '',                'auth_rule' => 'TicketController::reply',                'auth_rule_title' => 'auth_rule_plugin_addon_ticket_reply'  # 具体权限名称            ],            [                'title' => 'auth_plugin_addon_ticket_download',                'url' => '',                'auth_rule' => 'TicketController::download',                'auth_rule_title' => 'auth_rule_plugin_addon_ticket_download'  # 具体权限名称            ],        ]    ],    [        'title' => 'auth_plugin_addon_ticket_internal_list', # 内部工单        'url' => 'ticket_internal',        'child' => [            [                'title' => 'auth_plugin_addon_ticket_view',                'url' => '',                'auth_rule' => 'TicketInternalController::ticketInternalList',                'auth_rule_title' => 'auth_rule_plugin_addon_ticket_internal_list'  # 具体权限名称            ],            [                'title' => 'auth_plugin_addon_ticket_view',                'url' => '',                'auth_rule' => 'TicketInternalController::index',                'auth_rule_title' => 'auth_rule_plugin_addon_ticket_internal_index'  # 具体权限名称            ],            [                'title' => 'auth_plugin_addon_ticket_add',                'url' => '',                'auth_rule' => 'TicketInternalController::create',                'auth_rule_title' => 'auth_rule_plugin_addon_ticket_internal_create'  # 具体权限名称            ],            [                'title' => 'auth_plugin_addon_ticket_receive',                'url' => '',                'auth_rule' => 'TicketInternalController::receive',                'auth_rule_title' => 'auth_rule_plugin_addon_ticket_internal_receive'  # 具体权限名称            ],            [                'title' => 'auth_plugin_addon_ticket_resolved',                'url' => '',                'auth_rule' => 'TicketInternalController::resolved',                'auth_rule_title' => 'auth_rule_plugin_addon_ticket_internal_resolved'  # 具体权限名称            ],            [                'title' => 'auth_plugin_addon_ticket_reply',                'url' => '',                'auth_rule' => 'TicketInternalController::reply',                'auth_rule_title' => 'auth_rule_plugin_addon_ticket_internal_reply'  # 具体权限名称            ],            [                'title' => 'auth_plugin_addon_ticket_forward',                'url' => '',                'auth_rule' => 'TicketInternalController::forward',                'auth_rule_title' => 'auth_rule_plugin_addon_ticket_internal_forward'  # 具体权限名称            ],        ]    ],]; 10、插件接口内部调用使用plugin_api($addon,$controller,$action,$param=[])函数可内部调用插件API,需要开发者提供插件API开发文档,具体格式参考系统API文档 * @param string addon - 插件 require * @param string controller - 控制器前缀 require * @param string action - 方法 require * @param array param - 传入的参数 四、示例具体可参考智简魔方工单插件public\plugins\addon\idcsmart_ticket\ 
业务系统开发文档>v10开发规范
figOptionsLogic.php对应ConfigOpitonsLogic类,公共函数文件app/common.php;5、目录结构finance  财务系统├─app           应用目录│  ├─admin           后台│  │  ├─controller      控制器目录│  │  ├─model           模型目录(业务逻辑写这里或逻辑类里)│  │  ├─validate        验证器目录│  ├─home            前台│  │  ├─controller      控制器目录│  │  ├─model           模型目录│  │  ├─validate        验证器目录│  ├─common          公共目录│  │  ├─logic           逻辑类目录│  │  ├─model           模型目录(前后台通用模型方法写这里面的model类)│  ├─command         命令行目录│  │  ├─Cron.php        系统默认定时任务文件│  ├─excption           错误处理目录│  ├─http           网关目录│  │  ├─middleware      中间件目录│  ├─common.php         公共函数文件(写函数注释,比较通用的方式先写好,如curl)│  ├─middleware.php     中间件定义文件├─cron                   定时任务│  ├─cron.php            定时任务├─config                全局配置目录│  ├─app.php            应用配置│  ├─cache.php          缓存配置│  ├─console.php        控制台配置│  ├─cookie.php         Cookie配置│  ├─database.php       数据库配置│  ├─filesystem.php     文件磁盘配置│  ├─lang.php           多语言配置│  ├─log.php            日志配置│  ├─middleware.php     中间件配置│  ├─route.php          URL和路由配置│  ├─session.php        Session配置│  ├─trace.php          Trace配置│├─route                  路由目录│  ├─admin.php          后台路由│  ├─home.php           前台路由│├─public                WEB目录(对外访问目录)│  ├─index.php          入口文件│  ├─admin         后台模板目录│  ├─home         前台模板目录│  ├─plugins         插件目录│  ├─.htaccess          用于apache的重写│├─runtime               应用的运行时目录(可写,可定制)├─vendor                Composer类库目录6、使用模型方式进行增删改查,写在app/common/model/下(前后台通用);例子:创建订单,建立文件app/common/model/OrderModel.php,create()创建订单;7、逻辑类,写在app/common/logic/下,例子:ProvisionLogic.php服务模块逻辑类等;二、函数和类、属性命名1、类的命名采用驼峰法(首字母大写),例如 User、UserType;2、函数的命名使用小写字母和下划线(小写字母开头)的方式,例如 get_client_ip,公共函数文件app/common.php统一使用此方式命名;3、方法的命名使用驼峰法(首字母小写),例如 getUserName;4、属性的命名使用驼峰法(首字母小写),例如 tableName、instance;5、特例:以双下划线__打头的函数或方法作为魔术方法,例如 __call 和 __autoload;6、变量的命名使用驼峰法(首字母小写),例如 $tableName。实例化类的变量和类名同名,大驼峰变量,例如:$User。逻辑类中的变量加后缀,例如:$SmsLogic。三、常量和配置1、常量以大写字母和下划线命名,例如 APP_PATH;2、配置参数以小写字母和下划线命名,例如 url_route_on 和url_convert;3、环境变量定义使用大写字母和下划线命名,例如APP_DEBUG;四、数据库表说明1、数据库表采用 innodb引擎;2、utf8mb4字符集;3、带自增主键;4、有默认值(text这类类型除外);5、字符串类型的一定要有默认值,不要用NULL;6、创建表一定要有字段说明;7、日期存时间戳,所以日期类型用int(11);8、价格相关数据用 decimal(10,2),有的可能需要更高的精度decimal(10,5);9、适当添加索引,参考数据库表索引建立;10、数据库里不使用存储过程、视图、函数、触发器、事件(否则维护麻烦);11、数据表和字段采用小写加下划线方式命名,并注意字段名不要以下划线开头,例如 idcsmart_accounts表和 amount_out字段,不建议使用驼峰和中文作为数据表及字段命名。12、数据库表不使用外键;13、数据库用5.7,开启严格模式。14、表与表关联的ID要带表名。例如:product_id。15、表或字段读取不需要写as,例如client c。16、搜索参数名$keywords。分页:$page 条数:$limit 排序:$orderby 升序降序:$sort desc asc ;17、五、智简魔方代码规范1、控制器方法中尽量只写传参,验证、json返回,业务逻辑写在model里,或者逻辑类里;2、控制器里只有接口方法,不要写多余的方法在控制器文件中,其他方法、逻辑写model里或者逻辑类里、或者公共函数里;3、除接口返回json格式外,其他函数方法一律返回单个值,或者数组;4、更改框架核心代码、基类控制器时,一定要商量,并写好更改的文档,做好记录;5、函数超过两个参数,采用数组方式传入;(讨论:这个涉及到后面可能会不断的增加传入参数)6、公共函数里 尽量不使用数据库操作,用use 引用模型类;7、不要实例化控制器;8、变量赋值运算前后添加空格。例如:$td .= '</td>';9、类,函数名后面的花括号紧跟后面,换行写。例如:class CartController extends CommonController{10、注释格式①api接口和类里面方法的注释格式/**     * @title title     * @desc desc* @author author* @version version     * @url url     * @method method* @namespace namespace     * @param type name default desc validate* @return type name default desc     */如果当前default没有的话可以用 - 占位,validate没有的话可以不写return的参数如果仅返回单个数据并无变量名称是type之后的参数可以不填方法的param如果有顺序的话需要按顺序写param和return后面的参数以空格隔开,参数的内容之中不能存在空格例如/** * @title 节点分组列表 * @desc 节点分组列表 * @author hh * @version v1 * @url node_groups * @method GET * @param int $page 1 页数  * @param int $per_page 20 每页条数  * @param string $orderby id 排序(id,name) * @param string $sort desc 排序方向 * @param string $search - 搜索 * @param string $list_type page 获取类型(all,page),all会忽略页数直接返回所有 * @return int $data[].id - 节点分组ID * @return string $data[].name - 节点分组名称 * @return string $data[].description - 节点分组名称 * @return string $data[].create_time - 创建时间 * @return int $data[].node[].id - 使用节点ID * @return string $data[].node[].name - 使用节点名称 * @return int $meta.total - 总条数     * @return int $meta.total_page - 总页数     * @return int $meta.page - 当前页     * @return int $meta.per_page - 每页条数 */②公共方法的注释格式/**     * @title title     * @desc desc* @author author* @version version     * @param type name default desc validate* @return type name default desc     */如果当前default没有的话可以用 - 占位,validate没有的话可以不写return的参数如果仅返回单个数据并无变量名称是type之后的参数可以不填方法的param如果有顺序的话需要按顺序写param和return后面的参数以空格隔开,参数的内容之中不能存在空格/**     * @title 获取客户端IP地址     * @desc 获取客户端IP地址* @author hh* @version v1     * @param integer $type 返回类型0返回IP地址1返回IPV4地址数字   * @param boolean $adv 是否进行高级模式获取(有可能被伪装)   * @return string     */ 六、其他1、前端传值用json,后端统一返回json格式数据;2、返回数组一律转化为对象;3、所有函数都需要写清楚文档;4、状态码:200返回正确 400返回错误 302重定向 500系统错误,401登录失效,404无权限5、数据返回格式:{“status”:200/400/302/500,"msg":"success message","data":{}}6、控制器的函数中不要写参数8、php使用7.49、注意不要使用php 语言结构或函数 来作为方法、变量;10、公共语言 写在后台的语言文件; 键值 小写+下划线;11、语言文件写法:success_message => ‘请求成功’字段统一备注字段统一用 notes varchar(1000)支付字段统一用 gateway产品id统一用 product_id用户id统一用 client_id计费周期字段统一用 billing_cycle 
业务系统使用文档>11、系统迁移>魔方财务迁移v10
一、环境搭建搭建一套新的V10后,按以下步骤操作:在插件列表处点击同步插件,安装下面标记了需手动安装的插件,其他未标记的插件系统安装好后自带基础插件。(开源版用户如需迁移非系统自带对应插件数据需要到应用商店购买插件并安装)V10安装插件:帮助中心 新闻中心 用户工单 续费 实名认证 提现插件 文件上传下载插件 退款 用户等级(需手动安装) 发票(需手动安装) 用户自定义字段(需手动安装) 销售插件(需手动安装) 合同插件(需手动安装) 推介计划(需手动安装)二、迁移步骤1.在魔方会员中心--资源中心--文件下载--v10业务系统板块下载魔方财务迁移工具(全数据迁移).zip 工具包2.解压工具包到本地,把move.php放在魔方财务 public目录下;  访问:财务地址/move.php,选择导出,下一步,开始,等待导出数据库文件成功即可3.将move.php文件和财务的导出包放在V10的 public目录下  访问:V10地址/move.php,选择导入,选择财务的导出包,下一步,开始,等待提示到导入数据完成即可。
业务系统使用文档>2、系统设置>2.5、导航管理>2.5.1 如何添加前台自定义导航
1.点击系统设置导航设设置 -选择前台导航管理-新建页面 2.页面类型选择自定义 输入URL链接网址  设置自定义导航名称 设置完成 点击保存注意:无法进行后台自定义导航添加   
DCIM使用文档>5.装机常见问题>5.5 解决debian+ubuntu16以上开机脚本不生效
F deb https://mirrors.ustc.edu.cn/debian/ bullseye main contrib non-free deb https://mirrors.ustc.edu.cn/debian/ bullseye-updates main contrib non-free deb https://mirrors.ustc.edu.cn/debian-security/ bullseye-security main contrib non-free deb http://deb.debian.org/debian bullseye-backports main EOF 2、给debian 11安装 软件     chroot /target && apt update      chroot /target && apt install mtr -y     或者这样(推荐下面这种,亲测有效)     chroot /target apt update      chroot /target apt install mtr -y附:这是一个网上的debian ks 自动应答脚本    https://github.com/oxypwn/kickstart/blob/master/debian/debian.ksB、Ubuntu 16 及以后版本 开机脚本不生效关键点:自定义脚本中不能使用 echo cat printf tee > >> 这6个指令存在的问题1、d-i preseed/late_command 命令不能使用 echo cat printf tee > 以及 >>> 这6个指令touch /etc/sysctl.d/custom.conf echo 'net.core.default_qdisc=fq' > /etc/sysctl.d/custom.conf 上面的命令,只会有touch 成功创建文件,echo 不会成功的2、sed 不能向空文件写入内容,这是sed的问题,不是ubuntu的问题解决办法利用可使用的shell 指令,完成文件的创建和内容的写入 比如 cp sed 等等不创建新文件,让ubuntu 18 安装完成后开启bbr sed -i '$a\net.ipv4.tcp_ecn = 1' /etc/sysctl.conf sed -i '$a\net.core.default_qdisc = fq' /etc/sysctl.conf sed -i '$a\net.ipv4.tcp_congestion_control = bbr' /etc/sysctl.conf创建 新文件,让ubuntu 18 安装完成后开启bbr,您可以参考这样的写法 cp -a /etc/hosts /etc/sysctl.d/custom.conf sed -i '2,$d' /etc/sysctl.d/custom.conf sed -i '1s\.*\net.ipv4.tcp_ecn = 1\' /etc/sysctl.d/custom.conf sed -i '$a\net.core.default_qdisc = fq' /etc/sysctl.d/custom.conf sed -i '$a\net.ipv4.tcp_congestion_control = bbr' /etc/sysctl.d/custom.conf