分享生成缩略图函数及其它

已邀请:

jinmandou - 麻水人家,麻水特产有售。蜜柚之乡

赞同来自:

很多要用到的,缩略图生成函数。贴代码吧,放到common.php里。
/*
*自动生成缩略图函数
*/
function thumb($src = '', $width = 200, $height = 200, $type = 1, $replace = false) {
$domain = \think\facade\Request::domain();
$src = str_replace($domain ,"",$src);
$src = './'.$src;
if(is_file($src) && file_exists($src)) {
$ext = pathinfo($src, PATHINFO_EXTENSION);
$name = basename($src, '.'.$ext);
$dir = dirname($src);
if(in_array($ext, array('gif','jpg','jpeg','bmp','png'))) {
$name = $name.'_thumb_'.$width.'_'.$height.'.'.$ext;
$file = $dir.'/'.$name;
if(!file_exists($file) || $replace == TRUE) {
$image = \think\Image::open($src);
$image->thumb($width, $height, $type);
$image->save($file);
}
$file=str_replace("\\","/",$file);
$file = '/'.trim($file,'./');
return $file;
}
}
$src=str_replace("\\","/",$src);
$src = '/'.trim($src,'./');
return $src;
}

用法是一般在模板里直接调用就好。如
<img src="{:thumb($type.icon,80,80)}" class="aui-icon-large">
里面$type.icon是本来大图的scr地址,后面80,80是生成缩略图的大小

jinmandou - 麻水人家,麻水特产有售。蜜柚之乡

赞同来自:

再放一个我增加功能了的application\common\controller 控制器下的Common 库
<?php
// +----------------------------------------------------------------------
// | [RhaPHP System] Copyright (c) 2017 http://www.rhaphp.com/
// +----------------------------------------------------------------------
// | [RhaPHP] 并不是自由软件,你可免费使用,未经许可不能去掉RhaPHP相关版权
// +----------------------------------------------------------------------
// | Author: Geeson <qimengkeji@vip.qq.com>
// +----------------------------------------------------------------------

namespace app\common\controller;

use app\common\model\Setting;
use think\facade\Config;
use think\Controller;
use think\facade\Request;
use think\facade\Session;
class Common extends Controller
{
public $mid;//公众号标识
public $adminLogin =false;//为 TRUE 需要管理登录,一般后台管理应用的控制器需要设为 true
public $isWexinLogin = false;//是否微信登录 false为否,true为是
public $onlyWexinOpen = false;//是否必须在微信浏览器打开 false为否,true为是
public $scope = 'snsapi_userinfo';//snsapi_base||snsapi_userinfo

public function initialize()
{
$mid = Request::param('mid');
if (!$mid) {
$this->error('公众号标识mid不存在');
} else {
$this->mid = $mid;
}
if (!$mpInfo = getMpInfo($mid)) {
$this->error('没有该公众号信息');
} else {
$options = array(
'appid' => $mpInfo['appid'],
'appsecret' => $mpInfo['appsecret'],
'token' => $mpInfo['valid_token'],
'encodingaeskey' => $mpInfo['encodingaeskey']
);
Session::set('mp_options', $options);
}
if ($this->onlyWexinOpen == true) {//需要在微信浏览器打开
if (isset($_SERVER['HTTP_USER_AGENT']) && strpos($_SERVER['HTTP_USER_AGENT'], 'MicroMessenger') == false) {
$wxObj = getWechatActiveObj($this->mid);
$url = $wxObj->getOauthRedirect(getHostDomain(), 'state', $this->scope);
$this->redirect($url);
}
}
if($this->adminLogin==true){
if (empty(getAdmin())) {
$this->redirect('admin/Login/index');
}
}
if (empty(getMember())) {
if ($this->isWexinLogin == true) {
if (empty(getOrSetOpenid())) {
session('callbackUrl', getHostDomain() . $_SERVER['REQUEST_URI']);
$setingModel = new Setting();
$registerConfValue = $setingModel->getSetting(['mpid' => $mid, 'name' => 'register','cate'=>'mp']);
if (!empty($registerConfValue)) {
if ($registerConfValue['register_type'] == 3) {
$this->redirect('mp/Login/loginByReply', ['mid' => $mid]);
} elseif ($registerConfValue['register_type'] == 2) {//系统自动注册
$this->redirect('mp/Login/registerByAuto', ['mid' => $mid, 'scope' => $this->scope]);
}
} else {
$this->error('你还没有保存《授权&注册->注册设置》,请先前往后台进行设置');
}
}
}
}
getOrSetOpenid(input('openid'));
$this->assign('title',$mpInfo['name']);
parent::initialize(); // TODO: Change the autogenerated stub
}

/**
* 微信授权或者注册登录
* 如果你控制器某个方法想要登录可以使用此,$isWexinLogin这个进入控制器后台就执行登录或者注册
* @param string $scope
*/
public function wexinLogin($scope='snsapi_userinfo'){
if (empty(getMember())) {
// if (empty(getOrSetOpenid())) {
session('callbackUrl', getHostDomain() . $_SERVER['REQUEST_URI']);
$setingModel = new Setting();
$registerConfValue = $setingModel->getSetting(['mpid' => $this->mid, 'name' => 'register','cate'=>'mp']);
if (!empty($registerConfValue)) {
if ($registerConfValue['register_type'] == 3) {
$this->redirect('mp/Login/loginByReply', ['mid' => $this->mid]);
} elseif ($registerConfValue['register_type'] == 2) {//系统自动注册
$this->redirect('mp/Login/registerByAuto', ['mid' => $this->mid, 'scope' => $scope]);
}
} else {
$this->error('你还没有保存《授权&注册->注册设置》,请先前往后台进行设置');
}
// }
}
}

/**
* 如果你的应用需要某个应用支持的,可以使用此检测
* 检测某个应用是否安装与启用
* @param string $addonName
*/
public function check($addonName=''){
$path=ADDON_PATH.$addonName.DS;
$info=getAddonInfo($addonName,$this->mid);
if(!file_exists($path) || empty($info)){
$this->error('检测到你没有安装'.$addonName.'应用!');
}
if($info['status']==0){
$this->error('检测到你没有启用'.$info['name'].'应用!');
}
}

/**
* 数据库字段 网页字段转换
* #Date:
* @param $array 转化数组
* @param $method 访问方式
* @return 返回数据数组
*/
protected function buildParam($array = [], $method = 'param')
{
$result_data = [];
if (empty($array)) {
return $this->request->$method();
} elseif (is_array($array) && !empty($array)) {
foreach ($array as $index => $item) {
if (is_numeric($index)){
$result_data[$item] = trim($this->request->$method($item));
} else {
$result_data[$index] = trim($this->request->$method($item));
}
}
}
return $result_data;
}



/**
* 快速调用执行model函数
* Power:楚鸟
* Email:615276057@qq.com
* @param $param_data
* @param bool|false $validate_name 验证器名称,如 app\api\validate\Base.userreg
* @param bool|false $model_name 模型名称
* @param string $action_name 控制器名称
* @return array
*/
protected function doModelAction($param_data,$validate_name = false, $model_name = false,$action_name='editData'){
if ($validate_name != false) {
$result = $this->validate($param_data, $validate_name);
if (true !== $result) return ajaxMsg(0, $result);
}
if($model_name ===FALSE) $model_name = $this->getClassName();
$model = App::model($model_name);
if (!$model) return ajaxMsg(0, "模型不存在");
return $model->$action_name($param_data);
}

}

 
使用方法,在别的控制器里继承了调用。比如在插件的控制器里
 
这是我在本论坛开源的那个商城里修改的部分代码,正好用上上面的。
if(Request::isAjax()){ 
            $images = input('post.images/a');
            $data = $this->buildParam(['id','mid','type','title','description','price','freight','status','content','count','index']);
            if($images){
                $data['images'] = json_encode($images);//图片
            }
            $data['mpid'] = $data['mid'];
            unset($data['mid']);
            $model_name='addons\weshop\model\WeshopGoods';
            if(!$data['id']){
                $validate_name =  [
                    'title|名称'  =>  'require|max:50',
                    'content|详情内容'=>'require',
                    'images|商品图'=>'min:10|require',
                    'title|商品名称'=>'unique:weshopGoods'
                ]; 
            }else{
                $validate_name =  [
                    'title|名称'  =>  'require|max:50',
                    'content|详情内容'=>'require',
                    'images|商品图'=>'min:10|require',
                ]; 
            }
           
            $retdata = $this->doModelAction($data,$validate_name,$model_name,'upsave');
            return  $retdata ? ajaxReturn(null, 1, '操作成功') : ajaxReturn(null, 1, '操作失败');

jinmandou - 麻水人家,麻水特产有售。蜜柚之乡

赞同来自:

$this->doModelAction 的好处是可以随时灵活的调用不同的控制器,模型,验证器

要回复问题请先登录注册