2025年10月

目的是在不暴露后台附件地址情况下前台利用附件id从pictures表里查询附件地址执行下载;
1.首先给模型添加单附件字段attachment
2.找到前台控制器HomeController.php里面栏目处理器函数function jizhi(){}里面的循环输出url的地方,加上处理附件信息

foreach($data as $k=>$v){
    if(!isset($v['url'])){
        $data[$k]['url'] = gourl($v,$v['htmlurl']);
    }
    //返回附件信息s
    if(!isset($v['fid'])){
        if(isset($v['attachment'])){
        $fres = M('pictures')->find(['litpic'=> $data[$k]['attachment']]);
        if($fres){
          $data[$k]['fid'] = $fres['id'];
          $data[$k]['ftype'] = $fres['filetype'];
          $data[$k]['ftime'] = date('Y-m-d',$fres['addtime']);
          $data[$k]['fsize'] =usize($fres['size']);
        }else{
          $data[$k]['fid'] = 0;  
        }
        }else{
          $data[$k]['fid'] = 0;     
        }
           
    }
    //返回附件信息e
}

3.在前台控制器添加下载处理函数

function download() {
    if($_POST){
        $id = $this->frparam('fid',1,'POST');
        $file_name =$this->frparam('file_name',1,'POST');
        if(!$id||!$file_name){
           http_response_code(405);
           //echo "错误:参数缺失";
           exit; 
        }
        if (!preg_match('/^[\w\x{4e00}-\x{9fa5}\-]+$/u', $file_name)) {
        http_response_code(405);
        //echo "错误:文件名包含非法字符";
        exit;
       }
        $fres = M('pictures')->find(['id'=> $id]);
        if($fres){
            $file_url = $fres['litpic'];
            $now =date('Ymd_His', time());
            $download_name = $file_name.$now. '.' . $fres['filetype'];
            if (file_exists(APP_PATH.$file_url) && is_file(APP_PATH.$file_url)) {
                $fileSize = filesize(APP_PATH.$file_url);
                        header('Content-Description: File Transfer');
                        header('Content-Type: application/octet-stream');
                        header('Content-Disposition: attachment; filename="' . basename($download_name) . '"');
                        header('Expires: 0');
                        header('Cache-Control: must-revalidate');
                        header('Pragma: public');
                        header('Content-Length: ' . $fileSize);
                readfile(APP_PATH.$file_url);
                exit;
            }else{
                http_response_code(404); 
                //echo "错误:文件不存在。";
                exit; 
            }
            
        }else{
          http_response_code(404);  
          //echo "错误:文件不存在。";
          exit;    
        }
     
    }else{
      http_response_code(405);  
      exit;
    }
} 

Ueditor编辑器在上传图片后,所插入的img标签中,title、alt属性设置的值可能不是我们希望的值,同时,当鼠标移到图片上时会出现title属性值的内容或者添加自定loading属性。此时,可通过修改ueditor.all.js文件中这几个属性的赋值内容,操作如下图所示:
//1.修改过滤

var notTransAttrs = {
    'href':1,
    'src':1,
    '_src':1,
    '_href':1,
    'cdata_data':1,
    'class':1,
    'loading':1
};

//2.修改回调

function callback(){
                try{
                    var link, json, loader,
                        body = (iframe.contentDocument || iframe.contentWindow.document).body,
                        result = body.innerText || body.textContent || '';
                    json = (new Function("return " + result))();
                    link = me.options.imageUrlPrefix + json.url;
                    if(json.state == 'SUCCESS' && json.url) {
                        loader = me.document.getElementById(loadingId);
                        loader.setAttribute('src', link);
                        loader.setAttribute('_src', link);
                        loader.setAttribute('loading', 'lazy');
                       // loader.setAttribute('title', json.title || '');
                        loader.setAttribute('title', '');
                        loader.setAttribute('alt', json.original || '');
                        loader.removeAttribute('id');
                        domUtils.removeClasses(loader, 'loadingclass');
                    } else {
                        showErrorLoader && showErrorLoader(json.state);
                    }
                }catch(er){
                    showErrorLoader && showErrorLoader(me.getLang('simpleupload.loadError'));
                }
                form.reset();
                domUtils.un(iframe, 'load', callback);
}

cms使用过程中,会遇到父栏目直接链接到第一个子栏目的情况,最方便的方法就行栏目设置填写外链,即直接填写/xxx.html,这样生成的网站地图中的这个栏目链接也就变成/xxx.html了,不会自带域名,下面是修复办法
1.indexController.php加入以下函数

//生成完整链接函数
function completeUrl($url, $siteDomain) {
    if (preg_match('~^https?://~i', $url)) {
        return $url;
    }
    $domain = rtrim($siteDomain, '/');
    $path = ltrim($url, '/');
    return $domain . '/' . $path;
}

2.在文件下面找到网站地图生成函数,在栏目逻辑这里应用函数

 if($v=='classtype'){
    foreach($list as $s){
      if($this->classtypedata[$s['id']]['url']){
         if($cachedata){
             echo $this->completeUrl($this->classtypedata[$s['id']]['url'], $www).'<br>';
          }
          if($filetype=='xml'){
              $l_pc.='<url>
        <loc>'.$this->completeUrl($this->classtypedata[$s['id']]['url'], $www).'</loc>
            <lastmod>'.date('Y-m-d').'T08:00:00+00:00</lastmod>
            <changefreq>'.$freq[$k].'</changefreq>
            <priority>'.$priority[$k].'</priority>
             </url>';

$file = Get-Item "C:\Users\Administrator\Desktop\00a\1002\具体文件名"
$file.CreationTime = [datetime]"2025-10-02 16:35:34"
$file.LastWriteTime = [datetime]"2025-10-02 16:47:20"
$file.LastAccessTime = [datetime]"2025-10-02 16:47:20"