目錄
-
- 一、fastadmin背景使用七牛雲插件,上傳圖檔旁的選擇按鈕無法上傳圖檔以及儲存圖檔
- 二、使用fastadmin随機生成的入口檔案報模闆不存在
- 三、實作前台菜單欄綠标選中
- 四、給selectpage預設選中值
- 五、給selectpage添加查詢條件
- 六、解決前台引入表格後出現破版問題
- 七、去掉表格中預設的搜尋樣式
- 八、控制器方法中傳值到js
- 九、在原有鍵值裡對在增加
- 十、使用 fastadmin的小程式支付
- 十一、小程式登陸
- 十二、自定義按鈕并傳值
- 十三、在添加按鈕上進行傳值
- 十四、fastadmin上傳視訊至七牛雲
- 十五、fastadmin背景能通路,前台路徑錯誤 ,前台路徑錯誤,背景又能通路。
一、fastadmin背景使用七牛雲插件,上傳圖檔旁的選擇按鈕無法上傳圖檔以及儲存圖檔
問題描述:
![](https://img.laitimes.com/img/__Qf2AjLwojIjJCLyojI0JCLiAzNfRHLGZkRGZkRfJ3bs92YsYTMfVmepNHLysGRPVTUq1UeRpHW4Z0MMBjVtJWd0ckW65UbM5WOHJWa5kHT20ESjBjUIF2X0hXZ0xCMx81dvRWYoNHLrdEZwZ1Rh5WNXp1bwNjW1ZUba9VZwlHdssmch1mclRXY39CXldWYtlWPzNXZj9mcw1ycz9WL49zZuBnLwYjM3UDOzYTM0EDNwAjMwIzLc52YucWbp5GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.png)
上傳好的圖檔,無法顯示在清單裡:
解決方案:
此問題由于使用七牛雲上傳插件所導緻,啟用服務端回調,修改回調位址即可
二、使用fastadmin随機生成的入口檔案報模闆不存在
問題描述:
本地項目配置虛拟域名後通路背景沒問題,放到線上後報入口檔案的模闆不存在。一開始以為Nginx配置錯了,怎麼調都無法調出
解決方案:
一、修改自動生成的檔案:
pCPyfJaEDR.php
,修改為:
admin.php
二、修改
config.php
:
去掉admin即可!
三、實作前台菜單欄綠标選中
打開:
sidenav.html
:
控制器名為
my_baby_day
,方法名為
ceshi
四、給selectpage預設選中值
方案一:
效果展示:
<div class="form-group row">
<label class="control-label col-xs-12 col-sm-2">{:__('添加體溫')}:</label>
<div class="col-xs-12 col-sm-8">
<dl class="fieldlist" data-template="eventtpl1" data-name="row[temperature]">
<dd>
<ins>{:__('度數')}</ins>
<ins>{:__('時間段')}</ins>
<ins>{:__('狀态')}</ins>
</dd>
{foreach $teamp_info as $k=>$v}
<dd class="form-inline">
<ins><input type="text" data-rule="required" name="row[temperatures][{$k}][degree]" class="form-control" value="{$v.degree}" placeholder="度數"/></ins>
<ins><input type="text" data-rule="required" name="row[temperatures][{$k}][noon]" class="form-control selectpage" data-source="my_noon/index" data-field="noon" value="{$v.noon}" placeholder="時間段"/></ins>
<ins><input type="text" data-rule="required" name="row[temperatures][{$k}][status]" class="form-control selectpage" data-params='{"custom[fid]":1}' data-source="My_all_type/index" data-field="type_name" value="{$v.status}" placeholder="狀态" size="10"/></ins>
<!--下面的兩個按鈕務必保留-->
<span class="btn btn-sm btn-danger btn-remove"><i class="fa fa-times"></i></span>
<span class="btn btn-sm btn-primary btn-dragsort"><i class="fa fa-arrows"></i></span>
</dd>
{/foreach}
<dd><a href="javascript:;" class="btn btn-sm btn-success btn-append"><i class="fa fa-plus"></i> {:__('Append')}</a></dd>
</dl>
</div>
</div>
方案二:
修改底層(不建議)
連結: fastadmin問答解決selectpage預設選中問題.
五、給selectpage添加查詢條件
方案一:
增加
data-params='{"custom[fid]":1}'
屬性。
其中,找到
selectpage
方法:
selectpage
方法中接受自定義查詢條件,接受方式為數組,是以,隻需在html頁面定義自定義查詢條件就可。
data-params='{"custom[fid]":1}'
的意思就是:where(‘fid’,1)。
方案二:
連結: fastadmin問答給selectpage添加自定義查詢條件.
六、解決前台引入表格後出現破版問題
破版展示:
解決方案
:
找到
meta.html
,加入樣式:
<style>
.toolbar,.search,.columns-right{
margin-top: 10px!important;
}
</style>
最終效果
:
七、去掉表格中預設的搜尋樣式
在相應的js檔案中增加:
search:false,
showColumns:false,
showToggle:false,
showExport:false,
commonSearch:false,
八、控制器方法中傳值到js
控制器裡:
$this->assignconfig("ids",$ids);
js裡:
add_url: 'my_ratio/add?ids='+Config.ids,
九、在原有鍵值裡對在增加
<div class="form-group row">
<label class="control-label col-xs-12 col-sm-2">添加睡眠資訊:</label>
<div class="col-xs-12 col-sm-8">
<dl class="fieldlist" data-template="eventtpl4" data-name="row[sleep]">
<dd>
<ins>睡眠時間</ins>
<ins>備注</ins>
<ins>時長(分鐘)</ins>
<ins>狀态</ins>
</dd>
<dd><a href="javascript:;" class="btn btn-sm btn-success btn-append"><i class="fa fa-plus"></i> 追加</a></dd>
</dl>
<script id="eventtpl4" type="text/html">
<dd class="form-inline">
<ins><input type="text" data-rule="required" name="<%=name%>[<%=index%>][sleep_time]" class="form-control" value="<%=row.sleep_time%>" placeholder="睡眠時間"/></ins>
<ins><input type="text" data-rule="required" name="<%=name%>[<%=index%>][remarks]" class="form-control" value="<%=row.remarks%>" placeholder="備注"/></ins>
<ins><input type="text" data-rule="required" name="<%=name%>[<%=index%>][duration]" class="form-control" value="<%=row.duration%>" placeholder="時長" size="10"/></ins>
<ins><input type="text" data-rule="required" name="<%=name%>[<%=index%>][status]" class="form-control selectpage" data-params='{"custom[fid]":4}' data-source="My_all_type/index" data-field="type_name" value="<%=row.status%>" placeholder="狀态" size="10"/></ins>
<span class="btn btn-sm btn-danger btn-remove"><i class="fa fa-times"></i></span>
<span class="btn btn-sm btn-primary btn-dragsort"><i class="fa fa-arrows"></i></span>
</dd>
</script>
</div>
</div>
十、使用 fastadmin的小程式支付
以上三項分别為:
- minapp_id:小程式APPID,從小程式平台擷取。
- mch_id:微信商戶id
- key:微信商戶key
控制器中:
/**
* 購買試題
*/
public function payQuestion(){
try{
$money = trim($this->request->request("money"));
$qid = $this->request->request("qid");
if (empty($money)||empty($qid)){
$this->error("缺少必要參數");
}
// if ($money<1){
// $this->error("支付金額不正确");
// }
//判斷是否有該試題
$res = Db::name("questions")
->where("id",$qid)
->find();
if (empty($res)){
$this->error("不存在該試題");
}
//判斷試題金額是否與傳過來的金額一緻
if ($res['money']!=$money){
$this->error("試題金額錯誤");
}
//擷取目前使用者的openid
$openid = Db::name("user")
->where("id",$this->auth->id)
->value("username");
if ($openid==""){
$this->error("不存在此賬戶");
}
$pay = new \addons\epay\controller\Index();
$data = $pay->experience($openid,$qid,$money,"wechat","miniapp");
$this->success($data ? "ok" : '暫無資料',$data,$data?1:2);
}catch (Exception $e) {
$this->error($e->getMessage());
}
}
addon插件下的index控制器:
/**
* 體驗,僅供開發測試
*/
public function experience($openid,$qid,$amount,$type,$method)
{
if (!$amount || $amount < 0) {
$this->error("支付金額必須大于0");
}
if (!$type || !in_array($type, ['alipay', 'wechat'])) {
$this->error("支付類型不能為空");
}
//訂單号
$out_trade_no = date("YmdHis") . mt_rand(100000, 999999);
//訂單标題
$title = '購買試題';
$data['uid'] = $this->auth->id;
$data['out_trade_no'] = $out_trade_no;
$data['add_time'] = time();
$data['qid'] = $qid;
$data['money'] = $amount;
Db::name("paylog")->insert($data);
//回調連結
$notifyurl = $this->request->root(true) . '/addons/epay/index/notifyx/paytype/' . $type;
$returnurl = $this->request->root(true) . '/addons/epay/index/returnx/paytype/' . $type . '/out_trade_no/' . $out_trade_no;
return Service::submitOrder($openid,$amount, $out_trade_no, $type, $title, $notifyurl, $returnurl, $method);
}
需要openid參數,從小程式授權後擷取。
十一、小程式登陸
流程:首先,前端拉起授權,獲得到code以後,請求後端接口,後端請求得到appid和unionid,對此進行操作和處理,最終傳回給前端一個token即可(看個人需求)。
/**
* 小程式登陸
*/
public function minappLogin(){
$appid = '微信小程式appid';//微信小程式appid
$secret = '微信小程式secret';//微信小程式secret
$code = input('code');//接收code參數,換取使用者唯一辨別
$username = input('username');//接收使用者名
$headimgurl = input('headimgurl');//接收使用者頭像
//下面url是請求微信端位址擷取使用者唯一辨別的,對應的appid和secret改成自己的
$url="https://api.weixin.qq.com/sns/jscode2session?appid=".$appid."&secret=".$secret."&js_code=".$code."&grant_type=authorization_code";
$res = $this->http_curl($url);//https_request是封裝的發送請求的方法
if (isset($res['errcode'])){
$this->error("請求微信接口失敗");
}
//判斷是否存在該openid
$is_exit = Db::name("user")
->where("username",$res["openid"])
->find();
if ($is_exit){
//直接登陸
$param["account"] = $res["openid"];
$param["password"] = "123456";
$url = "http://xxxxxx.com/api/User/login";
$data = json_decode($this->post($url,$param),true);
$token = $data['data']['userinfo']['token'];
$this->success($data?"ok":"請求資料為空",$data,$data?1:2);
}else{
//注冊并登陸
$param['username'] = $res["openid"];
$param['password'] = "123456";
$param["nickname"] = $username;
$param["avatar"] = $headimgurl;
$url = "http://xxxxxx.com/api/User/register";
$data = json_decode($this->post($url,$param),true);
if ($data["code"]==1){
$param["account"] = $res["openid"];
$param["password"] = "123456";
$urls = "http://xxxxxx.com/api/User/login";
$data = json_decode($this->post($urls,$param),true);
$this->success($data?"ok":"請求資料為空",$data,$data?1:2);
}else{
$this->error("注冊失敗");
}
}
十二、自定義按鈕并傳值
如果要控制按鈕是否顯示,在visible屬性值中,通過
row.字段名
進行判斷即可。
// 初始化表格
table.bootstrapTable({
url: $.fn.bootstrapTable.defaults.extend.index_url,
pk: 'id',
sortName: 'id',
columns: [
[
{checkbox: true},
{field: 'id', title: __('Id')},
{field: 'custname', title: __('Custname')},
{field: 'petname', title: __('Petname')},
{field: 'blance', title: __('Blance'), operate:'BETWEEN'},
{field: 'creattime', title: __('Creattime')},
{field: 'updatetime', title: __('Updatetime')},
{field: 'operate', title: __('Operate'), table: table, events: Table.api.events.operate, formatter: Table.api.formatter.operate,buttons: [
{
name: 'zidingyi',
text: __('充值扣費記錄'),
title: __('充值扣費記錄'),
classname: 'btn btn-xs btn-primary btn-dialog',
url: 'operation/index?id={id}',
visible: function (row) {
console.log(row)
//可列印出所有字段的數組。
//傳回true時按鈕顯示,傳回false隐藏
return true;
}
},
]
}
]
]
});
其中
id
為上方
field
字段中的id名稱。
十三、在添加按鈕上進行傳值
在控制器中的index方法中将uid映射過去:
/**
* 檢視
*/
public function index()
{
//目前是否為關聯查詢
$this->relationSearch = true;
//設定過濾方法
$this->request->filter(['strip_tags']);
if ($this->request->isAjax())
{
$uid = $this->request->request('uid');
//如果發送的來源是Selectpage,則轉發到Selectpage
if ($this->request->request('keyField'))
{
return $this->selectpage();
}
list($where, $sort, $order, $offset, $limit) = $this->buildparams();
$total = $this->model
->with(['user'])
->where($where)
->order($sort, $order)
->count();
$list = $this->model
->with(['user'])
->where($where)
->order($sort, $order)
->limit($offset, $limit)
->select();
foreach ($list as $row) {
$row->visible(['id','balance_log','type','balance','add_time','year','month','uid']);
$row->visible(['user']);
$row->getRelation('user')->visible(['mobile']);
}
$arr = [];
$list = collection($list)->toArray();
if ($list){
foreach ($list as $k=>$v){
if ($v['uid']==$uid){
$arr[] = $v;
}
}
}
$result = array("total" => count($arr), "rows" => $arr);
return json($result);
}
$uid = $this->request->request('uid');
$this->assign("uid",$uid); //将uid映射過去
return $this->view->fetch();
}
首頁中在添加按鈕的連結中将uid傳過去:
<div class="panel panel-default panel-intro">
{:build_heading()}
<div class="panel-body">
<div id="myTabContent" class="tab-content">
<div class="tab-pane fade active in" id="one">
<div class="widget-body no-padding">
<div id="toolbar" class="toolbar">
<a href="javascript:;" class="btn btn-primary btn-refresh" title="{:__('Refresh')}" ><i class="fa fa-refresh"></i> </a>
<a href="{:url('fundlog/add')}?uid={$uid}" class="btn btn-success btn-add {:$auth->check('fundlog/add')?'':'hide'}" title="{:__('Add')}" ><i class="fa fa-plus"></i> {:__('Add')}</a>
<a href="javascript:;" class="btn btn-success btn-edit btn-disabled disabled {:$auth->check('fundlog/edit')?'':'hide'}" title="{:__('Edit')}" ><i class="fa fa-pencil"></i> {:__('Edit')}</a>
<a href="javascript:;" class="btn btn-danger btn-del btn-disabled disabled {:$auth->check('fundlog/del')?'':'hide'}" title="{:__('Delete')}" ><i class="fa fa-trash"></i> {:__('Delete')}</a>
<a href="javascript:;" class="btn btn-danger btn-import {:$auth->check('fundlog/import')?'':'hide'}" title="{:__('Import')}" id="btn-import-file" data-url="ajax/upload" data-mimetype="csv,xls,xlsx" data-multiple="false"><i class="fa fa-upload"></i> {:__('Import')}</a>
<div class="dropdown btn-group {:$auth->check('fundlog/multi')?'':'hide'}">
<a class="btn btn-primary btn-more dropdown-toggle btn-disabled disabled" data-toggle="dropdown"><i class="fa fa-cog"></i> {:__('More')}</a>
<ul class="dropdown-menu text-left" role="menu">
<li><a class="btn btn-link btn-multi btn-disabled disabled" href="javascript:;" data-params="status=normal"><i class="fa fa-eye"></i> {:__('Set to normal')}</a></li>
<li><a class="btn btn-link btn-multi btn-disabled disabled" href="javascript:;" data-params="status=hidden"><i class="fa fa-eye-slash"></i> {:__('Set to hidden')}</a></li>
</ul>
</div>
</div>
<table id="table" class="table table-striped table-bordered table-hover table-nowrap"
data-operate-edit="{:$auth->check('fundlog/edit')}"
data-operate-del="{:$auth->check('fundlog/del')}"
width="100%">
</table>
</div>
</div>
</div>
</div>
</div>
十四、fastadmin上傳視訊至七牛雲
一、安裝七牛雲插件
配置參數:
安裝好後,清下緩存。
二、增加上傳視訊的檔案格式(例如:mp4)
找到
application\extra\upload.php
檔案,增加mp4格式:
修改視圖中的
add.html
,增加上傳類型mp4:
三、上傳以及展示效果
十五、fastadmin背景能通路,前台路徑錯誤 ,前台路徑錯誤,背景又能通路。
錯誤場景:一般建立一個站點後,把fastadmin項目扔進去後并要配置一個虛拟目錄的配置。
一般都是加上這句:
if (!-e $request_filename) {
rewrite ^(.*)$ /index.php?s=$1 last;
break;
}
這句話在之前的fastadmin版本是可以用的,等後來更新為admin.php為随機名稱後,這句不好使了就,加上這句能通路背景,但是前台不能通路了,不加這句能通路前台,但是背景不能通路了。
之前的錯誤寫法:
server
{
listen 80;
server_name dingdongbackend.wangchuangcode.cn;
root /www/wwwroot/dingdongbackend.wangchuangcode.cn/public;
if (!-e $request_filename) {
rewrite ^(.*)$ /index.php?s=$1 last;
break;
}
location / {
index index.html index.htm index.php;
#主要是這一段一定要确儲存在
}
access_log /www/wwwlogs/dingdongbackend.wangchuangcode.cn.log;
error_log /www/wwwlogs/dingdongbackend.wangchuangcode.cn.error.log;
}
正确的寫法:
server
{
listen 80;
server_name dingdongbackend.wangchuangcode.cn;
index index.php index.html index.htm default.php default.htm default.html;
root /www/wwwroot/dingdongbackend.wangchuangcode.cn/public;
location / {
index index.html index.htm index.php;
#主要是這一段一定要确儲存在
if (!-e $request_filename) {
rewrite ^(.*)$ /index.php?s=/$1 last;
break;
}
}
access_log /www/wwwlogs/dingdongbackend.wangchuangcode.cn.log;
error_log /www/wwwlogs/dingdongbackend.wangchuangcode.cn.error.log;
}
總結:
将
if (!-e $request_filename) {
rewrite ^(.*)$ /index.php?s=/$1 last;
break;
}
放到
location / {
}
中即可。