FastAdmin 笔记

参考链接:https://doc.fastadmin.net/docs/index.html

虚拟域名要在安装项目数据库以前配置。

命令安装项目

强烈建议使用命令行安装,因为采用命令行安装的方式可以和 FastAdmin 随时保持更新同步。使用命令行安装要准备好 Git、Node.js、Composer、Bower 环境。

  • 安装 Git for Windows;
  • 安装 Node.js 与 cnpm,执行
cnpm install bower -g
  • 复制 php.exe 所在的目录路径追加到环境变量;
  • 安装 composer;
  • 下载 composer.phar:
php -r "copy('https://install.phpcomposer.com/installer','composer-setup.php');"
php composer-setup.php
php -r "unlink('composer-setup.php');"
  • 创建 composer.bat 文件:
echo @php "%~dp0composer.phar" %*>composer.bat
  • 修改 composer 全局配置:
composer config -g repo.packagist composer https://packagist.phpcomposer.com
  • 到网站根目录,拉取项目代码:
git clone https://gitee.com/karson/fastadmin.git
  • 进入fastadmin目录,执行:
composer install
bower install

如果 bower install 执行失败,则重试运行。

  • 最后运行项目的 public 目录自动安装数据库。

命令生成数据表的CRUD(包括控制器、模型、视图、JS、语言包、菜单等)

前提:数据库中已有按规则创建的数据表(在生成CRUD时会根据字段属性、字段注释、表注释自动生成语言包、组件和排版)。具体规则见下面数据库说明。

  • 生成 fa_test 表的CRUD,会生成对应的控制器、模型、视图,不会生成菜单:php think crud -t test
  • 生成 fa_test_log 表的CRUD且生成对应的控制器为 testlog:php think crud -t test_log -c testlog
  • 生成CRUD时关联多表(具体字段规则见下面数据库说明):php think crud -t test --relation=category --relation=admin --relationforeignkey=category_id --relationforeignkey=admin_id
  • 生成 test 控制器的权限菜单:php think menu -c test
  • 生成 fa_test 表的CRUD且一键生成菜单(合并两步):php think crud -t test -u 1
  • 强制(重新)生成 fa_test 表的CRUD且一键生成菜单:php think crud -t test -u 1 --force=true
  • 一键全部重新生成所有控制器的权限菜单:php think menu -c all-controller
  • 删除 fa_test 表生成的CRUD,会删除对应的控制器、模型、视图,不会删除菜单:php think crud -t test -d 1
  • 删除 test 控制器生成的菜单:php think menu -c test -d 1

查看CRUD一键生成的参数:php think crud --help,查看权限菜单的参数:php think menu --help

管理插件

从 FastAdmin 安装已有插件

  • 安装:点击“插件管理”,点击“免费”选项卡,找到“每日签到”,点击最右边的“安装”,安装完毕后,页面左侧菜单栏会多出一项“签到管理”,此时数据库内页多出一个表fa_leesign
  • 移除:“插件管理”的“本地插件”页面有“每日签到”这一项,点击“状态”开关将其关闭,然后点击“卸载”,最后删除数据库fa_leesign

一键管理插件

  • 创建一个 myaddon 本地插件,用于开发自己的插件时使用,生成在根目录的 addons 目录:php think addon -a myaddon -c create
  • 刷新插件缓存,如果禁用启用了插件,部分文件需要刷新才会生效:php think addon -a myaddon -c refresh
  • 安装 myaddon 插件:php think addon -a myaddon -c install
  • 卸载 myaddon 插件:php think addon -a myaddon -c uninstall --force=true
  • 启用本地的 myaddon 插件:php think addon -a myaddon -c enable
  • 禁用本地的 myaddon 插件:php think addon -a myaddon -c disable

目录结构

FastAdmin项目目录
├── addons                  //插件存放目录
├── application           //应用目录
│   ├── admin             //后台管理应用模块
│   ├── api               //API应用模块
│   ├── common             //通用应用模块
│   ├── extra             //扩展配置目录
│   ├── index             //前台应用模块
│   ├── build.php
│   ├── command.php        //命令行配置
│   ├── common.php         //通用辅助函数
│   ├── config.php         //基础配置
│   ├── database.php       //数据库配置
│   ├── route.php          //路由配置
│   ├── tags.php           //行为配置
├── extend
│   └── fast               //FastAdmin扩展辅助类目录
├── public
│   ├── assets
│   │   ├── build            //打包JS、CSS的资源目录
│   │   ├── css                //CSS样式目录
│   │   ├── fonts            //字体目录
│   │   ├── img
│   │   ├── js
│   │   │   ├── backend
│   │   │   └── frontend     //后台功能模块JS文件存放目录
│   │   ├── libs            //Bower资源包位置
│   │   └── less            //Less资源目录
│   └── uploads                //上传文件目录
│   ├── index.php            //应用入口主文件
│   ├── install.php          //FastAdmin安装引导
│   ├── admin.php            //后台入口文件,强烈建议修改
│   ├── robots.txt
│   └── router.php
├── runtime                    //缓存目录    
├── thinkphp                //ThinkPHP5框架核心目录
├── vendor                    //Compposer资源包位置
├── .bowerrc                //Bower目录配置文件
├── LICENSE
├── README.md
├── bower.json                //Bower前端包配置
├── build.php                    
├── composer.json            //Composer包配置
└── think
├── application
│   └── admin
│       ├── controller
│       │   └── Test.php        //控制器类
│       ├── lang
│       │   ├── zh-cn            
│       │   │   └── test.php    //功能语言包,按需加载
│       │   └── zh-cn.php        //后台语言包,默认加载
│       ├── model
│       │   └── Test.php        //模型类
│       ├── validate
│       │   └── Test.php        //验证器类
│       └── view
│           └── test            
│               ├── index.html   //列表视图
│               ├── add.html     //添加视图
│               └── edit.html    //编辑视图
└── public
    └── assets
        └── js
            └── backend
                └── test.js      //功能模块JS文件

控制器

application/common/controller/Api.php //API接口基类控制器
application/common/controller/Backend.php //后台基类控制器
application/common/controller/Frontend.php //前台基类控制器,功能和 Backend.php 类似
  • 后台控制器的 index/add/edit/del/multi/recyclebin/destroy/restore/import/selectpage 全都是可选的方法,基类的这些方法使用 traits 进行引入,具体位置在 application/admin/library/traits/Backend.php
  • 默认生成的控制器所继承的父类中有 index/add/edit/del/multi/destroy/restore/recyclebin 八个方法,因此在当前控制器中可不用编写增删改查的代码。
  • 如果需要自己控制这部分逻辑,需要将 application/admin/library/traits/Backend.php 中对应的方法复制到当前控制器,然后进行修改。

数据库的设计规则

CREATE TABLE `fa_test` (
   `id` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT 'ID',
   `admin_id` int(10) NOT NULL DEFAULT '0' COMMENT '管理员ID',
   `category_id` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '分类ID(单选)',
   `category_ids` varchar(100) NOT NULL COMMENT '分类ID(多选)',
   `week` enum('monday','tuesday','wednesday') NOT NULL COMMENT '星期(单选):monday=星期一,tuesday=星期二,wednesday=星期三',
   `flag` set('hot','index','recommend') NOT NULL DEFAULT '' COMMENT '标志(多选):hot=热门,index=首页,recommend=推荐',
   `genderdata` enum('male','female') NOT NULL DEFAULT 'male' COMMENT '性别(单选):male=男,female=女',
   `hobbydata` set('music','reading','swimming') NOT NULL COMMENT '爱好(多选):music=音乐,reading=读书,swimming=游泳',
   `title` varchar(50) NOT NULL DEFAULT '' COMMENT '标题',
   `content` text NOT NULL COMMENT '内容',
   `image` varchar(100) NOT NULL DEFAULT '' COMMENT '图片',
   `images` varchar(1500) NOT NULL DEFAULT '' COMMENT '图片组',
   `attachfile` varchar(100) NOT NULL DEFAULT '' COMMENT '附件',
   `keywords` varchar(100) NOT NULL DEFAULT '' COMMENT '关键字',
   `description` varchar(255) NOT NULL DEFAULT '' COMMENT '描述',
   `city` varchar(100) NOT NULL DEFAULT '' COMMENT '省市',
   `price` float(10,2) unsigned NOT NULL DEFAULT '0.00' COMMENT '价格',
   `views` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '点击',
   `startdate` date DEFAULT NULL COMMENT '开始日期',
   `activitytime` datetime DEFAULT NULL COMMENT '活动时间(datetime)',
   `year` year(4) DEFAULT NULL COMMENT '年',
   `times` time DEFAULT NULL COMMENT '时间',
   `refreshtime` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '刷新时间(int)',
   `createtime` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '创建时间',
   `updatetime` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '更新时间',
   `weigh` int(10) NOT NULL DEFAULT '0' COMMENT '权重',
   `switch` tinyint(1) NOT NULL DEFAULT '0' COMMENT '开关',
   `status` enum('normal','hidden') NOT NULL DEFAULT 'normal' COMMENT '状态',
   `state` enum('0','1','2') NOT NULL DEFAULT '1' COMMENT '状态值:0=禁用,1=正常,2=推荐',
   PRIMARY KEY (`id`)
 ) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8 ROW_FORMAT=COMPACT COMMENT='测试表'

根据字段类型

类型 备注 类型说明
int 整形 自动生成type为number的文本框,步长为1
enum 枚举型 自动生成单选下拉列表框
set set型 自动生成多选下拉列表框
float 浮点型 自动生成type为number的文本框,步长根据小数点位数生成
text 文本型 自动生成textarea文本框
datetime 日期时间 自动生成日期时间的组件
date 日期型 自动生成日期型的组件
timestamp 时间戳 自动生成日期时间的组件

特殊字段

字段 字段名称 字段类型 字段说明
category_id 分类ID int 将生成选择分类的下拉框,分类类型根据去掉前缀的表名,单选
category_ids 多选分类ID varchar 将生成选择分类的下拉框,分类类型根据去掉前缀的表名,多选
weigh 权重 int 后台的排序字段,如果存在该字段将出现排序按钮,可上下拖动进行排序
createtime 创建时间 int 记录添加时间字段,不需要手动维护
updatetime 更新时间 int 记录更新时间的字段,不需要手动维护

以特殊字符结尾的规则

结尾字符 示例 类型要求 字段说明
time refreshtime int 识别为日期时间型数据,自动创建选择时间的组件
image smallimage varchar 识别为图片文件,自动生成可上传图片的组件,单图
images smallimages varchar 识别为图片文件,自动生成可上传图片的组件,多图
file attachfile varchar 识别为普通文件,自动生成可上传文件的组件,单文件
files attachfiles varchar 识别为普通文件,自动生成可上传文件的组件,多文件
avatar miniavatar varchar 识别为头像,自动生成可上传图片的组件,单图
avatars miniavatars varchar 识别为头像,自动生成可上传图片的组件,多图
content maincontent text 识别为内容,自动生成富文本编辑器(需安装富文本插件)
_id user_id int/varchar 识别为关联字段,自动生成可自动完成的文本框,单选
_ids user_ids varchar 识别为关联字段,自动生成可自动完成的文本框,多选
list timelist enum 识别为列表字段,自动生成单选下拉列表
list timelist set 识别为列表字段,自动生成多选下拉列表
data hobbydata enum 识别为选项字段,自动生成单选框
data hobbydata set 识别为选项字段,自动生成复选框
switch siteswitch tinyint 识别为开头字段,自动生成开头组件

注释说明

字段 注释内容 字段类型 字段说明
status 状态 int 将生成普通语言包和普通文本框
status 状态 int 将生成普通语言包和普通文本框
status 状态 enum(‘0’,’1’,’2’) 将生成普通语言包和单选下拉列表
status 状态:0=隐藏,1=正常,2=推荐 enum(‘0’,’1’,’2’) 将生成多个语言包和单选下拉列表,且列表中的值显示为对应的文字

常见问题

  1. 表结构发生变化:如果使用 php think crud 生成过表的 CRUD,当修改了表结构类型或新增了字段,此时只有重新生成 CRUD 或自己手动修改视图文件和JS文件。
  2. 生成关联模型:建议你在设计表时遵循以下规范,category_id 字段关联对应 fa_category 表主键,company_info_id 关联对应 fa_company_info 表主键。
  3. 如果字段名为 user_id,生成的动态下拉列表会自动匹配 user/index 这个控制器方法,如果你发现CRUD后无法显示关联数据列表,请检查视图中元素 data-source 的值是否正确。

其他功能

  • 启用二级菜单功能:找到 application/config.php 文件最下方有个 multiplenav 配置,默认是 false,如果需要启用,请将 multiplenav 置为 true 即可。启用后,菜单规则中的第一级将作为一级菜单显示在顶部。我们可以在权限管理->菜单规则中额外添加一级菜单,然后再重新规划我们的菜单。

问题

  • 删除命令不能删除在二级目录下生成的控制器和视图。
  • 打包命令php think min -m all -r all(已修改 application\admin\command\Min.php 的 $nodeExec 值),打包完后找不到 build 目录。
  • 一键生成 API 文档生成后的位置。
发布了38 篇原创文章 · 获赞 4 · 访问量 4万+
展开阅读全文

如何获取动态创建的ID?

10-14

<div class="post-text" itemprop="text"> <p>I'm an absolute beginner in using javascript and ajax and that's why I'm stuck now. I have a while loop in which there are 2 different buttons. Both work, as I imagine, except for one little thing ...</p> <p>The <code>product-id</code> is always passed only for the first element or, if I change it for the last element. How can I pass the correct product ID to the script?</p> <p><strong>This is my PHP file:</strong></p> <pre><code><?php while ( $product = $browse->fetch( PDO::FETCH_ASSOC ) ) : $postid = $product[ 'id' ]; $userid = 1; ?> <div id="content_<?php echo $postid ?>"> <div id="reload_<?php echo $postid ?>" class="row postfarbe browse"> <form method='post' action="" onsubmit="return add();"> <input type="hidden" id="userid" value="<?php echo $userid ?>" class="input-box"> <input type="hidden" id="productid" value="<?php echo $postid ?>" class="input-box"> <input type="hidden" id="collection" value="1" class="input-box"> <input type="hidden" id="wish" value="0" class="input-box"> <input type="submit" id="submit" value="Add to Collection" class="btn my-2 my-sm-0 btn-outline-dark btn-sm"> </form> </div> </div> <?php endwhile; ?> </code></pre> <p><strong>My Javascript is:</strong></p> <pre><code>function add() { var userid = document.getElementById("userid").value; var productid = document.getElementById("productid").value; var collection = document.getElementById("collection").value; var wishlist = document.getElementById("wish").value; if(userid && productid && collection && wishlist) { $.ajax ({ type: 'post', url: 'post_collection.php', data: { user_id:userid, product_id:productid, collection_id:collection, wishlist_id:wishlist }, success: function (response) { $("#content_"+ productid).load(" #reload_" + productid); } }); } return false; } </script> </code></pre> <p>I know that the product id in my example is always the same, but how can I pass the correct one to the script if there are 10 or more entries in the loop?</p> </div> 问答

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 大白 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览