声明:此文系舞林cuzn(www.wulinlw.org)原创稿件,转载请保留版权
jquery 在地图上选择地点(添加标记),获取经玮度
Continue Read..jquery 获取经玮度
Continue Read..声明:此文系舞林cuzn(www.wulinlw.org)原创稿件,转载请保留版权
beego分页bootstrap V3风格
Continue Read..修改自简单的beego分页功能代码,原版里的样式比较特别,现在改成了bootstrap风格
看图:
看代码:
package pager /** * 分页功能 * 支飞亚 * 2014-9-1 * * bootstrap V3风格 * wulin * 2015-09-24 */ import ( // "fmt" "github.com/astaxie/beego/context" "github.com/astaxie/beego/orm" html "html/template" con "strconv" "strings" "time" ) type PageOptions struct { TableName string //表名 -----------------[必填] Conditions string //条件 Currentpage int //当前页 ,默认1 每次分页,必须在前台设置新的页数,不设置始终默认1.在控制器中使用方式:cp, _ := this.GetInt("pno") po.Currentpage = int(cp) PageSize int //页面大小,默认20 LinkItemCount int //生成A标签的个数 默认10个 Href string //A标签的链接地址 ---------[不需要设置] ParamName string //参数名称 默认是pno FirstPageText string //首页文字 默认"首页" LastPageText string //尾页文字 默认"尾页" PrePageText string //上一页文字 默认"上一页" NextPageText string //下一页文字 默认"下一页" EnableFirstLastLink bool //是否启用首尾连接 默认false 建议开启 EnablePreNexLink bool //是否启用上一页,下一页连接 默认false 建议开启 } /** * 分页函数,适用任何表 * 返回 总记录条数,总页数,以及当前请求的数据RawSeter,调用中需要"rs.QueryRows(&tblog)"就行了 --tblog是一个Tb_log对象 * 参数:表名,当前页数,页面大小,条件(查询条件,格式为 " and name='zhifeiya' and age=12 ") */ func GetPagesInfo(tableName string, currentpage int, pagesize int, conditions string) (int, int, orm.RawSeter) { if currentpage <= 1 { currentpage = 1 } if pagesize == 0 { pagesize = 20 } var rs orm.RawSeter o := orm.NewOrm() var totalItem, totalpages int = 0, 0 //总条数,总页数 o.Raw("SELECT count(*) FROM " + tableName + " where 1>0 " + conditions).QueryRow(&totalItem) //获取总条数 if totalItem <= pagesize { totalpages = 1 } else if totalItem > pagesize { temp := totalItem / pagesize if (totalItem % pagesize) != 0 { temp = temp + 1 } totalpages = temp } rs = o.Raw("select * from " + tableName + " where id >0 " + conditions + " LIMIT " + con.Itoa((currentpage-1)*pagesize) + "," + con.Itoa(pagesize)) return totalItem, totalpages, rs } /** * 返回总记录条数,总页数,当前页面数据,分页html * 根据分页选项,生成分页连接 下面是一个实例: func (this *MainController) Test() { var po util.PageOptions po.EnablePreNexLink = true po.EnableFirstLastLink = true po.LinkItemCount = 7 po.TableName = "help_topic" cp, _ := this.GetInt("pno") po.Currentpage = int(cp) _,_,_ pager := util.GetPagerLinks(&po, this.Ctx) this.Data["Email"] = html.HTML(pager) this.TplNames = "test.html" } */ func GetPagerLinks(po *PageOptions, ctx *context.Context) (int, int, orm.RawSeter, html.HTML) { var str string = "" totalItem, totalpages, rs := GetPagesInfo(po.TableName, po.Currentpage, po.PageSize, po.Conditions) po = setDefault(po, totalpages) DealUri(po, ctx) if totalpages <= po.LinkItemCount { //总页数<10 str = fun1(po, totalpages) //显示完全 12345678910 } else if totalpages > po.LinkItemCount { //总页数>10 if po.Currentpage < po.LinkItemCount { str = fun2(po, totalpages) //123456789...200 } else { if po.Currentpage+po.LinkItemCount < totalpages { //最后10页前面 str = fun3(po, totalpages) } else { str = fun4(po, totalpages) } } } return totalItem, totalpages, rs, html.HTML(str) } /** * 处理url,目的是保存参数 */ func DealUri(po *PageOptions, ctx *context.Context) { uri := ctx.Request.RequestURI var rs string if strings.Contains(uri, "?") { arr := strings.Split(uri, "?") rs = arr[0] + "?" + po.ParamName + "time=" + con.Itoa(time.Now().Second()) arr2 := strings.Split(arr[1], "&") for _, v := range arr2 { if !strings.Contains(v, po.ParamName) { rs += "&" + v } } } else { rs = uri + "?" + po.ParamName + "time=" + con.Itoa(time.Now().Second()) } po.Href = rs } /** * 1...197 198 199 200 */ func fun4(po *PageOptions, totalpages int) string { var rs string = "" rs += getHeader(po, totalpages) rs += "
声明:此文系舞林cuzn(www.wulinlw.org)原创稿件,转载请保留版权
【PHP】通过搜索(百度,微信等)抓取搜索内容
Continue Read..现在有个需求 就是抓取指定搜索的页面 然后把标题和链接单独抓出来存数据库
比如抓取百度,微信,论坛等
之前一直都觉得要用正则写,写了几天都没写出来太TMD蛋疼了,突然搜索发现了
$html = file_get_contents($url);
$dom = new DOMDocument();
@$dom->loadHTML($html);
$xpath = new DOMXPath($dom);
$hrefs = $xpath->evaluate("/html/body//a");
这个函数 用于抓取xml等数据的 按指定格式
然后我就写了一个万能抓取的方法
$url = "http://weixin.sogou.com/weixin?query=%E6%B5%8B%E
$html = file_get_contents($url);
$dom = new DOMDocument();
@$dom->loadHTML($html);
$xpath = new DOMXPath($dom);
$hrefs = $xpath->evaluate("/html/body//a");
// var_dump($hrefs);die;
// $hrefs = $xpath->evaluate('/html/body//a');
$arr = array();
for ($i = 0; $i < $hrefs->length; $i++) {
$href = $hrefs->item($i);
// var_dump($href);
$url = $href->getAttribute('href');
// var_dump(strstr($url,"highlight"));
if(strstr($url,"art.jsp") !== false && !empty($href->nodeValue)){
$arr[$i]['title'] = $href->nodeValue;
$arr[$i]['url'] = $url;
}
// if($i>100){
// break;
// }
// echo $url.'<br />';
}
var_dump($arr);8%AF%95&fr=sgsearch&ie=utf8&type=2&w=01019900&sut=687&sst0=1442893595750&lkt=0%2C0%2C0";
声明:此文系舞林cuzn(www.wulinlw.org)原创稿件,转载请保留版权
【YII2】自带组件发邮件
Continue Read..首先在web.php components 里面修改mailer
'mailer' => [
'class' => 'yii\swiftmailer\Mailer',
'useFileTransport' =>false,//这句一定有,false发送邮件,true只是生成邮件在runtime文件夹下,不发邮件
'transport' => [
'class' => 'Swift_SmtpTransport',
'host' => 'smtp.163.com',
'username' => '你的邮箱',
'password' => '你的密码',
'port' => '25',
// 'encryption' => 'tls',
],
'messageConfig'=>[
'charset'=>'UTF-8',
'from'=>['你的邮箱=>'邮箱名称']
],
],
然后调用邮箱组件
$mail = Yii :: $app -> mailer -> compose ( );
$mail -> setTo (['邮箱','邮箱']);
$mail -> setSubject ( '标题');
// $mail->setTextBody('zheshisha '); //发布纯文字文本
$mail -> setHtmlBody ( '内容'); // 发布可以带html标签的文本
$mail -> send ( );
声明:此文系舞林cuzn(www.wulinlw.org)原创稿件,转载请保留版权
【Jquery】下拉框问题
Continue Read..声明:此文系舞林cuzn(www.wulinlw.org)原创稿件,转载请保留版权
[转载]mysql分组取每组前几条记录(排名) 附group by与order by的研究
Continue Read..原文链接:http://www.cnblogs.com/mo-beifeng/archive/2012/02/07/2341886.html
--按某一字段分组取最大(小)值所在行的数据
数据如下:
name val memo
a 2 a2(a的第二个值)
a 1 a1--a的第一个值
a 3 a3:a的第三个值
b 1 b1--b的第一个值
b 3 b3:b的第三个值
b 2 b2b2b2b2
b 4 b4b4
b 5 b5b5b5b5b5
*/
insert into tb values('a', 2, 'a2(a的第二个值)')
insert into tb values('a', 1, 'a1--a的第一个值')
insert into tb values('a', 3, 'a3:a的第三个值')
insert into tb values('b', 1, 'b1--b的第一个值')
insert into tb values('b', 3, 'b3:b的第三个值')
insert into tb values('b', 2, 'b2b2b2b2')
insert into tb values('b', 4, 'b4b4')
insert into tb values('b', 5, 'b5b5b5b5b5')
go
--一、按name分组取val最大的值所在行的数据。
--方法2:
select a.* from tb a where not exists(select 1 from tb where name = a.name and val > a.val)
--方法3:
select a.* from tb a,(select name,max(val) val from tb group by name) b where a.name = b.name and a.val = b.val order by a.name
--方法4:
select a.* from tb a inner join (select name , max(val) val from tb group by name) b on a.name = b.name and a.val = b.val order by a.name
--方法5
select a.* from tb a where 1 > (select count(*) from tb where name = a.name and val > a.val ) order by a.name
/*
name val memo
---------- ----------- --------------------
a 3 a3:a的第三个值
b 5 b5b5b5b5b5
*/
本人推荐使用1,3,4,结果显示1,3,4效率相同,2,5效率差些,不过我3,4效率相同毫无疑问,1就不一样了,想不搞了。
--二、按name分组取val最小的值所在行的数据。
--方法2:
select a.* from tb a where not exists(select 1 from tb where name = a.name and val < a.val)
--方法3:
select a.* from tb a,(select name,min(val) val from tb group by name) b where a.name = b.name and a.val = b.val order by a.name
--方法4:
select a.* from tb a inner join (select name , min(val) val from tb group by name) b on a.name = b.name and a.val = b.val order by a.name
--方法5
select a.* from tb a where 1 > (select count(*) from tb where name = a.name and val < a.val) order by a.name
/*
name val memo
---------- ----------- --------------------
a 1 a1--a的第一个值
b 1 b1--b的第一个值
*/
--三、按name分组取第一次出现的行所在的数据。
/*
name val memo
---------- ----------- --------------------
a 2 a2(a的第二个值)
b 1 b1--b的第一个值
*/
name val memo
---------- ----------- --------------------
a 1 a1--a的第一个值
b 5 b5b5b5b5b5
*/
--五、按name分组取最小的两个(N个)val
select a.* from tb a where exists (select count(*) from tb where name = a.name and val < a.val having Count(*) < 2) order by a.name
/*
name val memo
---------- ----------- --------------------
a 1 a1--a的第一个值
a 2 a2(a的第二个值)
b 1 b1--b的第一个值
b 2 b2b2b2b2
*/
--六、按name分组取最大的两个(N个)val
select a.* from tb a where val in (select top 2 val from tb where name=a.name order by val desc) order by a.name,a.val
select a.* from tb a where exists (select count(*) from tb where name = a.name and val > a.val having Count(*) < 2) order by a.name
/*
name val memo
---------- ----------- --------------------
a 2 a2(a的第二个值)
a 3 a3:a的第三个值
b 4 b4b4
b 5 b5b5b5b5b5
*/
2 数据如下:
3 name val memo
4 a 2 a2(a的第二个值)
5 a 1 a1--a的第一个值
6 a 1 a1--a的第一个值
7 a 3 a3:a的第三个值
8 a 3 a3:a的第三个值
9 b 1 b1--b的第一个值
10 b 3 b3:b的第三个值
11 b 2 b2b2b2b2
12 b 4 b4b4
13 b 5 b5b5b5b5b5
14
15 */
16
附:mysql “group by ”与"order by"的研究--分类中最新的内容
这两天让一个数据查询难了。主要是对group by 理解的不够深入。才出现这样的情况

我现在需要取出每个分类中最新的内容
结果如下

明显。这不是我想要的数据,原因是msyql已经的执行顺序是
写的顺序:select ... from... where.... group by... having... order by..
执行顺序:from... where...group by... having.... select ... order by...
所以在order by拿到的结果里已经是分组的完的最后结果。
由from到where的结果如下的内容。

到group by时就得到了根据category_id分出来的多个小组


到了select的时候,只从上面的每个组里取第一条信息结果会如下

即使order by也只是从上面的结果里进行排序。并不是每个分类的最新信息。
回到我的目的上 --分类中最新的信息
根据上面的分析,group by到select时只取到分组里的第一条信息。有两个解决方法
1,where+group by(对小组进行排序)
2,从form返回的数据下手脚(即用子查询)
由where+group by的解决方法
对group by里的小组进行排序的函数我只查到group_concat()可以进行排序,但group_concat的作用是将小组里的字段里的值进行串联起来。

再改进一下

子查询解决方案
【PHP】Paypal支付和IPN(YII2版)
Continue Read..首先去paypal沙盒申请一个账号 并且申请一个虚拟商家账号和一个买家账号
沙盒地址 https://developer.paypal.com/developer/applications/
然后设置 IPN
登陆 https://www.sandbox.paypal.com/ 用商家账号
设置你 IPN的回调地址 比如 https://xxx.com/ipn
IPN代码参考 https://github.com/paypal/ipn-code-samples/blob/master/paypal_ipn.php
支付实现 参考代码网址 https://github.com/paypal/PayPal-PHP-SDK/wiki/Installation
官网示例代码 https://github.com/paypal/rest-api-sample-app-php
下载YII2 然后 composer 安装 paypal 具体的百度 我也会把全部代码上传附件
附件 有3个 脚本是直接配置可以运行的(官方代码) YII2是我写的 另一个是数据库
声明:此文系舞林cuzn(www.wulinlw.org)原创稿件,转载请保留版权