精华内容
下载资源
问答
  • Windows创建规则窗口

    2018-06-27 16:26:31
    规则窗口的实现是通过区域对象来实现,通过MFC中CRgn类创建规则区域来实现,好吧,下面就来实现一个小精灵不规则窗口:... 更多精彩教程,视频教学、源码分享请加入QQ群:569268376     //加载一下位图 ...

            不规则窗口的实现是通过区域对象来实现,通过MFC中CRgn类创建不规则区域来实现,好吧,下面就来实现一个小精灵不规则窗口:

    准备一张背景为黑色的图片

     

     接下来在初始化对话框中加载位图,创建一个不规则区域,原理就是获取每一个像素点颜色,如果为黑色,就将他剔除。

     更多精彩教程,视频教学、源码分享请加入QQ群:569268376

     

     

      //加载一下位图
      CBitmap bmp;
      bmp.LoadBitmap(IDB_BITMAP3);
      //获取位图的宽和高
      BITMAP logBmp;
      bmp.GetBitmap(&logBmp);
    
      //创建内存DC
      CDCmemDC;
      memDC.CreateCompatibleDC(NULL);
      memDC.SelectObject(&bmp);
     
      更多精彩教程,视频教学、源码分享请加入QQ群:569268376
    
      //整个位图区域
      CRgn wndRgn;
      wndRgn.CreateRectRgn(0, 0, logBmp.bmWidth, logBmp.bmHeight);
     
    
      for (intx = 0; x < logBmp.bmWidth;x++)
      {
         for (inty = 0; y < logBmp.bmHeight;y++)
         {
           CRgn rgn;//位图的每个像素区域
           rgn.CreateRectRgn(x,y,x+1,y+1);
           if (RGB(0, 0, 0) == memDC.GetPixel(x, y))
           {
             wndRgn.CombineRgn(&wndRgn, &rgn, RGN_XOR);
           }
         }
      }
    
      SetWindowRgn(wndRgn, TRUE);

    运行起来,程序的效果为:

    注意此时的对话框已经进对话框的边框风格已经去掉了。 

    接下来就是在OnPaint函数中把精灵贴上

         //加载一下位图
         CBitmapbmp;
         bmp.LoadBitmap(IDB_BITMAP3);
         //获取位图的宽和高
         BITMAPlogBmp;
         bmp.GetBitmap(&logBmp); 
    
         //创建内存DC
         CDCmemDC;
         memDC.CreateCompatibleDC(NULL);
         memDC.SelectObject(&bmp);
         dc.BitBlt(0, 0, logBmp.bmWidth, logBmp.bmHeight,&memDC, 0, 0, SRCCOPY);

    好了,效果就有了:

    更多精彩教程,源码分享请加入QQ群:569268376

    展开全文
  • SD Maid用户规则 说明 SD Maid是安卓上最强大的清理类应用,但它默认的规则没有很好地适配...4、SD Maid用户规则相关讨论 QQ : 945792668 TG : @sdmaid_userfilter 使用方法 1、设置 参照 2、用户规则 删除原规则
  • 欢迎一起研究pblk的小伙伴入群,qq群:851435225 1:下载qemu-nvme源码,配置安装 2:制作qemu系统 3:启动系统 4:进入系统加载pblk驱动,初始化nvme设备,创建/删除pblk设备 a:编辑pblk驱动模块,安装 b:...

    目录

     

    欢迎一起研究pblk的小伙伴入群,qq群:851435225

    1:下载qemu-nvme源码,配置安装

    2:制作qemu系统

    3:启动系统

    4:进入系统加载pblk驱动,初始化nvme设备,创建/删除pblk设备

    a:编辑pblk驱动模块,安装

    b:查看nvme设备信息

    c:创建pblk设备

    d:删除一个pblk设备

    5:数据规则

    a:部分数据读取规则:

    b:磨损均衡策略:

    6:chunk状态转换图:

    7:pblk整体代码框架

    8:pblk IO path

    注:如何更新Ubuntu内核

    ubuntu18.10源

    强制关机后无有线连接解决办法:


    欢迎一起研究lightnvm子系统的小伙伴入群,qq群:851435225

    这里只列出了部分阶段性分析内容,欢迎做这方面开发的或者有兴趣的小伙伴一起来深入研究。

    使用Ubuntu18.10版本,内核为4.18.10直接支持pblk。

    1:下载qemu-nvme源码,配置安装

    a:git clone https://github.com/OpenChannelSSD/qemu-nvme.git

    b:sudo ./configure --enable-kvm --target-list=x86_64-softmmu --enable-linux-aio --enable-sdl --disable-werror --disable-xen --prefix=$HOME/qemu-nvme

     

    2:制作qemu系统

    a:qemu-img create -f raw ubuntu.raw 20G

    b:qemu-system-x86_64 -m 3G -enable-kvm ubuntu.raw -cdrom /mnt/hgfs/E/ubuntu-18.10-desktop-amd64.iso

     

    3:启动系统

    a:dd if=/dev/zero of=blknvme bs=1M count=8000

    b:qemu-system-x86_64 -m 4G -smp 4 -enable-kvm -hda ubuntu.raw -drive file=blknvme,if=none,id=blknvme -device nvme,drive=blknvme,serial=deadbeef,namespaces=1,lnum_pu=4,lstrict=1,meta=16,mc=3

     

     

    注:OCSSD版本2

    1个channel,每个channel包含4个PU,所以总共4个luns/PU;

    每个PU包含125个chunk,每个chunk包含4096个扇区,一共500个chunk【4*125】,总共2048000个扇区【500*4096】;

    每次最少要在一个chunk里面写入4个扇区。最好写入8个扇区的数据。在读取某个块数据时这个块不要进入缓存的32个扇区/块数据里面,否则不能读取到想要的磁盘数据。控制器一次可以open的最大chunk数量,0表示所有都可以。单个并行单元里面一次可以打开的最大chunk数量;

    典型的读取一个单元的时间:70毫秒,最大读取时间100毫秒。典型的写入一个写单元时间190毫秒,最大写入时间350毫秒。典型的chunk重置时间300毫秒,最大重置时间300毫秒;

    LBA格式:channel分配2^0=1个地址长度,因为只有1个channel。PU有4个所以要用两个地址长度指定某个PU单元。每个PU包含chunk有125个,所以需要2^7=128。每个chunk包含4096个扇区,所以需要2^12=4096的地址长度来表示某个起始扇区地址。

    LBA分布:sec{0,11}-chk{12-18}-lun{19-20}-ch{21};

    各个段的掩码;

    扇区大小4K,oob大小16字节。

     

    4:进入系统加载pblk驱动,初始化nvme设备,创建/删除pblk设备

    a:编辑pblk驱动模块,安装

    修改drivers/lightnvm Makefile文件添加 CONFIG_MODULE_SIG=n,避免加载驱动失败

    make modules SUBDIRS=drivers/lightnvm

    make modules_install SUBDIRS=drivers/lightnvm

    modprobe pblk.ko

    b:查看nvme设备信息

    sudo nvme lnvm id-ns /dev/nvme0n1 -H

     

    c:创建pblk设备

     

    注:可通过/sys/device/virtual/block/mypblk/pblk查看相关sysfs信息

    pblk_core_init:

    4个PU,每个为读准备32个,一共128。因为每个扇区大小为4K,每个页大小也为4K,pblk的每chunk最小写入页数量大小使用的是nvm设备的建议写入扇区数量8转换成的页数量,也就是8*4/4=8页数据。因为只有4个PU,所以最多可以一次写入8*4=32个页的数据。

    pblk_lines_init->

    pblk_line_meta_init:

    每个chunk/block包含4096个扇区,一共4个PU,所以一个line里面一共包含4*4096=16384个扇区。每个line里面的block/trunk数量等于所有PU的数量也就是4。64位平台long型数据占用8个字节,也就是占用64个bit,所以每个line里面的block使用情况只需要一个long型数据占用的bit数量就够了,也就是8个字节。一共16384个扇区,所以需要16384/64个long型数据,每个long占用8字节,所以需要16384/64*8=2048个字节。lun信息雷同。line管理器的中间阈值为该line包含的所有扇区数量的一半,也就是8192,high为四分之一,也就是4096.元数据与数据之间距离等于所有lun数量除以2再乘以一个chunk里面的最小写入页数量。

    起始元数据区域需要8个扇区,总大小为32768字节数据;

    pblk_line_mg_init:

    终止元数据区域需要40个扇区,总大小为163840字节,bb需要0扇区,最少保留的好的扇区数为2;

    预备3个终止元数据区域,大小跟前面的0号相同;

    pblk_luns_init:

    初始化pblk的lun信息,指向tgt的lun的基地址;

     

     

    d:删除一个pblk设备

     

     

    5:数据规则

    a:部分数据读取规则:

     

    b:磨损均衡策略:

    6:chunk状态转换图:

    7:pblk整体代码框架

    8:pblk IO path

    注:如何更新Ubuntu内核

    a:apt-cache search linux-source

    b:sudo apt-get install linux-source-xxx

    c:进入/usr/src目录解压源码,进行配置【将pblk配置为模块】,make,make modules, make modules_install, make install

    d:重启系统

    单独编译内核里面的一个驱动模块

    make modules SUBDIRS=

    ubuntu18.10源

    ##中科大源

    deb https://mirrors.ustc.edu.cn/ubuntu/ cosmic main restricted universe multiverse

    deb-src https://mirrors.ustc.edu.cn/ubuntu/ cosmic main restricted universe multiverse

    deb https://mirrors.ustc.edu.cn/ubuntu/ cosmic-updates main restricted universe multiverse

    deb-src https://mirrors.ustc.edu.cn/ubuntu/ cosmic-updates main restricted universe multiverse

    deb https://mirrors.ustc.edu.cn/ubuntu/ cosmic-backports main restricted universe multiverse

    deb-src https://mirrors.ustc.edu.cn/ubuntu/ cosmic-backports main restricted universe multiverse

    deb https://mirrors.ustc.edu.cn/ubuntu/ cosmic-security main restricted universe multiverse

    deb-src https://mirrors.ustc.edu.cn/ubuntu/ cosmic-security main restricted universe multiverse

    deb https://mirrors.ustc.edu.cn/ubuntu/ cosmic-proposed main restricted universe multiverse

    deb-src https://mirrors.ustc.edu.cn/ubuntu/ cosmic-proposed main restricted universe multiverse

    强制关机后无有线连接解决办法:

    第一步:停掉网络服务

    #sudo service NetworkManager stop

    第二步:清理网络状态文件

    #sudo  rm /var/lib/NetworkManager/NetworkManager.state

    第三步:开启网络服务

    #sudo  service NetworkManager start

     

    展开全文
  • HQChart使用教程73-使用Vue3.0创建HQChart图形序预备知识获取dom元素mountedmethods成员变量结束语demo源码App.vue交流QQ群: 950092318HQChart代码地址个人爱好(模型/摄影) 序 听说Vue3.0发布了, 群里的很多小伙伴...

    听说Vue3.0发布了, 群里的很多小伙伴们都开始询问HQChart是否可以在Vue3.0里面使用。HQChart是用js裸写开发的, 应该是可以的。 只要根据vue3.0的规则把一个div绑定到hqchart实例上就可以了。我想着这个很简单,就把任务给了页面开发小组, 让他们做一个demo. 最后任务失败了, 没有搞定。只能抽空自己做了,哎~~~。 花了3小时,看了vue3.0的文档,直接就吐血,对一个常年使用c++开发的人, 面对对象开发是必不可少的。 vue.3.0里面直接就去掉了this,哎 …

    预备知识

    获取dom元素

    最原始的方法通过document.getElementById()来获取, 在vue2.0通过$refs来获取, vue3.0这个没了, 需要用ref()来生成一个dom对应的变量, 然后把这个变量暴露出去。vue就会自动给你绑定了。 很绕口吧, 我也是看了半天才明白的。下面就是以app这个div绑定到变量DivApp上的例子

    <template>
        <div id="app" ref='DivApp' style="height:100%; width:100%">
           ......
        </div>
    </template>
    
    export default {
    
        name: 'HQChartDemo',
    
        setup(/*props, context*/)
        {
            .......
            var DivApp=ref(null); //创建一个变量
            .......
            
           return { 
                 .....
                //DOM元素
                DivApp,  //把变量暴露出去 ref='DivApp' 就可以自动绑定了
               .......
            };
        }
     } 
    

    mounted

    vue2.0里面的mounted, 在vue3.0就没有了, 需要使用onMounted() 代替, 在setup()里面定制这个函数.

    setup(/*props, context*/)
    {
    	..........
        onMounted(()=>
        {
            console.log(`[HQChartDemo::mounted]`);
            window.onresize = ()=>{ OnSize() }
    
            OnSize();              
            CreateKLineChart(0);  
        });
        ........
    }
    

    methods

    vue2.0里面的methods也没有了,在vue3.0直接把函数定义在setup()里面就可以, 如果要给外部就,就返回,内部就不用返回了

    setup(/*props, context*/)
     {
    		const ChangeSymbol=function(symbol)   //切换股票
            {
                HQChartData.Symbol=symbol;
                HQChartData.Chart.ChangeSymbol(HQChartData.Symbol);
            };
            
            //内部函数不暴露出去
            const IsKLineChart=function()
            {
                if (!HQChartData.Chart || !HQChartData.Chart.JSChartContainer) return;
                return HQChartData.Chart.JSChartContainer.ClassName=="KLineChartContainer";
            };
            
           return { 
                ......
                //导出函数
                ........
                ChangeSymbol,   //切换代码,作为接口暴露出去给外部用
            };
    
    }
    

    成员变量

    在vue2.0里面都是放在data()里面的, vue3.0放在setup() 里面, 如果只是内部用可以不返回。
    hqchart需要在图形创建以后保存一个实例, 后续k线图的操作都是在这个实例上的操作。所以需要一个内部变量(Chart)来保存

    setup(/*props, context*/)
    {
         const HQChartData=
         { 
             Symbol:'600000.sh',  //代码
             Chart:null,          //图形控件
         };
         ......
    }
    

    由于没有this这个东西了, 所有函数直接用HQChartData.Chart 就可以访问了。

    结束语

    有了这些知识以后,就可以使用vue3.0来创建hqchart了。
    vue3.0我不懂, 有说的不对的地方,请指正。另外还有小伙伴问ts创建hqchart, 这个ts我真不懂, 也没用过, 等以后我空了, 再帮你们看吧, 如果有谁用ts创建过hqchart也欢迎分享出来。

    demo源码

    App.vue

    <template>
        <div id="app" ref='DivApp' style="height:100%; width:100%">
           <div ref='DivButtons'>
                <div>
                    <button  @click="ChangePeriod(0)">日线</button>
                    <button  @click="ChangePeriod(4)">1分钟</button>
                    <button  @click="ChangePeriod(6)">15分钟</button>
                    <button  @click="ChangeMinute()">分时</button>
                    <button  @click="ChangeSymbol('000001.sz')">平安银行</button>
                    <button  @click="ChangeSymbol('600999.sh')">招商银行</button>
                </div>
            </div>
    
            <div>
                <div id="kline" ref='DivKLine' class='hqchart' style="height:400px; width:500px"></div>  
            </div>
        </div>
    </template>
    
    <script>
    import { onMounted, onUnmounted, ref } from 'vue'
    import HQChart from 'hqchart'
    import 'hqchart/src/jscommon/umychart.resource/css/tools.css'
    import 'hqchart/src/jscommon/umychart.resource/font/iconfont.css'
    
    function DefaultData() { }
    
    DefaultData.GetKLineOption=function()
    {
        //K线配置信息
        var option= 
        {
            Type:'历史K线图',   //创建图形类型
            
            Windows: //窗口指标
            [
                {Index:"MA", Modify:true,Change:true },
                {Index:"VOL", Modify:true,Change:true, Close:true }, 
            ], 
    
            IsAutoUpdate:true,              //是自动更新数据
            AutoUpdateFrequency:1000,       //数据更新频率
            IsShowRightMenu:false,          //右键菜单
    
            IsApiPeriod:true,             //复权,周期都使用后台数据
    
            //CorssCursorTouchEnd:true,
            //StepPixel:5,        //移动一个K线需要的手势移动的像素(默认4)
            //ZoomStepPixel:8,    //缩放一次,2个手指需要移动的间距像素(默认5)
    
            KLine:  //K线设置
            {
                DragMode:1,                 //拖拽模式 0 禁止拖拽 1 数据拖拽 2 区间选择
                Right:0,                    //复权 0 不复权 1 前复权 2 后复权
                Period:0,                   //周期 0 日线 1 周线 2 月线 3 年线 
                MaxReqeustDataCount:1000,    //数据个数
                MaxRequestMinuteDayCount:10, //分钟数据取5天
                PageSize:30,                 //一屏显示多少数据
                IsShowTooltip:true,          //是否显示 div K线提示信息 (手机端要填false)
                DrawType:0,                   //K线类型 0=实心K线柱子 1=收盘价线 2=美国线 3=空心K线柱子 4=收盘价面积图
                RightSpaceCount:1
            },
    
            KLineTitle: //标题设置
            {
                IsShowName:true,       //不显示股票名称
                IsShowSettingInfo:true //不显示周期/复权
            },
    
            Border: //边框
            {
                Left:1,         //左边间距
                Right:80,       //右边间距
                Bottom:25,      //底部间距
                Top:25          //顶部间距
            },
            
            Frame:  //子框架设置
            [
                {   
                    SplitCount:3,IsShowLeftText:false, Height:8,
                    Custom: [ { Type:0, Position:'right' } ]
                },
    
                { SplitCount:2,IsShowLeftText:false, Height:2 },
            ],
    
            ExtendChart:    //扩展图形
            [
                //{Name:'KLineTooltip' }  //手机端tooltip
            ],
        };
    
        return option;
    }
    
    DefaultData.GetMinuteOption=function()
    {
        //分时图配置信息
        var option= 
        {
            Type:'分钟走势图',   //创建图形类型
            //Type:'分钟走势图横屏',
    
            Windows: //窗口指标
            [
                //{Index:"MACD", Modify:true, Change:false, Close:false }
                //{Index:"涨跌趋势", Modify:false,Change:false},
            ], 
            
            Symbol:'000001.sz',         
            IsAutoUpdate:true,              //是自动更新数据
            AutoUpdateFrequency:1000,       //数据更新频率
            DayCount:1,                 //1 最新交易日数据 >1 多日走势图
            IsShowRightMenu:true,       //是否显示右键菜单
    
            //CorssCursorInfo:{  Left:2, Right:2, Bottom:1,RightTextFormat:1 },
    
            MinuteLine:
            {
                IsDrawAreaPrice:true,      //是否画价格面积图
                IsShowAveragePrice:true,   //不显示均线
            },
    
            MinuteTitle:
            {
                IsShowTime:true,
                IsShowName:true,
                IsShowDate:false,
            },
    
            //EnableBorderDrag:false,
    
            Border: //边框
            {
                Left:1,    //左边间距
                Right:1,     //右边间距
                Top:25,
                Bottom:25
            },
            
            Frame:  //子框架设置
            [
                { 
                    SplitCount:5,
                    Custom:
                    [
                        { 
                            Type:1, 
                            Position:'left', LineType:0,
                            Data:
                            [
                                {
                                    Value:15.8,
                                    Color:'rgb(0,34,255)', TextColor:'rgb(255,255,255)',
                                },
                            ] 
                        }
                    ]
                },
                { SplitCount:3 },
            ],
    
            ExtendChart:    //扩展图形
            [
                //{Name:'MinuteTooltip' }  //手机端tooltip
            ]
        };
    
        return option;
    }
    
    
    export default {
    
        name: 'HQChartDemo',
    
        setup(/*props, context*/)
        {
            const HQChartData=
            { 
                Symbol:'600000.sh',  //代码
                Chart:null,          //图形控件
            };
    
            var DivApp=ref(null);
            var DivKLine=ref(null);
            var DivButtons=ref(null);
    
            onMounted(()=>
            {
                console.log(`[HQChartDemo::mounted]`);
                window.onresize = ()=>{ OnSize() }
    
                OnSize();              //子组件的mounted在父组件的mounted之前执行了  
                CreateKLineChart(0);  
            });
    
            onUnmounted(()=>
            {
    
            });
    
            ///
            //内部接口
            const OnSize=function()
            { 
                var app=DivApp.value;
                console.log(app.value);
                var height= app.offsetHeight;
                var width = app.offsetWidth;
                console.log(`[HQChartDemo::OnSize] width=${width} height=${height}`); 
    
                var groupbutton=DivButtons.value;
                var buttonsHeight=groupbutton.offsetHeight;
    
                //获取屏幕大小 动态设置K线的div大小
                var kline=DivKLine.value;
                kline.style.width=width+'px';
                kline.style.height=(height-buttonsHeight)+'px';
    
                if (HQChartData.Chart) HQChartData.Chart.OnSize();
            };
    
            const ClearChart=function()
            {
                if (HQChartData.Chart)
                {
                    HQChartData.Chart.StopAutoUpdate();
                    HQChartData.Chart=null;
                }
    
                var divKLine=document.getElementById('kline');
    			while (divKLine.hasChildNodes()) 
    			{
                    divKLine.removeChild(divKLine.lastChild);
    			}
            };
    
            //创建走势图
            const CreateKLineChart=function(period)
            {
                ClearChart();
    
                var option=DefaultData.GetKLineOption();
                option.Symbol=HQChartData.Symbol;
                option.Period=period;
                
                var divKLine=document.getElementById('kline');
                var chart=HQChart.Chart.JSChart.Init(divKLine);
                //option.NetworkFilter=this.NetworkFilter;
                chart.SetOption(option);
                HQChartData.Chart=chart;
            };
    
            const ChangePeriod=function(period)    //K线图切换周期
            {
                if (IsKLineChart())
                    HQChartData.Chart.ChangePeriod(period);
                else
                    CreateKLineChart(period);  
            };
    
            const ChangeMinute=function()  //分时图
            {
                if(IsMinuteChart()) 
                    return;
                else 
                {
                    CreateMinuteChart();
                }
            };
    
            const ChangeSymbol=function(symbol)   //切换股票
            {
                HQChartData.Symbol=symbol;
                HQChartData.Chart.ChangeSymbol(HQChartData.Symbol);
            };
    
            const IsKLineChart=function()
            {
                if (!HQChartData.Chart || !HQChartData.Chart.JSChartContainer) return;
                return HQChartData.Chart.JSChartContainer.ClassName=="KLineChartContainer";
            };
    
            const IsMinuteChart=function()
            {
                if (!HQChartData.Chart || !HQChartData.Chart.JSChartContainer) return;
                return HQChartData.Chart.JSChartContainer.ClassName=="MinuteChartContainer";
            };
    
            //创建分时图
            const CreateMinuteChart=function()
            {
                ClearChart();
    
                var option=DefaultData.GetMinuteOption();
                option.Symbol=HQChartData.Symbol;
    
                var divKLine=document.getElementById('kline');
                var chart=HQChart.Chart.JSChart.Init(divKLine);
                //option.NetworkFilter=this.NetworkFilter;
                chart.SetOption(option);
                HQChartData.Chart=chart;
            };
    
            return { 
                //hqchart数据
                //HQChartData,
    
                //DOM元素
                DivApp,
                DivKLine,
                DivButtons,
    
                //导出函数
                ChangePeriod,   //切换K线周期
                ChangeMinute,   //切换走势图
                ChangeSymbol,   //切换代码
            };
        }
      
    }
    </script>
    
    <style >
    .hqchart
    {
        position: relative;
    }
    
    </style>
    
    

    交流QQ群: 950092318

    如果还有问题可以加交流QQ群: 950092318

    HQChart代码地址

    地址:github.com/jones2000/HQChart

    个人爱好(模型/摄影)

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    展开全文
  • YII的重写规则与URL的管理

    千次阅读 2015-12-02 11:44:35
    本人小菜鸟一只,为了自我学习和交流PHP(jquery,linux,lamp,shell,javascript,服务器)等一系列的知识,小菜鸟创建了一个群。...QQ群: 191848169 QQ:450225664 通常在yii框架的Url中如下: http://yo

    本人小菜鸟一只,为了自我学习和交流PHP(jquery,linux,lamp,shell,javascript,服务器)等一系列的知识,小菜鸟创建了一个群。希望光临本博客的人可以进来交流。寻求共同发展。搭建平台。本人博客也有许多的技术文档,希望可以为你提供一些帮助。

    QQ群: 191848169 QQ:450225664



    通常在yii框架的Url中如下: http://yourdomain.com/index.php?r=account/login


    1. Friendly URL(美化URL)

    主要实现这样的url : http://yourdomain.com/site/contact.html

    修改config/main.php,增加一个component

    1. 'urlManager'=>array(  
    2.             'urlFormat'=>'path',  
    3.             'showScriptName' => false, //去除index.php  
    4.             'urlSuffix'=>'.html', //加上.html  
    5.             'rules'=>array(  
    6.                 'pattern1'=>'route1',  
    7.                 'pattern2'=>'route2',  
    8.                 'pattern3'=>'route3',  
    9.             ),  
    10.         ),  



    2. 使用URL重写,去掉index.php
    在你的app根目录下创建.htaccess内容如下:

     

    1. <IfModule mod_rewrite.c>   
    2.   
    3.   
    4. Options +FollowSymLinks  
    5. IndexIgnore */*  
    6. RewriteEngine on  
    7.   
    8. # if a directory or a file exists, use it directly  
    9. RewriteCond %{REQUEST_FILENAME} !-f  
    10. RewriteCond %{REQUEST_FILENAME} !-d  
    11.   
    12. # otherwise forward it to index.php  
    13. RewriteRule . index.php  
    14.   
    15.   
    16. </IfModule>  


     



    当然前提是要在httpd.conf中打开apache的rewrite模块


    3. Yii创建URL时去掉index.php
    再次修改config/main.php,在刚才UrlManager组件增加属性showScriptName,值为false.

    1. 'urlManager'=>array(    'urlFormat'=>'path',    'showScriptName' => false,   ),  



     

    YII模块绑定二级域名方法

     

    在配置文件设置

    1. 'urlManager' => array(  
    2. 'urlFormat' => 'path',  
    3. 'showScriptName' => false, //注意false不要用引号括上  
    4. 'urlSuffix' => '.html',  
    5. 'rules' => array(  
    6. 'http://blog.zeeeda.com'=>array('/blog', 'urlSuffix'=>'', 'caseSensitive'=>false),  
    7. 'http://blog.zeeeda.com/comment-<id:\w+>'=>array('/blog/comment/', 'urlSuffix'=>'.html', 'caseSensitive'=>false),//blog 为一个模块 ,如果在blog模块下还存在第二个控制器(这里以comment为例),则需要多写一个规则  
    8. ), 
    展开全文
  • 1.需求描述 现在有如下数据文件: id name age 1 小明 13 2 小张 15 ...小编创建了一个Python学习交流QQ群:778463939 寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书! ''' d
  • JAVA技术交流QQ群:170933152  用到了,就整理出来,下次查阅 看看下面这个比较好: 创建数据库时候设置编码: gbk: create database '数据库名' default character set gbk collate gbk_chinese_ci;  utf8: ...
  • 技术交流QQ群【JAVA,C++,Python,.NET,BigData,AI】:170933152 首先加入依赖,除了以前的springmvc的依赖,还要security的依赖,这一次 然后这里配置这个webconfig,可以看到这里的这个拦截器我们不用了,之前...
  • 一、handlers是什么? logging模块中包含的类 用来自定义日志对象的规则...小编创建了一个Python学习交流QQ群:778463939 寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书! ''' import l
  • QQ群:704621321 前言 在软件开发中,当我们需要对某些对象重复创建,且最终只需要得到单一结果。如果使用一般思维,那我们将浪费很多内存空间,为此,我们引入享元模式。 介绍 所谓享元模式即共享对象,该模式...
  • 需要执行矩阵和线性代数运算,比如矩阵乘法、寻找行列式...小编创建了一个Python学习交流QQ群:857662006 寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书! ''' >>> import nu...
  • 验证登录流程判断逻辑 · 前端 ... 密码是否符合规则(特殊字符、大...在这里推荐一个我自己创建的软件测试交流QQ:642830685,中会不定期的分享软件测试资源,测试面试题以及测试行业资讯,大家可以在中积极交流
  • Drools7_PDF教程

    2020-07-03 00:12:32
    购买成功后,邀请你到微信会员中,从此标记为会员 并添加Drools规则引擎VIP 621361960,只有购买了技术指南的小伙伴才能加入的哦。所有更新版本都会在文件中,提供会员下载 676219749是博主创建的讨论,期待...
  • 技术交流QQ群【JAVA,C++,Python,.NET,BigData,AI】:170933152 上一节我们介绍了yaml文件,在k8s中,所有资源的部署都是基于yaml文件的 可以看到控制器部分,和被控制对象部分 那么如果我们自己去编写这个...
  • 注:文件输出树是依据不同的打印级别来存放文件的,如Info级别每小时新建一个文件存储,Error级别则是只要产生就创建一个新文件,其他具体存储规则可参考代码。每个文件都会包含手机的基本信息,还有在创建文件树时...
  • 支持与交流QQ群:【10171789】开源通关注明“DebianLNMP-Jimmyli版”才通过 支持与交流网址:http://jimmyli.jimmyli.blog.51cto.com/最新版本下载地址:见QQ群:【10171789】消息或交流网址 【好技术齐分享,欢迎...
  • 对爬虫感兴趣的开发者可以加QQ群一起讨论:147824717。 下面以糗事百科为例, 来看一下我们的爬虫长什么样子: $configs = array( 'name' => '糗事百科', 'domains' => array( 'qiushibaike.com',
  • QQ交流: 644642474主群可能已满 9418024052欢迎加入 特性 基于Json5和Mockjs定义接口返回数据的结构和文档,效率提升多倍 初步化权限设计,即保证了大型企业级项目的管理,又保证了易用性 类似postman的接口...
  • archer 基于inception的自动化SQL操作平台,支持工单、审核、定时任务、邮件、OSC等功能,还可配置MySQL查询、慢查询管理、会话管理等 目录 主要功能 设计规范 在线体验 ...发起SQL上线,工单提交...QQ群2群669833720
  • 如果觉得看起来比较麻烦,需要PDF版本,或是需要更多学习资料、面试资料,进阶、架构资料,都可以加上QQ群领取。祝愿每一位有追求的Android开发同胞都能进大厂拿高薪! Android-Notes Android开发核心知识点笔记...
  • 支持与交流QQ群:【10171789】开源通关注明“DebianLNMP-Jimmyli版”才通过 支持与交流网址:http://jimmyli.jimmyli.blog.51cto.com/最新版本下载地址:见QQ群:【10171789】消息或交流网址 【好技术齐分享,欢迎...
  • 支持与交流QQ群:【10171789】开源通关注明“DebianLNMP-Jimmyli版”才通过 支持与交流网址:http://jimmyli.jimmyli.blog.51cto.com/最新版本下载地址:见QQ群:【10171789】消息或交流网址 【好技术齐分享,欢迎...
  • 如果觉得看起来比较麻烦,需要PDF版本,或是需要更多学习资料、面试资料,进阶、架构资料,都可以加上QQ群领取。祝愿每一位有追求的Android开发同胞都能进大厂拿高薪! Android-Notes Android开发核心知识点笔记-...
  • QQ解决 - 607020115(付费) 自开以来,还是有很多的朋友提出了很多问题,我也解决了很多问题,其中有大半问题是本库的Bug导致,也有些是使用者项目本 身的环境问题,这花费了我大量的时间,经过我的观察和测试...
  • Vue + ElementUI 后台管理系统框架 在线预览 ... 相关教程 Vue + ElementUI 手撸后台管理网站基本框架(零)前言篇 Vue + ElementUI 手撸后台管理网站基本框架(一)创建项目 Vue + ElementUI 手撸...QQ交流:745454791
  • 为方便相互学习和交流,建了个QQ群,加群请备注来自BookStack QQ交流群:457803862(猿军团) 同时要说明的是,该群是一个学习交流群,如果是程序相关问题,请直接提交issues,不接受邮件求助、微信求助和QQ私信求助...
  • QQ群:124867090、147976428、4624706(软件购买、使用咨询、定制开发等事宜请联系群主) 官方微博:http://weibo.com/AmrLab   七、应用领域 1. 淘宝客站点:通过采集现有的淘宝客站点,或者淘宝的某个子站点,...
  • QQ群:124867090、147976428、4624706(软件购买、使用咨询、定制开发等事宜请联系群主) 官方网站:http://www.amr-lab.net 官方微博:http://weibo.com/AmrLab 七、应用领域 1. 淘宝客站点:通过采集现有的淘宝客...

空空如也

空空如也

1 2 3
收藏数 58
精华内容 23
关键字:

qq群创建规则