分类 笔记 下的文章

去除phpoffice默认插入图片产生边框

项目中通过phpoffice(v0.17)生成word文件,插入word的图片默认带黑边框问题。

解决方式:
路径:vendor/phpoffice/phpword/src/PhpWord/TemplateProcess.php

位置:578行 stroked=""
$imgTpl = '<w:pict><v:shape type="#_x0000_t75" style="width:{WIDTH};height:{HEIGHT};" stroked=""><v:imagedata r:id="{RID}" o:title=""/></v:shape></w:pict>';

composer基础使用

Composer 需要 PHP 5.3.2+ 以上版本,且需要开启 openssl。

composer -v 查看版本

推荐使用阿里云全量镜像:
composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/
如仅当前项目使用则可去除-g选项。

取消配置:composer config -g --unset repos.packagist

- 阅读剩余部分 -

thinkphp6中where与whereOr同时使用

whereOr与where同时使用时,需使用闭包模式,避免sql语句错误。

$user = Db::name('user')->where('uuid', $where['uuid'])->find();
if($user['phone'] && $user['card_id']){
    $map1 = [['phone', '=', $user['phone']]];
    $map2 = [['card_id', '=', $user['card_id']]];
    $model = $model->where(function ($query) use ($map1, $map2) {
        $query->whereOr([$map1, $map2]);
    });
}elseif($user['card_id']){
    $model = $model->where('card_id', $user['card_id']);
}elseif($user['phone']){
    $model = $model->where('phone', $user['phone']);
}else{
    $model = $model->where('id', 0);
}

ThinkPHP6操作oracle数据库

ThinkPHP6操作oracle数据库 常见问题:

  1. 使用navicate连接oracle数据库报错:ORA-28547:connection to server failed, probable Oracle Net admin error
    解决:“工具”-“选项”-“环境”oci环境中,下载并指定oracle对应的oci.dll,重启navicate即可。下载地址:https://www.oracle.com/technetwork/database/features/instant-client/index-097480.html
  2. 必须确保php安装的扩展php_pdo_oci.dll php_oci8.dll同oracle版本对应及对应线程类型。windows版下载地址:https://pecl.php.net/package/oci8/2.2.0/windows 或使用https://windows.php.net/downloads/pecl/releases/oci8/2.2.0/

- 阅读剩余部分 -

Excel中快速获取两列数据中的重复项

如图,需查询A列同E列中的重复项。

2022-08-04T08:13:52.png

在需展示的列单元格中输入:=IF(COUNTIF(E:E,A1),A1,""),意思是用A1单元格的数值在E列中查重,如果有重复值就在单元格中显示重复的数值。
按住ctrl向下填充即可获得两列中的重复项,再进行排序等操作即可。

依据农历获取阳历/阳历转农历、生日提醒等

项目中常用到生日提醒,且生日通常为农历生日。

本接口使用有限,推荐自定义转化类,链接:PHP阳历转阴历(农历)类,支持生肖、时辰等老黄历

基础方法:

//获取农历生日
function getNongLi($day='')
{
    $day = $day?:date('Y-m-d');
    $nongli = \sensen\services\HttpService::getRequest('https://api.xlongwei.com/service/datetime/convert.json?day='.$day);
    $nongli = json_decode($nongli, true);
    
    $end = $nongli['lunarYear'].'-'.$nongli['lunarMonth'].'-'.$nongli['lunarDay'];
    $end = date('m-d', strtotime("{$end}"));
    return $end;
}

//获取阳历生日
function getYangLi($day='')
{
    if(!$day) return '';
    $arr = explode('-', $day);
    $nongli = \sensen\services\HttpService::getRequest("https://api.xlongwei.com/service/datetime/yangli.json?lunarYear={$arr[0]}&lunarMonth={$arr[1]}&lunarDay={$arr[2]}");
    $nongli = json_decode($nongli, true);
    
    if(isset($nongli['status'])) return '';
    
    return $nongli['day'];
}

- 阅读剩余部分 -

JS美化json数据

项目日志列表中需对报错数据详细信息进行查阅,需对json格式进行美化,如图:

145.png

样式代码:

<style>
    .key{
        color: red;
    }
    .string{
        color: green;
    }
    .layui-layer-content{
        padding: 10px;
    }
</style>

layer弹窗展示数据:

table.on('tool(table-toolbar)', function(obj){
    var data = obj.data;
    var str = prettyFormat(data.data);
    if(obj.event === 'detail'){
        layer.open({
            type: 1,
            title: '数据详情',
            skin: 'layui-layer-rim', //加上边框
            area: ['600px', '500px'], //宽高
            content: str
        });
    }
});

//json格式美化
function prettyFormat(json) {
    try {
        // 设置缩进为2个空格
        //str = JSON.stringify(JSON.parse(str), null, 2);
        str = JSON.stringify(json, null, 2);
        str = str
            .replace(/&/g, '&')
            .replace(/</g, '<')
            .replace(/>/g, '>');
        str = str.replace(/("(\\u[a-zA-Z0-9]{4}|\\[^u]|[^\\"])*"(\s*:)?|\b(true|false|null)\b|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?)/g, function (match) {
            var cls = 'number';
            if (/^"/.test(match)) {
                if (/:$/.test(match)) {
                    cls = 'key';
                } else {
                    cls = 'string';
                }
            } else if (/true|false/.test(match)) {
                cls = 'boolean';
            } else if (/null/.test(match)) {
                cls = 'null';
            }
            return '<span class="' + cls + '">' + match + '</span>';
        });
        return "<pre>"+str+"</pre>"
    } catch (e) {
        alert("异常信息:" + e);
    }
}