fullCalendar改造计划之带农历节气节假日的万年历

计划着要做一款万年历,作为自己小项目的便民功能。

作为一枚“资深”业余前端,本想着网上应该有现成的代码可用,一顿猛搜之后,倒是确实搜到几个,但是一看功能,跟我想的不一样;再看代码,顿时没有了修改的欲望。顿时大失所望,理想太丰满,现实太骨感啊!!

无意搜到一款jquery的日程安排日历插件,fullCalendar(官网:http://arshaw.com/fullcalendar/),

发现嗯,功能貌似挺强大的嘛,再一看,最近更新日期是2013年9月,于是决定了,改造!

下载下来的最新版是fullcalendar-1.6.4,原生的样子是这样的:
请输入图片描述

但是我想象的应该是这个样子的:
请输入图片描述

貌似差别有点大……没关系,一步步来改造。

一、当然是汉化啦

阅读剩余部分 -

linux下jetty替换部署war包步骤小笔记

今天给自己的小网站做了点小更新,部署的时候发现……有段时间没管,忘了文件在哪儿了,也忘了怎么操作了。
没办法,简单google了一下,总算记起一些,于是决定做个小记录,下次省的搜了

就几个简单的linux命令,用来对war包做重新部署的。第一次部署的时候jetty的安装配置就免了,需要的可以自行google:

1. 打开jetty安装目录下的bin目录。由于安装的时候配置了环境变量,这边就很方便了

cd ${JETTY_HOME}/bin

2.关闭jetty。bin目录下的jetty.sh里包含了jetty的基本操作指令(stop,start,restart等等)

./jetty.sh stop

3.用其他工具上传新的war包并覆盖以前的旧war包(一般在jetty安装目录的webapps目录下)

4.启动jetty

./jetty.sh start

搞定,掩面飘过,这么简单的步骤都能忘……

目测百度统计出问题了

许久不写博客,今天发个博客吐槽下百度统计

今天发现自己的几个站全被挂了弹窗,弹窗第一次的时候会设置cookies,一天只弹一次……粗心一点估计就直接无视了……

顿时大惊,以为服务器被黑了,辛辛苦苦排查一通,没发现啥可疑问题(“就你那半吊子水平,有问题你也发现不了好哇!!”)

看网页源代码,也没发现奇怪的js注入代码,但是在chrome里明明看到看到载入了很多弹窗推广的js啊!!这些js从哪儿跑出来的??

于是以为是插件问题,把插件都停掉,还是不行……

都搞了一通,最后,只有把目光放到唯一剩下的百度统计js代码上了,抱着试试看的心态,把统计代码删了……

于是,弹窗没了……

清空cookies,刷新,没弹窗……

目测是百度统计出问题了……

google一下,发现近期百度统计确实出问题了,据官方人士在百度统计贴吧上说明,是被人劫持了!!!

顿时囧了,这么大的互联网公司,就这么被人劫持了……尼玛洗洗睡吧~

自定义UITableViewCell的高度自适应

项目里需要实现UITableView的Cell的高度自适应,google后发现都是基于默认cell的处理,对于自定义的UITableViewCell没有效果,稍微研究了一下代码,发现,关键还是在计算UILabel的高度上,于是稍微对网上现成的代码做了写修改,实现了需要的功能。
要实现的效果如下:

donelist.png

自定义的cell也很简单,一排label,简单的表格效果:

celldemo.png

简单贴一下关键代码,做为备忘:

1、设置全局变量来保存每行高度,目的是避免重复计算高度

@property (nonatomic, retain) NSMutableArray *cellHeightList;
@synthesize cellHeightList;


- (void)viewDidLoad
{
    [super viewDidLoad];
    //初始化
    self.cellHeightList = [[NSMutableArray alloc] init];
}

<br/>
2、计算每行cell高度,并保存高度列表
<br/>

- (float)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
    int row = [indexPath row];
    //设置字体信息
    UIFont *textfont15 = [UIFont systemFontOfSize:15];
    //选取几个可能内容比较多的label值
    Category *category = (Category *)[self.personList objectAtIndex:indexPath.section];
    NSDictionary *rowData = [category.list objectAtIndex:row];
    NSString *pnowContent = [rowData objectForKey:@"ppositionnow"];
    NSString *pfurContent = [rowData objectForKey:@"ppositionfur"];
    NSString *pcancelContent = [rowData objectForKey:@"ppositioncancel"];
    NSString *degreeContent = [rowData objectForKey:@"pdegree"];
    NSString *infoContent = [rowData objectForKey:@"potherinfo"];
    
    // 分别计算显示这些内容的几个label所需要的最小尺寸
    //169.0f;104.0f;145.0f为label的宽度
    CGSize pnowsize = [pnowContent sizeWithFont:textfont15 constrainedToSize:CGSizeMake(168.0f, 1000.0f) lineBreakMode:NSLineBreakByWordWrapping];
    CGSize pfursize = [pfurContent sizeWithFont:textfont15 constrainedToSize:CGSizeMake(168.0f, 1000.0f) lineBreakMode:NSLineBreakByWordWrapping];
    CGSize pcansize = [pcancelContent sizeWithFont:textfont15 constrainedToSize:CGSizeMake(168.0f, 1000.0f) lineBreakMode:NSLineBreakByWordWrapping];
    CGSize degsize = [degreeContent sizeWithFont:textfont15 constrainedToSize:CGSizeMake(104.0f, 1000.0f) lineBreakMode:NSLineBreakByWordWrapping];
    CGSize infosize = [infoContent sizeWithFont:textfont15 constrainedToSize:CGSizeMake(145.0f, 1000.0f) lineBreakMode:NSLineBreakByWordWrapping];

    //保存不同label高度值
    NSMutableArray *heightArray = [[NSMutableArray alloc] initWithCapacity:5];
    [heightArray addObject:[NSNumber numberWithFloat:pnowsize.height]];
    [heightArray addObject:[NSNumber numberWithFloat:pfursize.height]];
    [heightArray addObject:[NSNumber numberWithFloat:pcansize.height]];
    [heightArray addObject:[NSNumber numberWithFloat:degsize.height]];
    [heightArray addObject:[NSNumber numberWithFloat:infosize.height]];
    //初始化最大高度值
    NSNumber *max_height = [NSNumber numberWithInt:50];
    //比较,找出最大高度做为cell的高度
    for (int i=0;i<[heightArray count];i++){
        if ([[heightArray objectAtIndex:i] intValue]>[max_height intValue]) {
            max_height = [heightArray objectAtIndex:i];
        }
    }
        
    //保存cell高度到全局变量
    [self.cellHeightList addObject:[NSNumber numberWithFloat:[max_height floatValue]+30]];

    return [max_height floatValue]+30.0;    
    
}

<br/>
3、设置cell内UILabel的高度
<br/>

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    ……

    NSDictionary *rowData = [category.list objectAtIndex:nowrow];
    NSString *pnameContent = [rowData objectForKey:@"pname"];
    NSString *pnowContent = [rowData objectForKey:@"ppositionnow"];
    NSString *pfurContent = [rowData objectForKey:@"ppositionfur"];
    NSString *pcancelContent = [rowData objectForKey:@"ppositioncancel"];
    NSString *genderContent = [rowData objectForKey:@"pgender"];
    NSString *degreeContent = [rowData objectForKey:@"pdegree"];
    NSString *birthContent = [rowData objectForKey:@"pbirth"];
    NSString *partyContent = [rowData objectForKey:@"pparty"];
    NSString *infoContent = [rowData objectForKey:@"potherinfo"];
    //获取当前cell高度
    float labelHeight = [[self.cellHeightList objectAtIndex:nowrow] floatValue];
    //当前label信息
    CGRect pnameFrame = cell.PersonNameLabel.frame;
    CGRect pnowFrame = cell.PositionNowLabel.frame;
    CGRect pfurFrame = cell.PositionFurLabel.frame;
    CGRect pcanFrame = cell.PositionCancelLabel.frame;
    CGRect genderFrame = cell.GenderLabel.frame;
    CGRect degreeFrame = cell.DegreeLabel.frame;
    CGRect birthFrame = cell.BirthLabel.frame;
    CGRect partyFrame = cell.PartyLabel.frame;
    CGRect otherFrame = cell.OtherLabel.frame;
    //修改label的高度
    pnameFrame.size.height = labelHeight;
    pnowFrame.size.height = labelHeight;
    pfurFrame.size.height = labelHeight;
    pcanFrame.size.height = labelHeight;
    genderFrame.size.height = labelHeight;
    degreeFrame.size.height = labelHeight;
    birthFrame.size.height = labelHeight;
    partyFrame.size.height = labelHeight;
    otherFrame.size.height = labelHeight;
    //更新label的信息
    cell.PersonNameLabel.frame = pnameFrame;
    cell.PositionNowLabel.frame = pnowFrame;
    cell.PositionFurLabel.frame = pfurFrame;
    cell.PositionCancelLabel.frame = pcanFrame;
    cell.GenderLabel.frame = genderFrame;
    cell.DegreeLabel.frame = degreeFrame;
    cell.BirthLabel.frame = birthFrame;
    cell.PartyLabel.frame = partyFrame;
    cell.OtherLabel.frame = otherFrame;
    //设置label内容
    cell.PersonNameLabel.text = pnameContent;
    cell.PositionNowLabel.text = pnowContent;
    cell.PositionFurLabel.text = pfurContent;
    cell.PositionCancelLabel.text = pcancelContent;
    cell.GenderLabel.text = genderContent;
    cell.DegreeLabel.text = degreeContent;
    cell.BirthLabel.text = birthContent;
    cell.PartyLabel.text = partyContent;
    cell.OtherLabel.text = infoContent;

    ……
}

<br/>
编译运行,搞定……

playframework2.0简单的自定义分页样式

过年在家,玩到提不起兴致写代码,更别说写博客了……罪过罪过……

于是今天把自己折腾的play!项目的分页整理完善了一下,做个简单记录,免得博客长草~

需求很简单,如下图所示:

分页样式

显示5个页码,其他的用省略号表示

代码如下:

@defining((pageNavMap("currentPageNum"), pageNavMap("totalPageNum"))) { case (page_curPageNum, page_totalPageNum) =>
<div class="page-navigation">
    @if(page_curPageNum > 1){
    <a href="/person/@userprofile.id">首页</a>
    <a href='/person/@userprofile.id/p/@(page_curPageNum-1)'>上一页</a>
    }
    @if(page_totalPageNum < 6){
    @for(i <- 1 to page_totalPageNum){
        @if(i == page_curPageNum){
        <span class="curPage">@page_curPageNum</span>
        }else{
        <a href='/person/@userprofile.id/p/@i'>@i</a>
        }
    }
    }else{
    @if(page_curPageNum < 4){
        @for(i <- 1 to 5){
        @if(i == page_curPageNum){
        <span class="curPage">@page_curPageNum</span>
        }else{
        <a href='/person/@userprofile.id/p/@i'>@i</a>
        }
        }
        <span class="pagebreak">…</span>
    }else{
    @if(page_curPageNum > (page_totalPageNum-2)){
    <span class="pagebreak">…</span>
    <a href='/person/@userprofile.id/p/@(page_curPageNum-3)'>@(page_curPageNum-3)</a>
    <a href='/person/@userprofile.id/p/@(page_curPageNum-2)'>@(page_curPageNum-2)</a>
    <a href='/person/@userprofile.id/p/@(page_curPageNum-1)'>@(page_curPageNum-1)</a>
    <span class="curPage">@page_curPageNum</span>
    @if(page_curPageNum != page_totalPageNum){
    <a href='/person/@userprofile.id/p/@(page_totalPageNum)'>@(page_totalPageNum)</a>
    }
    }else{
    <span class="pagebreak">…</span>
    <a href='/person/@userprofile.id/p/@(page_curPageNum-2)'>@(page_curPageNum-2)</a>
    <a href='/person/@userprofile.id/p/@(page_curPageNum-1)'>@(page_curPageNum-1)</a>
    <span class="curPage">@page_curPageNum</span>
    <a href='/person/@userprofile.id/p/@(page_curPageNum+1)'>@(page_curPageNum+1)</a>
    <a  href='/person/@userprofile.id/p/@(page_curPageNum+2)'>@(page_curPageNum+2)</a>
    <span class="pagebreak">…</span>
    }
}
    }
    
@if(page_curPageNum < page_totalPageNum){
    <a href='/person/@userprofile.id/p/@(page_curPageNum+1)'>下一页</a>
    <a href='/person/@userprofile.id/p/@page_totalPageNum'>末页</a>
    }

</div>
}

其中,“pageNavMap”是保存分页信息的Map,后台定义如下:

Map pageMap = new HashMap();
pageNavMap.put("totalPageNum", totalPageCount);
pageNavMap.put("currentPageNum", curPageNum>1?curPageNum:1);

这只是用于页面显示的代码,至于后台分页的代码,可以很简单的通过play!内的EBean自带的“ PagingList”接口搞定

PagingList的api地址:http://www.avaje.org/static/javadoc/pub/com/avaje/ebean/PagingList.html

热评文章

最新文章

最近回复

归档

其它