通过PHP操作MYSQL数据库之面向对象

在做PHP开发的过程中,用的最多的还是面向对象的思想,所以操作数据库,也得学会面向对象,相关代码如下:

//1、连接数据库,分别输入地址、账号和密码
//其实就是通过new关键字实例化一个对象,里边的参数就是在构造函数__construct里执行的
$db = new mysqli(“localhost”,”root”,””);
//2、选择一个数据库来操作
$db->select_db(“list”);
//3、设置编码格式是utf8,这种设置方法容易引起数据库注入问题,刚学php操作数据库可以这样写,正规的方法会在后面的笔记中更正!
$db->query(“set names utf8”);
//输出查询结果
$query = “select * from orders order by id desc”;
$result = $db->query($query);
while($res = $result->fetch_object()){
echo ‘<pre>’;
print_r($res);
}
//更改某个id对应的数据
$db->query(“update orders set ordermoney=’10元’ where id=2”);
//更改某个字段名
$db->query(“alter table orders change ordertime time date”);
//删除某条记录
$db->query(“delete from orders where id=5”);
如果要输出数组形式的结果集,用以下代码即可:

$res = $result->fetch_array()
输出查询记录总共有多少条:

echo $result->num_rows;
个人学习笔记,仅供参考,后续会继续补充!

通过PHP操作MYSQL数据库之面向过程

面向过程:用PHP操作MYSQL数据库演示代码如下:

//1、//连接数据库,分别输入地址、账号和密码
$db = mysql_connect(“localhost”,”root”,””) or die(“数据库连接不成功”.mysql_error());
//2、选择其中的list数据库
$select = mysql_select_db(“list”,$db) or die(“数据库选择不成功”.mysql_error());
//3、设置编码格式是utf8,这种设置方法容易引起数据库注入问题,刚学php操作数据库可以这样写,正规的方法会在后面的笔记中更正!
mysql_query(“set names utf8”);
//4、通过id倒序的方法查询orders表中的内容
$result = mysql_query(“select * from orders order by orderid desc”);
//以关联数组的形式输出结果集
while($res=mysql_fetch_array($result,MYSQL_BOTH)){
echo ‘<pre>’;
print_r($res);
}
//5、将数据插入到数据库
mysql_query(“insert into orders(ordermoney,ordertime) values(‘300元’,’2016/8/31′)”);
//6、修改orders表中id为3的ordermoney
mysql_query(“update orders set ordermoney=’100元’ where orderid=3”);
//7、修改orders表中的字段名orderid为id
mysql_query(“alter table orders change orderid id int(10)”);
上面代码在执行查询操作的时候用关联数组输出了结果集,其实这里有很多中输出格式,包括数组(关联数组、索引数组、同时包括关联数组和索引数组)、对象等等,写法如下:

1、输出关联数组形式的结果集:

$res=mysql_fetch_array($result,MYSQL_ASSOC
2、输出索引数组形式的结果集:

$res=mysql_fetch_array($result,MYSQL_NUM)
3、同时数组关联数组和索引数组的结果集:

$res=mysql_fetch_array($result,MYSQL_BOTH)
4、输出对象形式的结果集:

$res=mysql_fetch_object($result)
5、查看总共输出多少条记录:

echo mysql_num_rows($result);
以上代码仅供作为笔记参考,有些地方写的不是很全面!

通过Webpack的code-spliting实现Vue组件异步按需懒加载

之前使用AngularJs做项目的时候,发现一个问题,用户打开首页,所有的controller都会加载进来,这样是不科学的,因为首页只需要首页的controller,其他页面可以做按需加载,也就是懒加载,用到的时候再去请求,所以最后通过RequireJs实现了AngularJs的controller的懒加载。

同样在VueJs中也存在一个问题,因为VueJs的核心是组件,通过Webpack打包工具最后会生成一个特别大的bundle.js文件,在用户网络不太好的情况下,想要在2s内加载完这个特大js文件几乎是不可能的,所以同样需要做按需懒加载,幸好,Webpack提供了code-spliting功能可以帮助我们做到这一点。

方法一:使用vue-cli脚手架构建一个vue项目,然后使用vue官网提供的方法,通过异步来引入组件,即可实现按需加载

建议参考:

《使用vue-cli脚手架构建项目目录》

《Vue路由懒加载方法》

根据以上两步,即可实现路由懒加载,项目运行之后,在chrome浏览器中打开network网络面板,点击任意路由进行跳转,看看是不是实现了按需加载。

方法二:在不用vue-cli脚手架的情况下实现组件的懒加载

1、首先通过npm安装html模板插件,具体方法查看:《Webpack全套入门教程之html模板插件》。

2、配置webpack的entry和output选项,例如:

module.exports = {
entry: __dirname + ‘/src/public/js/main.js’,//已多次提及的唯一入口文件
output: {
path: __dirname + ‘/src/build/’,//打包后的文件存放的地方
filename: “[chunkhash].build.js”,//打包后输出文件的文件名
publicPath: ‘./build/’
},
};
publishPath主要指定资源文件的引进目录。例如在express中,指定了public/build是网站的根目录,网站的源文件存放在public中,那么就需要设置path:”./build”指定打包输出到该目录,而publicPath就需要设置为”/”,表示当前路径。

3、配置node静态资源目录和模板目录,例如:

var http = require(‘http’);
var express = require(‘express’);//引入express模块
var app = express();//初始化express
var bodyParse = require(‘body-parser’);//接收post数据
//设置前端模板录
app.set(‘views’, __dirname + ‘/src/’);
//设置前端模板文件类型
app.set(‘view engine’, ‘ejs’);
//设置静态资源目录
app.use(express.static(__dirname + ‘/src/’));
完成以上三步,再次按照vue官方给出的组件异步懒加载方法,在路由中配置异步组件进行加载即可。

通过百度推广后台进行数据分析

首先要有一个百度推广的账号密码。注册方法如下:

第一步:打开百度推广网址(http://www2.baidu.com)

第二步:开始注册帐号,注意密码一定要大写字母+小写字母+数字组合,很多人注册不了帐号,就是因为这个地方没有搞清楚。

注册百度推广账号

第三步:注册好之后,开始登录,然后来到推广界面,选择进入“搜索推广”。

点击进入搜索推广

第四步:选择“关键词规划师”,进行相关关键词搜索规划。

选择关键词规划师

在搜索框中输入你的相关关键词,然后进行查找,并且把这些词都记录下来,按照昨天在NO2根据百度下拉框和相关搜索分析用户需求中所讲的关键词分类法进行分类。

做完以后,对下拉框和相关搜索中的数据进行整合,得出最新的数据。

下拉框和相关搜索以及百度推广后台的数据,是通过筛选大量关键词进行数据分析的,下一篇继续分析百度指数和百度搜索结果的数据,得出最后的结论。

图像处理之图像拷贝缩略图原理imagecopymergegray、imagecopyresampled

1、imagecopymergegray 用灰度拷贝并合并图像的一部分:

imagecopymergegray($dst_im, $src_im, $dst_x, $dst_y, $src_x, $src_y, $src_w, $src_h, $pct)。

$img = imagecreatetruecolor(300, 300);
imagefill($img, 0, 0, imagecolorallocate($img, 255, 0, 255));
$jpeg = imagecreatefromjpeg(‘test.jpg’);
imagecopymergegray($img, $jpeg, (imagesx($img)-imagesx($jpeg))/2, (imagesy($img)-imagesy($jpeg))/2, 0, 0, imagesx($jpeg), imagesy($jpeg), 50);
header(‘Content-type:image/jpeg’);
imagejpeg($img);
2、imagecopyresampled缩放图片:

imagecopyresampled($dst_image, $src_image, $dst_x, $dst_y, $src_x, $src_y, $dst_w, $dst_h, $src_w, $src_h)。

代码如下:

$img = imagecreatetruecolor(300, 300);
imagefill($img, 0, 0, imagecolorallocate($img, 255, 255, 255));
$jpeg = imagecreatefromjpeg(‘test1.jpg’);
$jpeg_width = imagesx($jpeg);
$jpeg_height = imagesy($jpeg);
if($jpeg_width>$jpeg_height){
$target_width = 200;
$target_height = (200/$jpeg_width)*$jpeg_height;
}else if($jpeg_width<$jpeg_height){
$target_height = 200;
$target_width = (200/$jpeg_height)*$jpeg_width;
}else{
$target_width = 200;
$target_height = 200;
}
imagecopyresampled($img, $jpeg, (imagesx($img)-$target_width)/2, (imagesy($img)-$target_height)/2, 0, 0, $target_width, $target_height, imagesx($jpeg), imagesy($jpeg));
header(‘Content-type:image/jpeg’);
imagejpeg($img);

推荐2款实用方便的桌面视频录制软件

大家看我博客中有一些SEO和建站技术视频,这些都是我用桌面视频录制软件录制好之后上传到土豆视频或者是淘宝视频的,画面非常清晰,为了方便大家使用,现在我提供一下2款视频录制软件的下载地址,供大家参考。

第一种:FSCapture(有标尺、截屏、录制视频等多种功能)

下载地址:

http://yunpan.cn/cFdyPMSncZjIg (提取码:e485)

使用方法:下载后,直接放到电脑上,打开文件夹,双击软件图标即可使用。

第二种:Camtasia Studio

下载地址:

http://yunpan.cn/cFdymxqts9X7C (提取码:0da9)

使用方法:

1、安装时使用以下信息注册:

Name:huangqiang.me

Key:ACUFF-ZNWAC-PANMB-CC7NG-TM377

2、运行前,将以下信息写入系统Hosts文件:

127.0.0.1 65.52.240.48

127.0.0.1 activation.cloud.techsmith.com

写入方法:

1、手动进入目录“(C:\Windows\System32\drivers\etc)”使用记事本修改;

2、使用 HostsX 修改(推荐)。

使用过程中有任何问题,可以在Q群里找我解决!

网站降权怎么办

只要是做了几年的SEO,肯定都经历过网站被降权的事情,今天我来分享一下网站被降权后怎样尽快恢复。

1、持续的更新高质量内容

网站被降权是因为搜索引擎对你的网站评分下降,甚至是彻底的不信任,要想改变现状,就得讨好搜索引擎,从高质量的内容开始。

2、高质量外链必不可少

外链这个问题说了很多次了,百度虽然把外链的投票作用看得不像以前那么重了,但是只要还有作用,那就必须得去做,但是一定要保证质量。到人流量多的高权重平台发布单向锚文本外链的效果是最好的。人多的地方,你的文章还能被转载,例如去A5、搜外写软文。推荐查看:如何写好软文。

3、增强网站自身素质

搜索引擎会把用户最喜欢的网站排在前面,现在网站被降权了,越是要保证网站有一个好的数据统计,尽量用手中所能用到的所有资源去引流,增加网站的ip以及停留时间。但是不要去刷流量。之前有个站长让我给他分析网站,我问他这一个月之内他做了什么操作,听了他的叙述之后,也没发现这些操作会被降权呀,都是一些普通的优化方式,但是看了他的统计数据,发现流量是忽高忽下,而且跳出率极高,最后他告诉我看网站一直没有起色,就刷了10天的流量,这下倒好,排名没上来,反而被降权。

4、如果是被百度误伤,可以去投诉

搜索引擎只是机器程序,不可能一点错误都不出现,如果分析完所有的数据之后,实在是找不出网站被降权的原因,那就可以去百度站长平台进行投诉。

服务器坏掉、网站优化采用黑帽、随意修改网站标题、友情链接的负面影响等都会产生不同程度的降权,如果是服务器原因导致降权,想要恢复大概需要2周的时间,他人删除友链导致的降权需要4周恢复;采用黑帽手段,发布大量的垃圾外链导致的降权,最少也得2-3个月才能恢复。有些网站与其花时间去恢复降权,还不如重新做一个,所以,优化的时候要谨慎小心,千万不要被降权。在优化网站的时候,一定要懂得:如何避免网站被降权。

网站上线第二天就被收录的秘诀

想要关键词在搜索引擎上有排名,首先第一条就是要确保网站有稳定的收录量,网站上线之后,基本上所有的站长急切盼望的就是一件事:“网站赶紧被收录”,下面我以赵一鸣随笔博客的上线第二天收录经历来具体谈一下。

这个博客是在2015年5月3日晚上10点上线,到了5月5日早上6点查询的时候,网站首页已经被收录了。

为了不造成自我困扰,首先要确切的知道:网站怎么算是被收录?从哪里查询网站收录?大多数站长都喜欢用site搜索指令来查询网站收录量,确切的说,site高级搜索指令的真正作用并不在于查询收录数量,而是看收录的质量。通过site网址,我们可以粗略的看到网站大概的收录量,那只是一个估计的数值,对于一个刚刚上线的新站来说,通过site查询收录可能就没有结果,导致站长误认为网站还没有被收录。

真正正确的查询收录的方法是什么呢?1、利用百度统计查询收录‘2、在百度站长平台查询收录;3、新站上线,可以搜索一下品牌词,一般品牌词都会有展现的。

好,先搞懂了这个,现在来说说怎么能让新站快速被收录。

1、增加网站的受众。百度会通过各个渠道的数据得知一个新站是否受欢迎,如果网站上线之后有不错的访问量,这就给了搜索引擎一个不多的第一印象,它是很愿意收录这种网站的。

2、有时间、有资源可以去增加一些外链,外链的其中一个作用就是增加收录,为了避免错误的操作,可参考站长关心的外链发布问题总结。

3、及时的更新网站内容。网站刚上线,一定要告诉搜索引擎:这个网站是有人在管理的,别上线之后就完事大吉了。不会写文章的站长可以看根据用户需求快速写原创文章。

4、为了确保给搜索引擎一个好的第一印象,网站最好不要急匆匆的上线,把所有该做的基础工作做好之后再上线。网站上线之前必须要做的检查。

为了尽早的上排名,放心大胆的去做吧!

网站上线之前必须要做的检查

网站在本地做好之后,不能贸然立刻上线,如果这个网站以后要做SEO优化,那么上线前的一些检查工作就越显得重要了。

1、网站的TKD是否书写正确

Title是网站的标题,它是整个网站的灵魂,搜索引擎也特别重视这个地方,既然要做优化,就必须要根据用户需求写最好的标题,上线之后就不要随便改来改去;

Keywords是网站的关键词,现在这个标签对于关键词排名已经没有影响了,可以不写;

Description是网站的描述,这个标签对关键词排名也没有影响,但是会影响用户的点击,好的描述能够让用户眼前一亮,特别是网站优化处于中后期的时候,用户的点击投票是非常重要的。

如果不会写TKD,可参考通过分析用户需求确定网站标题的三个步骤!

2、站内是否有“适量足够的内容”

网站上线之后肯定会有蜘蛛前来访问,如果在这个时候,站内一点内容都没有,那么给搜索引擎的第一印象就不太好,它认为这是一个空网站,没有什么价值可言,所以在上线之前需要根据自己行业的不同情况,适当的填充一些内容。太原雅辉装修公司的网站在上线之前填充了50篇文章。本博客在上线之前填充了21篇文章。

3、站内基础代码检查

做网站优化,基础的代码优化是必须的,每个页面只能使用一个h1标签、图片优化该有的是是不是都做了、代码是否合并并且做到了最简洁、网站重要位置最好不用使用js、网站整体框架是不是用的有利于搜索引擎读取的div+css布局等等。

4、网站链接地址是否正确

我建议网站上线之后要做绝对地址,但是网站在本地测试的时候就不需要做,前几天一个站长遇到一个问题,他的网站上线之后,打开一看发现一团糟,好像根本没有写css样式,但是他在本地看的时候是正常的,这就奇怪了。右键查看他源代码的时候,发现他css样式的路径是localhost/1/style.css这种形式,一看就是在本地测试的时候使用了绝对地址,所以这个问题要特别注意:本地测试使用相对路径,网站上线之后使用绝对路径。

5、网站优化小细节检查

现在不做优化的网站不多,既然要做优化,那么与优化相关的一些细节问题就一定不能忽略,具体包括:网站是否做301重定向;是否有网站地图、是否有404错误页面、是否有robots文件、网址后边的小尾巴(/index.html、/index.php等)是否去掉了这些问题。

6、域名解析绑定空间

这一步是必须要做的,如果不解析域名、不绑定空间,起码通过你所购买的域名是不能访问网站的。查看域名解析和绑定以及301重定向操作视频。

7、网站的安全设置

每个网站使用的后台程序都不一样,每个程序都不是100%的安全,但是我们要尽量做好安全性设置,如果站长对于这方面不熟悉,可以咨询公司的程序员,也可以与我交流。

如果以上几点都做好了,网站就基本上可以上线了!需要特别注意的是:网站没有正式开始上线优化之前,千万不要去解析域名或者是发外链,因为这类操作会导致网站被收录,后期再进行大量的更改,会降低网站在搜索引擎那里的信任度,后期的推广工作会带来一定的难度!

网站图片优化的实用技巧

各大搜索引擎对于图片的识别技术越来越成熟,但还是没有达到能100%识别图片内容的地步。网站中的图片优化急需一个完整的解决办法,下面我以太原雅辉装修公司网站中的近1000张图片优化经历来分享网站图片优化的实用技巧。

网站图片优化的实用技巧

一、站内图片该有的属性一个都不能少

1、alt:用户是不会看这个属性的,但是对与搜索引擎来说却非常管用,现在搜索引擎还没有达到能100%准确识别图片内容的时候,所以alt属性依然不可忽视。

2、width、height:同样,用户也不会关心这个图片的宽高,只要看上去舒服就行。蜘蛛在爬取网站内容的时候,如果在一个图片里边加上宽高属性,搜索引擎能更方便的识别图片的大小范围,省下很多事。

二、图片周围添加与标题和文章内容相关的描述文字

太原雅辉装修公司站内的一篇文章《小清新90后女生卧室装修效果图》,关于90后女生卧室装修效果图的图片不止一种风格,对应的图片也不一样,所以要根据图片的内容在其周围具体描述。

三、整个网站的站内图片尺寸尽量一致

图片有的大有点小,有的偏左有的偏右,这种排版,首先对于用户来说就感觉非常不好,所以,对与站内大多数图片来说,尺寸大小尽量一致一些。太原雅辉装修公司站内所有的图片大小都是根据文章主体的大小来做的,宽是550px,高是368px。

四、去除图片水印

为了提升用户体验,站内图片尽量不要加大范围的水印。如何去除图片水印

五、其他方面

如果想要图片参与排名的话,可以适当的给图片做一些外链,还是有效果的!

网站站内优化如何做

随着百度不断的降低外链的评分,站内的优化就越来越重要,除了分析用户需求之外,下面这些基础的站内优化在上线之前是必须要做好的。

第一:图片代码优化

<img src=”xxx.jpg” alt=”说明文字” />;

添加alt属性,alt属性中的说明文字尽量写详细具体,其中包含相关关键词;

<a href=”” title=”说明文字”><img src=”xxx.jpg” alt=”说明文字” /></a>;

如果图片带有链接,可以给a标记使用title属性,说明文字要跟链接指向页面的关键词有关;例如链接指向某一篇文章,说明文字可以使用文章名称;

图片后面添加一些说明文字(尽量详细具体);

file:///C:/Users/ADMINI~1/AppData/Local/Temp/msohtmlclip1/01/clip_image001.jpg。

如果对图片优化还不是太清楚,可以参考:网站图片优化的实用技巧

第二:<h1>文字</h1>:一般情况,一个网页用一次<h1></h1>

网站所有页面<h1></h1>中全部是首页核心关键词,且带链接指向首页;(主要做核心词排名的企业网站或小网站);例<h1><a href=”首页网址”>1个核心词</a></h1>;

网站各个页面<h1></h1>中使用当前页关键词,首页使用核心词,栏目页使用栏目关键词,文章页使用文章名称;(重视长尾词优化的网站,比如资讯网站)。

第三:加粗<strong></strong>:关键词或重要文字适当采用<strong></strong>代码(发文章)

W3C验证:网站页面的html源代码尽量符合w3c标准;对于SEO有一点好处;

http://validator.w3.org/。

第四:网站w3c练习

1. 代码要小写,大写都错误;(特别是权重代码);

2. img要有alt属性;

<base target=”_blank” />,网页中所有的链接全部新窗口打开,就不需要单独给每个a标记加target=”_blank”。

第五:网站内容优化

1、针对搜索引擎:内容有一定的原创度(提高收录几率);包含关键词及链接;

2、网站内容来源:只要保持一颗为用户解决问题的心态去写文章就行,不必过分的注意字数,文章篇幅不要太长,图文结合。

如何删除百度下拉框和相关搜索中的负面信息

如何删除百度下拉框和相关搜索中的负面信息

百度推出下拉框和相关搜索之后,很大程度上方便了网民使用百度搜索引擎,所以他们也会非常的信任下拉框和相关搜索中的信息,如果里边出现了负面信息,无疑会对公司品牌以及信任度产生重大影响,下面我来分享一种免费的删除百度下拉框和相关搜索负面信息的方法。

1、打开百度投诉页面:http://tousu.baidu.com

百度投诉页面

2、点击“产品建议”选项,可以看到在“详细说明”里边可以提交下拉框和相关搜索的内容。

3、在填写信息的时候,最好是图文并茂,这样能增加投诉成功的几率。

4、如果是个人的相关信息被侵权,可以上传本人身份证的清晰扫描件或照片。

5、情节严重的话,可以请代理律师上传被代理人的营业执照或者是身份证等相关证件的扫描件。

做好以上操作之后,就可以静待百度处理了,一般2-3天就会有结果,你可以再次用百度账号登录百度投诉页面,查看“投诉记录处理结果”即可。

我对javascript中【闭包】的理解

闭包(blosure)是javascritp语言学习中的一个难点,除了一些简单的事件处理之外,很多的高级应用都要依靠闭包来实现。下面是我对闭包的一些理解,希望对大家有所帮助。

一、变量的作用域

要理解闭包,首先必须理解Javascript特殊的变量作用域。

变量的作用域无非就是两种:全局变量和局部变量。

Javascript语言的特殊之处,就在于函数内部可以直接读取全局变量。

var n = 100;
function f1(){
alert( n );
}
f1(); //100
在函数外部肯定是无法读取函数内部的局部变量的。

function f1(){
var n = 100;
}
alert( n ); //undefined
这里有个细节需要注意:在函数内部声明变量的时候,一定要加上var,否则这个变量实际上就是一个全局变量。

function f1(){
n = 100;
}
f1();
alert( n ); //100
那么,如何从外部读取函数内部的局部变量呢?

在一些特殊情况下,我们需要得到函数内部的局部变量,但是在前面说到,正常情况下是办不到的,只有变通一下才能实现。

我们在函数的内部,再定义一个函数:

function f1(){
var n = 100;
function f2(){
alert( n ); //100
}
}
在上面的代码中,函数f2就被包括在函数f1内部,这时f1内部的所有局部变量,对f2都是可见的。但是反过来就不行,f2内部的局部变量,对f1就是不可见的。这就是Javascript语言特有的”链式作用域”结构(chain scope),子对象会一级一级地向上寻找所有父对象的变量。所以,父对象的所有变量,对子对象都是可见的,反之则不成立。

既然f2可以读取f1中的局部变量,那么只要把f2作为返回值,我们不就可以在f1外部读取它的内部变量了吗!

function f1(){
var n = 100;
function f2(){
alert( n );
}
return f2;
}
var result = f1();
result();//100
二、闭包的概念

上一节代码中的f2函数,就是闭包。

各种专业文献上的”闭包”(closure)定义非常抽象,很难看懂。我的理解是,闭包就是能够读取其他函数内部变量的函数。

由于在Javascript语言中,只有函数内部的子函数才能读取局部变量,因此可以把闭包简单理解成”定义在一个函数内部的函数”。

所以,在本质上,闭包就是将函数内部和函数外部连接起来的一座桥梁。

三、闭包的用途

闭包可以用在许多地方。它的最大用处有两个,一个是前面提到的可以读取函数内部的变量,另一个就是让这些变量的值始终保持在内存中。

怎么来理解这句话呢?请看下面的代码:

function f1(){
var n = 100;
nAdd=function(){n+=1}
function f2(){
alert( n );
}
return f2;
}
var result=f1();
result(); // 100
nAdd();
result(); // 101
在这段代码中,result实际上就是闭包f2函数。它一共运行了两次,第一次的值是100,第二次的值是101。这证明了,函数f1中的局部变量n一直保存在内存中,并没有在f1调用后被自动清除。

为什么会这样呢?原因就在于f1是f2的父函数,而f2被赋给了一个全局变量,这导致f2始终在内存中,而f2的存在依赖于f1,因此f1也始终在内存中,不会在调用结束后,被垃圾回收机制(garbage collection)回收。

这段代码中另一个值得注意的地方,就是”nAdd=function(){n+=1}”这一行,首先在nAdd前面没有使用var关键字,因此nAdd是一个全局变量,而不是局部变量。其次,nAdd的值是一个匿名函数(anonymous function),而这个匿名函数本身也是一个闭包,所以nAdd相当于是一个setter,可以在函数外部对函数内部的局部变量进行操作。

四、使用闭包需要注意到问题

(1)由于闭包会使得函数中的变量都被保存在内存中,内存消耗很大,所以不能滥用闭包,否则会造成网页的性能问题,在IE中可能导致内存泄露。解决方法是,在退出函数之前,将不使用的局部变量全部删除。

推荐查看:《JavaScript对象循环引用与闭包导致的内存泄漏及其解决方案》。

(2)闭包会在父函数外部,改变父函数内部变量的值。所以,如果你把父函数当作对象(object)使用,把闭包当作它的公用方法(Public Method),把内部变量当作它的私有属性(private value),这时一定要小心,不要随便改变父函数内部变量的值。

(3)小心闭包陷阱(伪闭包)

什么是“伪闭包”呢?看下面这段代码:

function f1(){
var n = 100;
f2();
}
function f2(){
alert( n );
}
f1(); //undefined
函数f1在执行的时候执行力f2,但是f2不是一个闭包,因为它不符合闭包的定义。【闭包是“定义在函数内部的函数”,而不是执行】。所以f2在执行的时候,无法弹出n的值。

五、关于闭包的思考:

如果能理解下面这两段代码的执行结果,那就基本上理解闭包的运行机制了。

代码一:

var name = “bush”;
var obj = {
name : “obama”,
func : function(){
return function(){
return this.name
}
}
}
alert( obj.func()() );
代码二:

var name = “bush”;
var obj = {
name : “obama”,
func : function(){
var This = this;
return function(){
return This.name
}
}
}
alert( obj.func()() );
代码三:

var name = “bush”;
var obj = {
name : “obama”,
func : function(){
return function(){
return this.name
}
}
}
alert( obj.func().call(obj) );
关于this指向的问题:谁(哪个对象)执行了这个函数,那么这个函数内部的this指的就是谁?默认情况下,this指的是window作用域!

另外,如果你对变量、作用域的问题感兴趣,可以查看:《关于javascript执行顺序、变量提升、作用域的问题》。

代码二与代码三实现的是同样的效果,具体可查看《Javascript中call()和apply()方法的区别》。

我经常用的10种网站推广方法

网站推广有很多的形式,包括免费和付费。甚至说新媒体运营微博、微信,虽然不是直接针对网站进行推广,但是运营过程中总会有品牌曝光,间接的推广了公司官网。下面介绍一下我平时经常用到的10种网站推广方法。

1、投稿软文

投稿软文对SEOer的要求比较高,SEO投稿的平台有SEOwhy、A5、Chinaz、艾瑞、donews等。投稿的文章要求质量高,并且还要有一定的软文技巧,不然难以引导用户进入网站。

针对特定的产品行业,在我QQ群的群文件中有整理的400个可发外链的平台,包括各个行业,可以作为参考。

2、平台产品排名

分类信息平台的具体产品关键词排名远远好过企业站的内页关键词排名,所以利用这一点可以大量做平台内页的长尾词排名。但是需要注册大量平台账号,并且不断更新内容。

3、QQ群

利用QQ群实时在线用户,引导进入网站浏览内容。对站长的要求是:

(1)在群里要有一定的权威,能带动气氛并有一群人跟随;

(2)没事的时候不要乱发消息,免得打扰正常工作的人;

(3)会QQ营销技巧,并不是单单在群里说“来冒个泡、签个到”就可以了。

如果有需要可以参考《QQ群运营的核心思维》、《QQ群推广技巧》这两篇视频教程和文章!

4、QQ邮件

用邮件群发的形式把用户需要的内容发送到对方的QQ邮箱里,同时引导用户进入网站。QQ邮件营销要设置一个吸引人的标题并且还有简短的不错的内容。

这里需要注意一个问题,很多的站长在写博客的时候都有一个邮件订阅功能,这个功能不是随便就能用的,如果没有特别高质量的文章,最好不要天天发,这样用户看的烦了,会取消订阅。

引导用户订阅你的邮件时,要运用营销的手法,为用户提供某种重要的学习或参考资料,同时设置一个门槛,订阅了邮件才能免费获取,只要网上没有同类的教程,90%的人都会订阅。

5、QQ空间

QQ空间每天定时更新行业资料,如果能持续更新2年3年肯定效果非常好。不管是邮件的还是QQ空间的内容,都需要有一定的价值,没有价值的内容用户凭什么要去点击关注呢?

6、微博

可以到微博里面分享一些美好的故事或者美好的图片,吸引大量的粉丝。微博推广的重点在于吸引粉丝关注,就像群里需要更多人一样。然后在微博里面更新一些好玩的好看的或者有用的内容,用户自然会去点击。

发现很多的站长都不太关注微博,反而是做淘宝买产品的人用微博比较多。大家都有个观念,现在的站长很少关注微博,这其实是错误的,如果你看了月光博客的微博、卢松松的微博,就会发现其实很多做网站的人依然在使用微博,只不是是自己没有找到利用微博吸引粉丝的方法而已。

建议参考《微博营销#1#如何做好微博线下活动》、《微博营销#2#怎么用微博营销来提升关键词排名》

7、微信

首先要加大量的微信好友,然后更新有用的文章,或者申请微信公众平台推广内容,事实证明很多人通过关注微信看自己需要的内容。而我看到的一个穿衣打扮的微信公众号教女孩子怎么搭配衣服,然后再最末尾加上推荐的服装的淘宝地址,有很多女孩子会去点击这些链接。

8、论坛

(1)论坛个性签名:现在很多人都说没用,那是你还没有在论坛建立信用度和知名的情况下当然没用了;

(2)软文发布:热门帖子就是一个高权重的链接,并且能给网站带来大量的流量,论坛的帖子可以存活几年时间;

(3)解答问题:通过在论坛解答问题引起用户的关注。

做论坛,大家可以关注下小米的官方论坛,看看他们是如何搞活动、吸引粉丝的,绝对有帮助。

9、短信推广

经常收到一些短信说你有一份礼物,请登录***领取礼物。为什么我们不做一些活动然后群发短信呢?现在智能手机如此普及,点击一个链接进入并不是困难的事情,为什么我们没有运用呢?

比如我在北京君石担保网上就设置了一个在线问题解答的栏目,因为很多想要借款的人不知道自己是否符合贷款条件,网上的答案又是五花八门,所以,具体的问题需要具体解答。在提问的过程中,让用户填写自己的手机号码,告诉他10分钟内就可以收到短信回复,这样方便快捷,每一个短信号码都是一个渠道,后期可以重复利用。

10、生态圈

生态圈的建立是创建大量同行业的博客,然后博客做长尾关键词排名,将这些博客积累的粉丝引导进入网站。生态圈不同于站群,生态圈是白帽的推广方法,并且生态圈的链接属于高质量的链接。

注意,建立博客,首先是要为读者提供有价值的内容,不要总是想着怎么从博客给产品站引流,这样就站错位置了。先解决了别人的问题,最后自然能成就自己。

详解Javascript中arguments对象的的意义与用法

根据W3C手册中的解释:在函数代码中,使用特殊对象arguments,开发者无需明确指出参数名,就能访问它们。乍一看,这句话到底什么意思?还真是不明白,我们用下面这段代码来详细介绍arguments对象。

定义函数的时候有“形参”,执行函数的时候有实参,比如下面的代码:

function fn( a ){
var b = a+1;
alert( b ); //2
}
fn( 1 );
这里的实参只有一个,那么如果我们定义了一个函数,但是这个函数要在不同的地方被执行,每次执行的时候都要传入不同的参数,而且参数的个数不确定,这怎么办呢?

接下来我们说的arguments对象就可以完美的解决这个问题。比如下面的代码:

function fn(){
console.log( arguments.length );
}
fn( “a”,”b”,”c”,”d” );//4
fn( 1,2,”你好” ); //3
从上面的代码中可以看到,fn被调用了2次,每次调用时传入的参数都不一样,这里的参数叫做“不定参”,用arguments来表示。

我们做一个实际的案例来实现数组的push方法。

Array.prototype.push = function(){
for( var i=0; i<arguments.length; i++ ){
this[this.length] = arguments[i];
}
}
var arry = [1,2,3];
console.log( arry ); //1,2,3
arry.push( 4,5,6 );
console.log( arry ); //1,2,3,4,5,6
上面的代码就是数组push方法实现的原理,用这个方法可以帮助我们更好的理解arguments的用法!

注意:arguments对象和Function是分不开的。因为arguments这个对象不能显式创建,arguments对象只有函数开始时才可用。

下面来看argumens的一个callee属性,首先我们执行一个函数,传参时候,打印一下这个arguments:

function fn(a,b,c,d,e){
console.log(arguments);
}
fn(1,2,3,4,5);
打印结果如下:

arguments打印结果

看到这个callee属性也是一个对象,其中name值就是这个函数的函数名。

通俗一点就是,arguments此对象大多用来针对同个方法多处调用并且传递参数个数不一样时进行使用,相当于给每个执行对象添加了一个状态值,这样方便记录,下次使用。根据arguments的索引来判断执行的方法。

<!doctype html>
<html lang=”en”>
<head>
<meta charset=”UTF-8″>
<title>Document</title>
</head>
<body>
<a href=”javascript:;” onclick=”fn(this.innerHTML)”>第一个</a>
<a href=”javascript:;” onclick=”fn(this.innerHTML)”>第二个</a>
</body>
</html>
<script type=”text/javascript”>
function fn(field){
if(arguments.callee.mark==’undefined’){
arguments.callee.mark = false;
}
arguments.callee.mark = !arguments.callee.mark;
console.log(htmls+arguments.callee.mark);
}
</script>
参考arguments.callee的实际用法:《AngularJs中的过滤器使用方法总结》。

小心应对关键词排名的三个危险期

一个网站从上线开始优化,到关键词稳定在百度前三,需要经过三个周期,只要熟练的掌握了这三个周期中最应该做的事情,不但能为站长的优化工作节省大量的时间,而且见效也是非常快的。

第一阶段:关键词排名在20名之外

刚上线的网站不容易获得搜索引擎的亲睐,这个时候我们的优化重点不在于哪个关键词的排名(事实上也不可能有排名),而是要想尽一切办法取得搜索引擎的信任,当搜索引擎第一次来抓取网站内容的时候,留给他一个不错的印象,那么接下来的一段时间,站长就不用在为怎样吸引蜘蛛而发愁了。就像面试的时候,给面试官的第一印象非常好,对于第二次的复试有极大的帮助。

定时更新原创的高质量文章,继续巩固新站在搜索引擎中的印象,同时给予新站尽可能的外链支持,需要注意的是:最好是找与网站相关性较高的平台去发外链,关于外链的问题我已经全部总结到站长关心的外链发布问题总结。

第二阶段:关键词进入3-20位

我的这个博客在做好基础优化之后,上线12天,“太原seo”这个词就排到了19位,这就是网站优化已经处于第二阶段,具体怎么在短时间内排到前两页,建议参考上线12天的新站如何排名到前2页。

做SEO的站长需要了解百度的点击原理算法,具体就是说,当关键词进入前20名以后,外链对于关键词排名的提升已经不起任何作用了,这个时候更多的是依靠用户的点击投票,用户浏览的越多的网站,百度会把它排到前边。如果你的网站与同行相比,有一个极具吸引力的标题,在文章内容方面有很大的差异性,并且对用户有很大的帮助,排名提升到首页前三是迟早的事情。

这个阶段还有需要注意的就是要尽可能的留下你的访客,让他们成为你的老客户,如果说有大量的老客户愿意来重复浏览你的网站,在搜索引擎看来这个网站就是高质量网站,他能受到用户的亲睐,当然搜索引擎也是非常喜欢的。关于留住老用户的方法,可以查看练就吸星大法,圈住来访网站的用户。

第三阶段:关键词进入首页前三位

按照前两个阶段所讲的操作,一切工作做好之后,看看你的网站已经来到了首页前三。但是不要高兴的太早,最严峻的考验来临了,如果在这个时候你放松了,排名马上就会掉。这时候拼的是网站的整体体验以及老客户的回头率,站在最高处的摔下去也是最疼的。外链不需要大量的发了,文章内容根据用户需求来做,需要更新就更新,不需要更新也不要勉强。太原雅辉装修公司的“太原装修公司”这个词就是这么排上来的。

知道了方法,赶紧去实施操作吧。

新站原创文章被大站采集怎么办

很多SEO都遇到过这样的问题,刚刚上线不久的新站,辛辛苦苦写的原创内容,还没等收录,就被大网站给抄袭了,自己写的内容反而成了“二手货”。遇到这种情况该怎么办呢?下面根据我的经验来分享一下!

1、合适的地方添加品牌词

想一想,既然他们自己不会或者是不想写原创文章而采集,有的人会在第一段或最后一段以及中间明显的地方找出品牌词并且删除,但是不要紧,既然他能来采集文章,说明他本身就是一个性子急的人,他不可能一个字一个字的去看,总会有漏掉的地方。但是对于站长来说,品牌词不要无限制的增加,在合理的地方顺其自然的出现就行。

2、文章末尾提示版权信息

在文章的最下边标明版权所有,并且请当地律师做版权辩护,这种情况就厉害了,如果最后被查出来,是要承担法律责任的。

3、给文章内容加料

对于采集来说,最简单的就是文字采集,但是视频是不肯能的,甚至说我们还希望他来采集视频,这样反而给我们做了宣传,想要更改一个视频的内容是相当难了。

4、禁止ctrl+c或者是右键点击

如果你懂代码或者是能找到相关的代码,可以禁止访客右键点击页面并且禁止ctrl+c快捷键,这样的话,在一定程度上也能遏制作用。

5、通过图片留下版权

其他人在采集的时候,一般都会连图片都采集上,因为他们思想里边都是想着“有了图片,搜索引擎会更加喜欢这篇文章,用户体验更好”,在图片的右下角留下自己的相关信息,就ok了。

总结:以上方法只是可以在一定程度上起到抑制作用,要想真正防止他人采集,最好的方法还是第三种,给文章内容增加独特价值,突出自己的特点,只要自己网站的受众够多,久而久之,别人一看就像是你的文章,这等于是在给你免费做宣传,增强你的实力!

学习搭建NodeJs开发环境

如果使用文本编辑器敲代码,最后在命令行中运行Node程序,效率实在是太低了,所以需要搭建一个Nodejs的IDE集成开发环境,让我们能在一个环境里编码、运行、调试,这样就可以大大提升开发效率。

Java的集成开发环境有Eclipse,Intellij idea等,C#的集成开发环境有Visual Studio,那么问题又来了:Node.js的集成开发环境到底哪家强?

NodeJs的开发环境哪个比较合适呢?我考察了很多,sublime可以安装NodeJs环境插件,webstorm号称前端开发神奇,也可以配置NodeJs环境,因为平时用webstorm比较多,所以就优先选用了webstorm。

首先,点击下载:webstorm破解版。

安装破解成功之后,依次打开file->setting,然后搜索输入node,选择NodeJs and NPM,在右边点击enabled切换下状态,最后如下:

webstorm配置nodeJs开发环境

点击【ok】即可。

在上一节(第三节)的笔记中,我们在命令行中找到myNode.js这个文件,并且输出了运行结果,在webstorm中,打开你要运行的那个文件,然后使用快捷键ctrl+shift+f10,即可在编辑器下边的面板中看到输出结果,与命令行中的结果是一样的。

webstorm中运行js文件

研究网站转化率的重要性

最近跟太原本地的很多传统行业的老板聊了很多,从他们的口中听到最多的一句话就是:“网站白做了,挂在那儿也没什么用,一个咨询都没有”。

直白一点讲就是:网站要么没排名没流量,要么是有流量,没有客户咨询。

网站没有转化率

这样的事情确实令人纠结,公司在网络这方面投入了大量的人力、物力、财力,到头来一点收益都没有。SEO人员好不容易把排名做上来了,可是因为网站设计以及布局吸引不了用户,所以95%以上的访客都选择了直接关闭网站。

究其原因,主要就是网站设计布局不合理,大多数是网上随便下载的模板,只看重高端大气上档次,丝毫不在意用户的感受。

在接下来的一段时间,我会根据自己以往运营装修、美容美发、音乐、餐饮等行业网站的经验持续更新一整套提升网站转化率的方法。在以后的文章中,我会把这一系列的方法总结应用在实际案例中发布出来。欢迎大家参与进来一起交流学习!

一句话说清楚Javascript中的回调函数

根据我的理解,用最简单的语言描述Javascript中的回调函数是什么意思。下面用一段代码来举例子说明。

(function( callback ){
president = { name:”obama” };
callback( president );
console.log( president.name ); // bush
})(function( a ){
a.name = “bush”;
a = { name:”cliten” };
})
1、什么是回调函数?

函数A作为参数(函数引用)传递到另一个函数B中,并且这个函数B执行函数A。我们就说函数A叫做回调函数。如果没有名称(函数表达式),就叫做匿名回调函数。

2、回调函数是如何实现的?

我们可以像使用变量一样使用函数,作为另一个函数的参数,在另一个函数中作为返回结果,在另一个函数中调用它。当我们作为参数传递一个回调函数给另一个函数时,我们只传递了这个函数的定义,并没有在参数中执行它。

当包含(调用)函数拥有了在参数中定义的回调函数后,它可以在任何时候调用(也就是回调)它。

这说明回调函数并不是立即执行,而是在包含函数的函数体内指定的位置“回调”它(形如其名)。

举个例子:老师L让学生A做一件事情,就是将全班同学的试卷给学生A,让他找出其中不及格的试卷。老师L接着又找到学生B,将这部分试卷交给他,让学生B把这些同学的名字记下来。看这倒霉老师安排这事儿,一看就不懂回调,首先学生A把全班同学的试卷都翻了个遍,学生 B又将其中不及格部分同学的试卷翻个遍,实际上是多余的for循环了。如果数据量很大(全班300万学生,不及格的140万),那势必会造成多余的时间人力浪费。那怎么用回调的方式呢?学生A说了:老师你给我一个会记名字的学生B,我找到一个不及格的就把试卷给他,他记下试卷上的名字就可以了。这样的话全班同学的试卷就只被找了一遍就完成任务了。那么通过以上的例子,我们就可以把学生B看成是学生A的回调函数。学生B可以看作是老师调用学生A找不及格试卷的方法的时候传给学生A的一个参数,在学生A需要的时候就调用这个参数做事情就可以了。这就可以说是回调的方式。

3、回调函数的作用是什么?

Javascript是单线程的,也就是说js代码的执行顺序是从上到下,有时候你需要一个操作完全结束再到下一个操作,为了确保这一点就必须使用回调函数!

假如你发起一个网络请求,需要在请求到数据的时候再进行数据处理操作.如果不用回调的话,下一步操作怎么进行?如果按照一般的代码,有可能请求的数据还没返回,数据处理操作已经执行完了!

注意:上面的代码说明一个问题,也是项目开发中经常会遇到的一个坑,如果回调函数中传入的参数是一个对象,那么在回调函数内容如果要改变这个对象的值,记得要操作这个对象的某个属性,而不是对象本身,因为对象传参是传地的。

应用分组部署及共用项与独立项详解

每个网站都有前台和后台,使用ThinkPHP开发网站的时候,如果前台建一个Index项目文件夹,后台建一个Admin项目文件夹,那么很多代码必须得写2次才能同时提供给Index和Admin使用,这样显然工作量太大,而且效率很低,所以有必要进行应用分组部署。

方法:在config配置文件中配置以下代码:

//开启项目分组
‘APP_GROUP_LIST’=>’Index,Admin’
//默认分组
‘Default_GROUP’=>’Index’
这样就实现了项目分组。

建立独立项:

1、配置文件分组:

这个config文件对于前后端都是适用的,如果前端有自己的配置项,不想让后端使用,同样后端也有自己的配置项,不想让前端使用,那么可以在Conf文件夹中建立Index和Admin文件夹,然后在这两个文件夹中分别再建立一个config.php文件,然后书写特定的配置项代码即可。

2、扩展函数分组:

公共的扩展函数是在Common/common.php文件中编辑,如果前端和后端都必须要有仅属于自己的扩展函数,那么可以在Common文件夹下各自建立Index和Admin文件夹,然后再在每个文件夹下建立function.php文件,记住,是function.php文件,而不是common.php文件,然后书写特定的扩展函数代码即可。

3、控制器分组:

所有的控制器都是放在Lib/Action/文件夹下,进行项目分组之后,前后端的控制器也要分别放置,所以需要在Action文件夹下分别建立Index和Admin文件夹,在对应的文件夹下建立前后端对应的控制器文件,并进行代码编辑即可。

4、模板分组:

所有的模板都是放在Tpl文件夹下,进行项目分组之后,前后端的摸吧也要分别放置,所以需要在Tpl文件夹下分别建立Index和Admin文件夹,然后再在各自的文件夹下建立首页、栏目页或者是文章页的html模板。

用javascript随时生成16进制颜色值的2种方法

随机生成16进制颜色值的方法有很多,我这边测试了几次,感觉下面的两个方法最简单易懂,而且操作方便,现在提供给大家作为参考!

//第一种:
function a(){
var color = [0,1,2,3,4,5,6,7,8,9,”a”,”b”,”c”,”d”,”e”,”f”];
var colors = “”;
for(var i=0; i<6; i++){
var n = Math.ceil(Math.random()*15);
colors+=color[n];
}
return “#”+colors;
}
console.log(a());
//第二种:
function b(){
var color = Math.ceil(Math.random()*16777215).toString(16);
if(color.length<6){
color+=”0”;
}
return “#”+color;
}
console.log(b());
另外,给大家提供一个在线进制转换工具,支持在2~36进制之间进行任意转换,支持浮点型:

http://tool.oschina.net/hexconvert/

用ThinkPHP实现列表翻页效果

ThinkPHP也提供了翻页类,下面介绍一下具体的使用方法:

在控制器中引入翻页类:

import(‘ORG.Util.Page’);
//表中记录条数
$count = M(‘hope’)->count();
//实例化一个page对象,第一个参数是记录条数,第二个参数是每页显示的条数
$page = new Page($count,10);
$limit = $page->firstRow.’,’.$page->listRows;
//查询结果
$data = M(‘hope’)->order(‘time DESC’)->limit($limit)->select();
$this->assign(‘hope’,$data);
//前端模板中显示翻页按钮
$this->assign(‘page’,$page->show());
$this->display(‘index’);
注意,有的服务器不支持Index/index/uid/1/show/2这种格式,可以设置此参数为0,默认是1:

‘URL_MODEL’=>0,
(完)!

用原生javascript包装一个ajax方法

Jquery之所以被大多数前端开发人员使用(甚至是全部),就是因为它比原生javascript简单方便,选择某个元素直接用“$”就行,而不是一长串的document.getElementById()等等。

前端与后台进行数据传输的时候,大多数时候是用ajax与json来实现,下面是我用原生js打包的一个ajax函数,只要像jquery一样调用一下,就可以直接使用,源码如下,仅供参考!

HTML页面进行调用:

<script type=”text/javascript” src=”ajax.js”></script>
<script type=”text/javascript”>
//调用包装好的ajax方法
ajax({
method : “get”,
url : “get.php”,
asyn : true,
data : “user=zym&password=1234”,
fn : function( res ){
console.log( res );
}
});
</script>
打包好的ajax方法函数:

function ajax( myJson ){
//新建ajax对象
var xhr = null;
window.XMLHttpRequest?(xhr=new XMLHttpRequest()):(xhr=new ActiveXObject(“Microsoft.XMLHTTP”));
//定义数据传输方法“get”或“post”,如果没有写,那么默认的是用“get”方法!
var method = myJson.method||”get”;
//定义数据传输的地址!
var url = myJson.url;
//定义数据加载方式(同步或异步),默认的情况下,使用ajax,都是异步加载!
var asyn = myJson.asyn||true;
//定义传输的具体数据!
var data = myJson.data;
//成功之后执行的方法!
var fn = myJson.fn;
//第一种情况:如果是用get方法,并且data是存在的,就执行:
if(method==”get”&&data){
xhr.open(method,url+”?”+data+”&”+Math.random(),asyn);
}
//第二种情况:如果是用post方法,并且data是存在的,就执行:
if(method==”post”&&data){
xhr.open(method,url,asyn);
xhr.setRequestHeader(“content-type”,”application/x-www-form-urlencoded”);
xhr.send(data);
}else{
xhr.send();
}
//数据传输成功之后
xhr.onreadystatechange=function(){
if(xhr.readyState==4){
if(xhr.status>=200&&xhr.status<300){
fn(xhr.responseText);
}else{
alert(“程序出错!”);
}
}
}
}
或许你的朋友正在寻找这个问题的答案,赶紧分享给他吧!

怎么用微博营销来提升关键词排名

我也有自己的微博,很多的seo站长貌似并不喜欢微博,也不经常在微博上活跃,相反的做淘宝店铺的商家倒是离不开微博,有的还在线下组织聚会,产品卖的挺顺畅。

正好我的这个博客很久没更新,排名掉的找不着了,最近“太原seo”这个词才爬到第二页,下面我来分享一下:怎么用微博营销来提升关键词排名,其中需要注意几个点。

微博推广误区一:粉丝多了就好了

有些人仅有几十个人关注,标签排名比你好,是因为影响排名的关键因素是”互动“,如果对方的粉丝少,但是互动率几乎是百分之百,你僵尸军团如何取胜?
影响互动得因素很多,包括了评论、转发、点击、关注等。

微博推广误区二:发发微博就好了

微博是一个互动交流平台,想要推广好自己,就要拒绝自言自语,拒绝对牛弹琴。你需要转发与被转发,才会有更多人了解你,甚至喜欢你。你要参与别人圈子,别人才会来到你的圈子。

微博推广误区三:做做内容就好了

”方向不对,努力白费“,如果你想推广好自己的微博,你就该思考怎么做才是对的。

如何做粉丝需要的内容?

如何引导粉丝点击你的内容?

如何诱惑粉丝点赞、评论、转发?

就是任性,在不知不觉中很好的推广了自己!

微博推广误区四:推广自己的品牌就好了

很多企业做微博,都埋头更新自己企业的内容,自己的服务品质,目的很简单——推广赚钱。结果很明显——没粉没流量。你这么XX粉丝眼球合适么?王婆卖瓜自卖自夸,如何让别人信任你呢?你必须改变营销策略!

微博推广涨粉新思路。

比如:你是做房地产的,大众并不关注你家房子有多么好,反正买不起,你必须换个思路,大众关注什么?——房价啊!只有房价才是牵动他们内心的锁链啊!自己思考吧。

再比如:你是做汽车美容的,你整天更新汽车保养知识没错,但是你的粉丝精准么?这么快的生活节奏,很少有人费心思看你长篇大论。使用一些保养小技巧的形式,越是简短效果会越好。

总结:营销的方法有很多,做好了其中一种,都可以起到引流作用,微博上不要装X,实事求是的来,有什么说什么,认证一下最好,比如我的博客品牌名是“赵一鸣seo”,那我的微博也就认证了“赵一鸣seo”,加个v并不是说装大v,而是个人一种最起码的信任感。

相关推荐:

微博营销#1#如何做好微博线下活动

提高网站转化率的策略

上次我在博客分享了:提升转化率#1#留给用户一个思考的时间,今天继续来分享:提高转化率#2#找竞争对手的反关节,想要提升网站的转化率,需要很多种策略结合起来使用,只是单方面的做好其中一项,起到的效果并不会太明显。

刚做起来来的一个新站,无论是在资源方面还是外链方面都没有竞争对手强大,除非竞争对手的优化工作止步不前,否则我们一直跟在他们后边做优化,永远都超越不了人家。这个时候需要我们另辟蹊径。

360是实行互联网免费策略的先驱,他在做免费的时候,就是“让战火在别人的院子里燃烧”,与金山、瑞星这些老牌的杀毒厂商相比,当年刚上线的360杀毒就是一个新人,在用户受众与杀毒技术方面完全不是一个等量级。他用了免费的策略,让竞争对手既想跟进又不敢跟进,如果跟进,那就得丧失以前的收入,如果不跟进,就只能眼睁睁的看着360攻城略地,用户慢慢的流失到360那边。

当年的杀毒软件都是收费的,很多用户的电脑都是在裸奔,想要使用杀毒软件就必须得购买,“电脑杀毒”这个服务是用户迫切需要的,而360通过免费这个策略很好的满足了用户的需求,并且这个策略是其竞争对手进退不得的。用这种方式成就了今天的360。

优化太原雅辉装修公司的网站的时候,当你搜索“太原装修公司”、“山西装修公司”、“山西装饰公司”这种词,排在前边的都是土巴兔、装修123这种大平台,太原本地的装修公司网站很少有好的排名,靠一个人的力量想要超过这种有大量seo维护的装修平台,确实不容易。

不容易也得做,找到太原的业主对于装修的刚性痛点需求,看竞争对手是否满足了,如果没有,那就是机会。经过分析,发现业主在搜索太原本地装修服务的时候,很关心太原装修报价,他们除了想看高清真实的装修效果图之外,还想知道装修一套房子需要多少钱。然后去看看同行的,他们并没有做太原的装修报价或者是价格表,就算有的网站出现了装修价格,但是业主看完以后,还是不知道“我家装修完以后大概需要多少钱”。所以我在雅辉装修的网站里专门放置了装修报价这个栏目,根据不同的房屋类型(一居室、二居室)或者是根据时间的变化(2015上半年、2015下半年),给用户展现了可参考的装修价格,从用户体验的角度来讲,这个装修价格还可以做的更好一些,但是暂时不用,因为同行并没有做这方面,所以我做到现在的状态就可以超过他们了,其实还有很多的策略可以实施,网站有了盈利能力,慢慢来做就可以。这些策略我也会继续公布在我博客。

网站优化策略

在装修这个行业,很多的同行害怕透漏价格,所以在网站上并没有很好的满足这一需求,装修报价就是竞争对手的反关节,同行想跟又不敢跟,因为他们之前有很多的老客户,如果公布价格之后,老客户发现之前的装修价格高了,肯定不会高兴的。雅辉装修没有这方面的顾虑,所以可以大胆的做。

公司产品或者是服务的价格,很多的网站都不敢呈现,因为害怕竞争对手参考,引起价格的竞争,其实这个根本没有必要担心。因为互联网本来就是开放的,只要用户有对于产品价格的需求,如果你不提供,别人提供了,那人家就有排名。同行做了参考,那也没关系呀,优化整个网站结合高转化率策略,如果你的产品或服务能搞过同行,用户肯定不会在意那点差价的,反而认为高价格的产品,质量肯定好。什么时候见过iphone手机因为价格高反而卖不出去了?

其实,实施“找竞争对手的反关节”这种策略,关键在于2点。第一:找到同行没有满足的用户刚性需求;第二:毫不犹豫的满足实施(乐于分享)。

我之前也在搜外分享了一篇文章《百度知道操作细节:秒杀竞争对手》,有人看完之后就给了以下评论。

提升网站转化率的策略

能给出这种评论,说明这篇文章对他确实产生了帮助。

有些人通过我的赵一鸣随笔博客找到我的Q群,然后我在群里问:“你们在搜外、a5等平台投稿之后,引来的流量有多少呢?”很多人都说寥寥无几。搜外这么多人发原创,难道读者看完一篇帖子,就会跟着帖子的思路走,然后帮你完成引流任务吗?肯定不会的,因为别人没有得到惊喜或者是意外的收获!

下面是看完这篇“百度知道操作细节:秒杀竞争对手”的文章之后从搜外来到我博客的部分流量统计。

百度流量统计

我在搜外分享完做百度知道的秘密之后,又在我的博客写了篇用豆瓣秒杀竞争对手的文章,因为先前用户已经对我产生了基本的信任,所以再来引导他们浏览这篇豆瓣的文章,肯定是毫无压力的。

总结:找到用户的刚需,同时也是同行的反关节,毫不犹豫的去实施,就可以做到“让战火在别人院里燃烧”,并且提升网站的转化率。

织梦程序后台登录之后提示数据库连接失败的解决方法

织梦后台提示连接数据库失败

织梦程序后台登录之后提示数据库连接失败,原因分析如下:

1、你之前登录过后台,如果之前登录过,但是现在登录不了,就说明你的数据库出错或者是数据库文件有丢失,你可以把之前备份的数据库重新导入一下(如果没有备份数据库,那就没办法了)。

2、你这个网站是新上线的吗?如果是新上线网站导入数据库出错,一般是由于本地和空间数据库版本不一样导致的,具体解决方法这里已经写的很详细了,可以参考一下《织梦网站搬家,数据库无法导入的解决方法》。

3、查看你织梦根目录下面的include文件夹,里边有一个common.inc.php文件,看里边的data数据库连接地址是否正确。

4、查看data文件夹下的common.inc.php数据库连接信息是否正确。

大多数织梦数据库连接出错就是这几个原因,你可以排除一下,如果有疑问可以私聊我解决!

织梦程序自定义表单提交时添加验证码的详细步骤

使用织梦程序做二次开发的时候,有些行业需要用户在线提交一些信息,为了避免其他人捣乱,最好是在提交信息的时候添加一个验证码,这样就可以在一定程度上避免这种情况,下面我来说说具体的织梦程序自定义表单提交时添加验证码的详细步骤。

第一步:找到放置自定义表单提交代码的那个模板。

第二步:在你想要加入验证码的那个位置,加入以下代码:

<input name=”validate” type=”text” id=”vdcode” style=”text-transform:uppercase;” size=”8″/>
<img id=”vdimgck” align=”absmiddle” onClick=”this.src=this.src+’?'” style=”cursor: pointer;” alt=”看不清?点击更换” src=”../include/vdimgck.php”/>
<a href=”javascript:vide(-1);” onClick=”changeAuthCode();”>看不清? </a>
第三步:在这个模板页面的最下面加入以下javascript代码:

<script type=”text/javascript” language=”javascript”>
function changeAuthCode(){
var num = new Date().getTime();
var rand = Math.round(Math.random() * 10000);
num = num + rand;
$(‘#ver_code’).css(‘visibility’,’visible’);
if ($(“#vdimgck”)[0]) { $(“#vdimgck”)[0].src = “../include/vdimgck.php?tag=” + num; }
return false;
}
</script>

第四步:根据路径在插件文件夹plus下面找到diy.php这个文件,用代码编辑器进行编辑,在大约61行的位置插入如下代码:

//添加验证码开始
$validate = empty($validate) ? ” : strtolower(trim($validate));
$svali = strtolower(GetCkVdValue());
if(($validate==” || $validate != $svali) && preg_match(“/6/”,$safe_gdopen))
{ResetVdValue();
ShowMsg(‘验证码不正确!’,-1,0,1000);
exit();}
//添加验证码结束
好了,保存之后,更新后台,刷新页面,就可以看到效果。

织梦后台登陆后又返回登录界面问题

今天在QQ群里,有几个站长问了一个同样的问题:织梦后台登录成功后怎么又返回到登录界面了?用户名和密码都填写正确了,但就是不行,今天针对这个问题,我来做一个统一回答!

解决方法:

1、清空浏览器缓存,重新登录;

2、如果不行就看看是不是动了文件夹权限,打开网站的FTP试着修改文件夹权限755;

3、如果再不行那就打开网站的FTP,进入后台文件,找到根目录下的/data/ssions/文件,里面会有很多文件,我们不管他,直接删除。

4、如果以上3种方法都不行,那就是您的空间容量不足,站内文章太多,必须要升级空间了!

打开网站后台,重新刷新网页,然后你再次登录,看,问题是不是解决了!

织梦后台无法编辑文章一片空白怎么办

使用织梦程序添加文章的时候,突然发现编辑页面一片空白,在排除网速加载慢的情况下,该如何处理呢?下面我来具体讲一下织梦后台无法编辑文章一片空白的解决方法。

1、通过ftp找到你的网站后台文件夹(织梦程序默认是dede,可以自定义)。

2、在dede文件夹中找到archives_do.php文件,用Dreamweaver或者是Editplus打开,最好不要用记事本编辑,因为他会过滤掉php文件中的一些特殊字符。

3、找到下面这段代码:

header(“location:{$gurl}?aid=$aid”);

将其替换成:

echo ‘<META HTTP-EQUIV=”REFRESH” CONTENT=”1; URL=’.$gurl.’?aid=’.$aid.'”>’;

进行保存。刷新页面,即可正常编辑!

织梦内容页调用文章缩略图的方法

有很多朋友都知道如何在dedecms的列表页调用缩略图,但是却不知道如何在文章内容页调用该文档的缩略图。

今天来为大家写一个教程,教大家如何在dedecms内容页面调用文档的缩略图。

其实很简单,只需要在内容页模板里需要调用缩略图的地方插入下面的标签代码就可以了。

<img src=”{dede:field.litpic /}”>
还可以做个扩展,在文档有缩略图的时候才显示,没有缩略图则不显示.代码如下:

{dede:field.litpic runphp=”yes”}if (@me!=”){@me= “<img src='”.@me.”‘/>”;}{/dede:field.litpic}
顺带着把列表页无缩略图就不显示的模板调用代码也送给大家.代码如下:

把下面的代码加到{dede:list}{/dede:list}里面。
[field:array runphp=’yes’]@me = (strpos(@me[‘litpic’],’defaultpic’) ? “” : “<a href='{@me[‘arcurl’]}’><img src=\”{@me[‘litpic’]}\” alt=\”{@me[‘title’]}\”/></a>”); [/field:array]
好的,搞定!还有其他问题可以在Q群里跟我私聊帮你解决!

织梦首页,列表页,文章页文章发布时间标签调用

用织梦程序做的一些行业网站,如果这类文章具有很强的时效性,那么在文章标题的前边加上文章发布时间,并且时间的展示形式也有很多种,这样可以吸引用户进行点击,因为用户都想看最新的新闻。下面我来讲一下织梦首页,列表页,文章页文章发布时间标签调用方法。

一、织梦首页时间标签调用

1、11-20 样式

([field:pubdate function=’strftime(“%m-%d”,@me)’/])
2、2,May 15, 2009 样式

([field:pubdate function=’strftime(“%b %d, %Y”,@me)’/])
二、织梦列表栏目页时间标签调用

1、2009-12-27 18:30:02 样式

[field:pubdate function=”GetDateTimeMK(@me)”/]
2、2009-12-27 样式

[field:pubdate function=”GetDateMK(@me)”/]
三、织梦文章内容页时间标签调用

1、2009-12-27 样式

{dede:field function=’GetDateMk(@me)’/}
2、May 15, 2009 样式

{dede:field function=’strftime(“%b %d, %Y”,@me)’/}
3、最后更新时间:x日

{dede:tagname runphp=’yes’}@me = date(“Y-m-d H:i:s”, time());{/dede:tagname}
4、xx天前

[field:pubdate runphp=’yes’]
$today = Floor(time()/(3600 * 24));
$senday= Floor(@me/(3600 * 24));
$updays = $today-$senday; if($updays==0) @me = “今日”; else @me = $updays.”天前”;
[/field:pubdate]
以上是织梦首页、栏目页和文章页的文章发布时间调用标签,有多种形式,可以根据自己的实际情况进行选择。只需将对应的代码放在需要调用的位置即可生效。

在标签调用过程中遇到任何问题,可以来Q群里找我私聊解决!

织梦提示把数据保存到数据库附加表 `dede_addonarticle`

想必大家用的都是最新的织梦v5.7版本,这个版本有个问题,就是在后台发布文章的时候,会提示【把数据保存到数据库附加表 `dede_addonarticle` 时出错,请把相关信息提交给DedeCms官方】。下面我来说说具体的解决办法。

1、进入后台,依次打开【“系统” -—“系统设置” — “SQL命令行工具”】;

2、运行以下SQL命令行

alter table dede_addonarticle drop primary key
3、更新系统缓存,重新去发布一篇文章,看,是不是问题解决了。

在具体操作过程中遇到任何的问题,都可以来Q群里找我私聊解决!

织梦网站搬家,数据库无法导入的解决方法

网站的服务器总是出问题,对SEO优化有很大的影响,现在很多的网站都是用织梦做的,网站搬家的时候需要把数据库重新导入到新的服务器里边,但是在导入的过程中有时会出错,很多朋友不知道该怎么解决,今天给大家详细说明一下。

数据库导入错误,是因为两个服务器里边的数据库版本不一样,新服务器无法读取识别,影响数据库读取的原因就是【dede_purview】这张表有问题。

织梦数据库无法导入的问题

大家在导出原服务器数据的时候,先导出除这张表之外的其他数据库表,然后导入到新服务器的数据库里边。这张表单独导出。导出之后用记事本打开,看到如下图的标记,修改【USING BIREE】的位置就行。

修改完成后保存,再把这张表导入到新服务器数据库里边,这下就正常了。

织梦文章页评论框不显示的解决方法

对于很多的dedecms织梦程序新手来说,在使用织梦的时候会遇到很多的难题,比如今天说到的:织梦文章页默认评论框不显示的问题,下面我来详细说一下解决方法。

织梦默认评论框不显示

问题原因:

没有指定评论文档的ID,所以不能进行操作。

解决方法:

1、 打开网站根目录,找到templets/default模板文件夹,然后把ajaxfeedback.htm和ajaxfeedback2.htm的文件名进行互换。

互换织梦模板文件名

2、 打开系统后台主页,点击系统–系统基本参数–其他选项。

点击系统-系统基本参数-其他选项

3、 参数说明下面的“模板引擎禁用PHP函数”和“模板引擎禁用标签”内容全部删除,保持空白。

模板引擎禁用标签内容全部删除

4、 重新生成一下,更新所有,这样问题就解决了。

织梦友情链接个数限制的解决方法

织梦程序的友情链接默认情况下只能添加24个友链,每个友链最多是24个字符,很多站长想添加更多的友链,虽然在后台已经加上了,但是前台不显示,下面我来讲一下具体的解决方法。

第一步:根据路径找到/include/ taglib/flink.lib.php文件。

第二步:打开这个文件,在37行位置找到以下代码:

$attlist=”type|textall,row|24,titlelen|24,linktype|1,typeid|0″;
备注:type表示:链接类型;row表示:链接数量;titlelen:站点文字的长度;linktype表示:链接位置内页;typeid表示:所有类型。

现在只需要修改row后面的数值,就可以增加友情链接的数量。

第三步:更新后台,刷新前台页面,看,是不是解决了!

重要提示:如果按照以上方法操作之后,发现问题还不能解决,那就是你的字数实在太多导致的。

解决方法是:依次打开:织梦后台—系统—SQL命令行工具—单行命令,用sql语句实现。

alter table dede_flink modify column url char(200)
运行完成之后,会提示:成功执行1个SQL语句!这样就OK了。记得去更新后台。

织梦自定义表单禁止同一ip重复提交的方法

为了防止其他人多次提交数据,影响用户数据正常统计与回复,织梦程序做的自定义表单提交需要禁止同一ip多次提交,下面我来说下具体的操作方法。

1、通过ftp找到/plus/diy.php这个文件。

2、下载到电脑本地用dw或ediplus进行编辑。

3、找到如下代码:

if(!is_array($diyform))
{
showmsg(‘自定义表单不存在’, ‘-1’);
exit();
}
4、在以上代码的后边添加下面这段代码:

if(isset($_COOKIE[‘VOTE_MEMBER_IP’]))
{
if($_COOKIE[‘VOTE_MEMBER_IP’] == $_SERVER[‘REMOTE_ADDR’])
{
ShowMsg(‘您已经填写过表单啦’,’-1′);
exit();
} else {
setcookie(‘VOTE_MEMBER_IP’,$_SERVER[‘REMOTE_ADDR’],time()*$row[‘spec’]*3600,’/’);
}
} else {
setcookie(‘VOTE_MEMBER_IP’,$_SERVER[‘REMOTE_ADDR’],time()*$row[‘spec’]*3600,’/’);
}
5、好的,搞定,更新后台数据,重新去检测一下!

抓住申请百度投诉的最佳时机

如果你了解了百度等搜索引擎对网站进行排序的基本工作原理,那就知道搜索引擎也是程序在运行,不可能不出错。有的时候网站不明不白的出现了问题,都着急死了,但站长就是找不出原因,如果在确定没有被k的情况下,可以去百度站长平台进行投诉处理。下面我来分享一下抓住百度投诉申请的最佳时机。

一、网站流量降幅太大

通过百度统计、站长平台或者是其他的一些统计工具查到,如果网站的索引量、收录、关键词排名突然下降的厉害,但是最近确实没有做过什么违规操作,这个时候可以去尝试投诉。

二、原创文章长时间未被收录

原创文章写完之后已经提交了,而且外链也发了,几个月都没有被收录,就可以去申请投诉。

三、网站TKD显示异常

通过site方式或者搜索关键词,在搜索结果列表中展示的TKD信息与自己设定的不一样,就可以去投诉,但是这是建立在你的TKD书写规范的基础之上,有时候我们看到很多站长写的description根本不规范,这个时候,百度就是根据网站的内容去自己抓取形成描述。

四、网站安全误报

site网站首页网址的时候,最上边最出现网站的索引量、收录量以及网站是否安全,在经过公司程序员的详细检查之后,确实没有发现网站有任何的安全漏洞,但是在这块儿百度提示有安全漏洞,那么站长可以去站长平台申请投诉。

需要注意的是:百度站长平台的投诉功能不像西部数码的客服,当时投诉完了,不一定能马上得到回答,有的时候需要经过好几天,这个期间只需要正常优化网站即可,不要太着急。

不要随便去使用这个功能,网站本身确实出问题了的话,赶紧先自己解决,不要期望通过投诉能解决网站的排名问题,这个只是能解一时之需。像网站降权这种事情,投诉是一点用都没有的,一定要正确使用这个功能。查看如何避免网站被降权。

自动加载函数与扩展函数库定义及模板显示与模板替换

在Index文件夹下面有Conf配置文件夹,打开config.php配置文件,可以针对ThinkPHP内置的配置进行个性化设置。比如:

$config = array(
‘LOAD_EXT_FILE’=>’functions’,
‘TMPL_PARSE_STRING’=>array(
‘__CSS__’=>__ROOT__.’/’.APP_NAME.’/Tpl/Public/css.css’,
‘__HAHA__’=>’这是我自定义的一个用于在前端显示的路径’
)
);
return array_merge(include ‘./Conf/config.php’,$config);
1、LOAD_EXT_FILE是加载扩展函数的路径,我们单独写的函数方法全部是在Common文件夹下,我们新建一个方法文件common.php(比如是这个命名,否则不生效),在common.php文件中可以自定义函数,比如我们自定义一个say方法:

function say(){
echo ‘hello world’;
}
当然也有例外,如果我们没有新建common.php文件,而是新建了一个functions.php文件,那么我们必须修改一下配置项,设置LOAD_EXT_FILE的值是新建的这个文件名称(不带后缀)functions。

2、TMPL_PARSE_STRING是ThinkPHP自定义前端模板的路径以及字符串,比如我们在Index/Tpl/下面新建了index文件夹,然后新建一个index.html模板文件,body中输入:

<h1>__HAHA__</h1>
然后在配置项中添加如下代码:

‘TMPL_PARSE_STRING’=>array(
‘__HAHA__’=>’这是我自定义的一个用于在前端显示的路径’
)
这样在前端页面中就可以看到对应的文字,或者也可以在这里设置路径等。

自己创建一个Vue实例

Vue是数据驱动视图的,只要model(模型层)的数据改变了,Vue就会帮我们改变视图上显示的内容,不用我们自己去动手写代码更新。那么,它是怎么做到的,我们的代码要怎么写才能做到这一点。

通过创建vue实例可以解决这个问题。

首先确保本html文件中正确引入了vue.js文件,然后分4步走:

一、创建语法

创建一个vue实例的语法如下:

<script type=”text/javascript”>
var app = new Vue({
});
</script>
通过关键语句 new Vue( )我们就可以创建一个Vue实例:app了。我们注意到了我们给Vue( )传了一个参数选项,是一个空对象,我们接着往下看。

二、设置数据

我们利用上面的对象参数,来创建这个Vue实例app的,比如,设置app里面的数据:

var app = new Vue({
el : ‘#app’,
data : {
name : ‘赵一鸣’,
work : ‘WEB前端开发’
}
});
写法也很简单,参数对象不再是一个空对象,它包含一个属性:data,而data的值也是一个对象,这个对象就是我们给实例app设置的数据了。比如:name为“赵一鸣”,work为“WEB前端开发”等等。

三、挂载元素

创建了一个实例app,设置了app的数据后,我们怎么把数据展示在视图上呢这就要通过我们的挂载元素了。我们看看怎么用:

视图view部分:

<div id=”app”>
</div>
视图(html部分)上我们有一个id为”app”的div元素。

我们看到参数中我们不但有属性“data”,还多了个属性:“el”,el参数提供一个在页面上已经存在的DOM元素,作为我们实例app的挂载目标。表示我们的实例app和id为“app”的DOM节点就关联起来了。

四、渲染

实例vm创建好了,数据data有了,DOM节点也关联起来了,最后一步,就是把app的数据绑定到指定的视图上了,也就是数据渲染。

<div id=”app”>
<ul>
<li>姓名:<b>{{name}}</b></li>
<li>工作:<b>{{work}}</b></li>
</ul>
</div>
我们只需要用一个双大括号:{{ }} 即可,你可以留意到,{{ name }} 和 {{ work }} 就是我们给实例vm设置的数据name和work,我们用{{ }}可以直接读取到它们的值。

本节完!

字符串移除或添加函数

1、PHP中定义了可移除字符串中空格或者是其他指定字符的函数,用trim()来表示,具体代码如下:

<?php
$a = ‘hello world! ‘;
echo strlen($a);//输出原字符串的长度
echo strlen(trim($a));//输出删除字符串左右两边的空格之后的长度
echo strlen(ltrim($a));//输出删除字符串左边的空格之后的长度
echo strlen(rtrim($a));//输出删除字符串右边的空格之后的长度
echo trim($a,’hello’);//输出删除指定字符(hello)之后的字符
?>
2、往字符串中添加字符的函数str_pad(),代码如下:

<?php
$a = ‘hello’;
//str_pad(变量,添加后的字符个数,想要添加的字符);
echo str_pad($a,10,’*’).'<br/>’;
//str_pad(变量,添加后的字符个数,想要添加的字符,STR_PAD_RIGHT)//向右添加
echo str_pad($a,10,’*’,STR_PAD_RIGHT);
//str_pad(变量,添加后的字符个数,想要添加的字符,STR_PAD_LEFT)//向左添加
echo str_pad($a,10,’*’,STR_PAD_LEFT);
//str_pad(变量,添加后的字符个数,想要添加的字符,STR_PAD_BOTH)//同时向两侧添加,如果最后的字符数为奇数,那么右边添加的比左边多
echo str_pad($a,10,’*’,STR_PAD_BOTH);
?>

总结webpack-hot-middleware热加载相关错误的解决办法

这几天一直在折腾webpack-hot-middleware热加载的问题,其中也出现了很多问题,总算不断的通过百度、谷歌解决了,现在来总结下相关错误:

错误一:浏览器控制台中显示找不到__webpack_hmr

GET http://127.0.0.1:3450/__webpack_hmr 404 (Not Found)
在webpack的entry配置添加引用路径’webpack-hot-middleware/client?path=/__webpack_hmr&timeout=10000&reload=true’,相关的参数最好不要省略,否则会出现无法自动刷新的问题。处理脚本如下:

var hotMiddlewareScript = ‘webpack-hot-middleware/client?path=/__webpack_hmr&timeout=10000&reload=true’;
var devConfig = {
plugins: [
new webpack.optimize.OccurrenceOrderPlugin(),
new webpack.HotModuleReplacementPlugin(),
new webpack.NoEmitOnErrorsPlugin()
]
}
错误二:找不到hot-update.json

main.bundle.js:30 GET http://127.0.0.1:3450/static/44588e3474a86cea5670.hot-update.json 404 (Not Found)
webpack配置中的publicPath必须是绝对地址,详细配置如下所示:

module.exports = {
output : {
path: __dirname + ‘/src/build/’,// 打包后的文件存放的地方
filename: “[name].build.js”,// 打包后输出文件的文件名
publicPath: ‘http://127.0.0.1:3450/src/build/’ // 必须是绝对地址
}
}
错误三:No ‘Access-Control-Allow-Origin’ header

XMLHttpRequest cannot load http://127.0.0.1:3450/static/df222441abc9ddb6a616.hot-update.json. No ‘Access-Control-Allow-Origin’ header is present on the requested resource. Origin ‘http://localhost’ is therefore not allowed access.
不可思议,在本地访问竟然会出现AJAX跨域问题,仔细检查后发现,浏览器把localhost与127.0.0.1:3450当成了两个不同的域,解决的方法很多,只说最简单的一种,访问应用时,尽量采用与webpack配置中的publicPath完全一致的路径,如在本文中,最好的访问方法是输入http://127.0.0.1/访问本地应用。

错误四:OccurenceOrderPlugin构造器错误

new webpack.optimize.OccurenceOrderPlugin(),
TypeError: webpack.optimize.OccurenceOrderPlugin is not a constructor
at Object.<anonymous> (E:\Workspace\vue-hot\dev-server.js:23:6)
at Module._compile (module.js:570:32)
at Object.Module._extensions..js (module.js:579:10)
at Module.load (module.js:487:32)
at tryModuleLoad (module.js:446:12)
at Function.Module._load (module.js:438:3)
at Module.runMain (module.js:604:10)
at run (bootstrap_node.js:394:7)
at startup (bootstrap_node.js:149:9)
at bootstrap_node.js:509:3
此问题一般出现在webpack 2中,目前这个插件注释掉也不会报错,暂时没有发现其他问题,具体可参考:http://webpack.github.io/docs/list-of-plugins.html#occurrenceorderplugin

本文持续更新中,发现新问题会及时更新!

最好用的ES7异步操作之asyncawait

之前的博客笔记中学习了JavaScript异步操作之Promise对象,也使用了很长时间,听说ES7给出了最新的异步操作方法async/await,现在来体验下:

在此之前,首先需要了解Promise的基本用法,具体可参考:ES6异步操作之Promise对象

这里使用setTimeout来模拟一个异步操作,代码如下:

let fn1 = (time) => {
return new Promise((resolve, reject) => {
setTimeout(() => {
resolve(‘this is fn1’);
}, time);
});
};
let fn2 = (time) => {
return new Promise((resolve, reject) => {
setTimeout(() => {
resolve(‘this is fn2’);
}, time);
});
};
let start = async function () {
console.log(‘start’);
try {
let result1 = await fn1(1000);
let result2 = await fn2(1000);
console.log(`${result1}—-${result2}`);
console.log(‘end’);
} catch (e) {
console.log(e);
}
};
start();
执行以上代码,控制台先输出了【start】,等待1s后依次输出【”this is fn1″, “this is fn2″】和【end】。

以上start方法也可以替换成下面这种形式,适合多个异步操作:

try {
console.log(‘start’);
Promise.all([fn1(1000), fn2(1000)]).then((result) => {
console.log(result);
console.log(‘end’);
});
} catch (e) {
console.log(e);
}
async/await的基本规则:

1、async 表示这是一个async函数,await只能用在这个函数里面。

2、await 表示在这里等待Promise返回结果了,再继续执行。

3、await 后面跟着的应该是一个Promise对象(如果后面跟着的不是Promise对象,而是其他类型值,那么会立刻返回结果,这样的话定义async异步函数也就失去意义了)。

async/await与Promise对象的不同之处:

1、await等待的虽然是Promise对象,但不必写.then(..),直接可以得到返回值。

2、Promise 代码的意思是:“我想执行这个操作,然后(then)在其他操作中使用它的结果”。await 有效地反转了这个意思,使得它更像:“我想要取得这个操作的结果”。这听起来更简单。

做SEO要利用好手里的社交工具

为什么很多站长觉得SEO越来越难做,甚至有放弃的念头,每个人都在互相诉苦:流量在哪里?客户在哪里?一点转化都没有。。。。。。SEO优化技术在不断的变化,在当今这个时代,如果你还持守当初的那点优化思路,最后只能是退出这一行了。做SEO要利用好手里的社交工具,下面看具体分享。

太原雅辉装修公司网站的用户分为:1、做SEO群体(包括做装修类SEO的同行)2、想要学习网站建设的技术人员(pc和mobile)3、业主(目标用户)4、装修公司(装修施工人员、设计师等)。

目前做互联网最活跃、人数最多的社交场合莫过于QQ群,所以,我针对以上不同的用户群体,加入了相应的QQ群。

第一次测试:

加入QQ群之后,只是和群里的人简单聊了一下,就根据相应的群里人员喜好给了广告链接(幸运的是没被踢),最后的测试数据是这样的。

乍一看还不错,小小的新企业站有这么点数据,但是一看跳出率,就知道这个数据整理来说不是太理想,70%的跳出率还是很高,如果网站长期是这样的数据,在一些竞争激烈的行业里边,想要去的良好的排名几乎是不可能的。

第一次的引流结果不太理想,继续做。

第二次测试:

还是针对那几个QQ群的用户,我又进行了第二次的引流,但是这次没有那么着急,在每个群里边,我都积极的活跃了3天,充分了解了他们急需解决的难题以后, 针对他们的需求给予了解答(还是上次那样的“广告”连接),最后的测试数据如下:

通过数据对比发现,在ip和uv差不多的情况下,pv增加了1/3,跳出率几乎减少了一半,平均访问时间也多了将近1分钟。对于这个结果还是比较满意的。半天的解答时间,一波引流得到这个数据,对于小型企业站来说还不错。

总结:

1、 对于做优化的太原雅辉装修公司这个网站来说,它的目标用户就是以上所分析的那几类,但是对于同一批用户来说,不同的引流方式对他们产生了不同的影响,网站也有不一样的数据体现。如果是传统的广告引流,可能在路上挂几个广告,就会有人来主动打电话咨询,但是互联网不一样,用户想要得到他需要的信息,比传统方式容易的多,互联网上能够提供这种信息的不止你一个,如果能抓住这批用户呢?我想,除了提供与竞争对手差异化的需求之外,合理的运用社交也是非常重要的。

2、既然他们也选择了QQ群进行交流,那么“快、准”的得到信息是他最需要的,群里边到处是发广告的,如果你也跟着发,就算你的答案是最正确的,但也不会在那么的广告信息中脱颖而出,这种引流效果非常有限。相反,如果合理的利用QQ群,积极的了解群里的各类需求,然后再给予解决,不仅能提升你在群员之间的信任度,以后就算是直接发广告,群里的人也会直接点击的链接,而不是其他人的。

3、互联网上,用户不喜欢那种硬性的广告。在我做测试的这几个QQ群中,装修工人、装修设计师大多数还是比较传统的,他们只管施工,对于互联网并不是太在意,顶多就是上个QQ、浏览一下新闻、打开百度查一下信息。但是在交流的过程中,我发现他们比那些专业做互联网的人更讨厌广告,在这样的群里发链接,人家点都不会点,有时候直接就被管理员移除群了!

做SEO如果不做社交,网站优化难度会很大,但是互联网的社交还真得注意了,做好了,这些用户就是老访客,可以进行再次转化,比传统渠道 容易的多。太原雅辉装修公司的网站以后还会进行其他的引流测试。测试结果会继续公布在本博客中!

【灰色行业】极草网站优化诊断报告

每天晚上抽时间在群里分析网站,昨晚一个站长给我看了一下他的网站,是做极草的,下面简单来做个诊断分析。

1、网站给用户的第一印象

虽然之前没有了解过极草这个产品,但是网站的整体色调做成灰色,体验肯定是不要,从网站布局来看,像是一个博客,建议还是做成产品站的好。打开栏目列表页,翻页的代码肯定是出错了,css样式有问题。

2、从产品用户需求分析

百度搜索“极草”这个词,从数据分析的结果看,用户查找极草的时候,最关心的是极草5x冬虫夏草吃法、营养价值和极草的价格,但是从网站的导航布局上看,并没有明了清晰的体现出这一需求。

3、网站缺少独一无二的品牌词

看了网站的标题,然后再去搜素一下,发现其他的网站已经占有了这个品牌词,并且显示有官网的标志,不仅仅是网站,对于一个公司来说,品牌词也应该是独一无二的。

4、标题设置有问题

第三点说了标题的问题,包括品牌词在内,这个网站的标题跟其他网站是有重复的,从匹配度上来讲,基本上是和人家的网站一模一样,小心被搜索引擎认为作弊。从用户需求的角度讲,网站的标题并符合要求。

5、站内关键词竞争排名

这个问题之前就提到过,很多的企业站都存在这样的问题,栏目页和文章页全部调用了首页的标题,例如都有“极草”这个词,搜索引擎在给极草排序的时候,应该给予哪个页面排名呢?

6、整体行业分析

搜索极草,从百度搜索列表来看,除了排在第一位的是认证了官网的企业站,其他都是大型网站的新闻源,大概了解一下这个产品,极草的价格是非常昂贵的,属于冬虫夏草的一类,属于半灰色行业的。指数500多,但是百度搜索结果并不多。

把“极草”这个词做上来的方法:

1、从百度搜索结果来看,企业站参与排名的并不多,百度肯定是把它列为半灰色行业,如果可以,最好还是申请一个官网图标,最起码先让百度认可,不然这种行业企业站很难做的!

2、极草是用来补养身体的,用户既然来到百度搜索这个词,第一需求肯定不是购买,而是了解极草的相关吃法、营养价值、价格等等,这个分析用户需求的时候已经讲清楚了,所以网站里边要根据这几个需求分来来展开。

3、关于网站盈利、也是提升排名的一种方式:

第一:站内不要展示极草产品,只提供信息查询,然后把来到网站的流量引导到店铺去进行下单,实际上是淘宝客的一种形式;

第二:站内展示极草产品,但是鉴于百度对灰色行业的封禁,产品栏目的所有内容最好是用robots封禁,禁止百度来抓取。

4、网站整体改版:这种布局的网站肯定不行,微调也是无处下手,最好还是重新做一个站,然后根据上面几点分析的需求进行布局和更新。一切从用户需求的角度出发,这里建议了解一下通过分析用户需求确定网站标题的三个步骤。马上能写出一个让用户和搜索引擎都喜欢的标题。

$this、self、parent详解

在PHP中,$this指的是实例化的对象,而不是类本身,如下代码:

class A{
public $name;
function __construct($x){
$this->name = $x;
}
public function show(){
echo $this->name;
}
}
$a = new A(‘zym’);
$a->show();//zym
在PHP中,self指的是类本身,而不是实例化的对象,如下代码:

class A{
public $name;
private $sex;
protected $height;
static $age = ’23’;
function __construct($x,$y,$z){
$this->name = $x;
$this->sex = $y;
$this->height = $z;
//self::$age = $m;
}
private function go(){
echo ‘go’;
}
public function show(){
echo $this->name.'<br/>’;
echo $this->sex.'<br/>’;
echo $this->height.'<br/>’;
echo self::$age.'<br/>’;
}
static function showAge(){
echo ‘my age is 23’;
}
}
$a = new A(‘zym’,’man’,’180cm’);
echo A::$age;//23
$echo $a->age;//报错
在PHP中,子类继承父类并改写了父类中的方法,但是依然想要调用父类中的方法,就用parent,如下代码:

class A{
public function show(){
echo 123;
}
}
class B extends A{
public function show(){
echo ‘456’.'<br/>’;
parent::show();
}
}
$b = new B();
$b->show();//456 123

CommonJS和AMD/CMD区别详解

近几年做WEB前端开发,大家都提倡模块化、按需加载。对于模块化,之前听的最多的就是CommonJs、AMD和CMD规范,但是他们之间到底有什么区别,我也不是很清楚,今天google了下,有个基本的了解了。

一、CommonJs

一开始大家都认为JS是弱类型语言,最多就是写几个浏览器端的效果,没什么用,官方定义的API只能构建基于浏览器的应用程序,最终CommonJs出世了,CommonJS API定义很多普通应用程序(主要指非浏览器的应用)使用的API,从而填补了这个空白。它的终极目标是提供一个类似Python,Ruby和Java标准库。这样的话,开发者可以使用CommonJS API编写应用程序,然后这些应用可以运行在不同的JavaScript解释器和不同的主机环境中。

在兼容CommonJS的系统中,我们可以使用JavaScript开发以下程序:

(1).服务器端JavaScript应用程序;

(2)命令行工具;

(3)图形界面应用程序;

(4)混合应用程序(如,Titanium或Adobe AIR)。

目前我也只是用过NodeJs,也就是以上第一点,在服务端使用JS开发应用程序,其他三点暂时还没有接触过。

2009年,美国程序员Ryan Dahl创造了node.js项目,将javascript语言用于服务器端编程。这标志”Javascript模块化编程”正式诞生。因为老实说,在浏览器环境下,没有模块也不是特别大的问题,毕竟网页程序的复杂性有限;但是在服务器端,一定要有模块,与操作系统和其他应用程序互动,否则根本没法编程。NodeJS是CommonJS规范的实现,webpack 也是以CommonJS的形式来书写。

node.js的模块系统,就是参照CommonJS规范实现的。在CommonJS中,有一个全局性方法require(),用于加载模块。假定有一个数学模块math.js,就可以像下面这样加载。

var main= require(‘./main’);
变量main就是main.js模块的返回结果,最后我们就可以使用main.js模块中的方法。详情查看:《2017年NodeJs学习笔记【图文】》。

CommonJS定义的模块分为:{模块引用(require)} {模块定义(exports)} {模块标识(module)}。

require()用来引入外部模块;exports对象用于导出当前模块的方法或变量,唯一的导出口;module对象就代表模块本身。

虽说Node遵循CommonJS的规范,但是相比也是做了一些取舍,填了一些新东西的。

所以总的来说,CommonJs就成了一种规范,而我们现在真正用到CommonJs规范的就是NodeJs。

二、AMD

基于commonJS规范的nodeJS出来以后,服务端的模块概念已经形成,很自然地,大家就想要客户端模块。而且最好两者能够兼容,一个模块不用修改,在服务器和浏览器都可以运行。但是,由于一个重大的局限,使得CommonJS规范不适用于浏览器环境。如果将上面的代码运行在客户端浏览器,就会报错。

上面的require方法是同步的。这对服务器端不是一个问题,因为所有的模块都存放在本地硬盘,可以同步加载完成,等待时间就是硬盘的读取时间。但是,对于浏览器,这却是一个大问题,因为模块都放在服务器端,等待时间取决于网速的快慢,可能要等很长时间,浏览器处于”假死”状态。

因此,浏览器端的模块,不能采用”同步加载”(synchronous),只能采用”异步加载”(asynchronous)。这就是AMD规范诞生的背景。

CommonJS是主要为了JS在后端的表现制定的,他是不适合前端的,AMD(异步模块定义)出现了,它就主要为前端JS的表现制定规范。

AMD是”Asynchronous Module Definition”的缩写,意思就是”异步模块定义”。它采用异步方式加载模块,模块的加载不影响它后面语句的运行。所有依赖这个模块的语句,都定义在一个回调函数中,等到加载完成之后,这个回调函数才会运行。

AMD也采用require()语句加载模块,但是不同于CommonJS,它要求两个参数:

require([module], callback);
没错,requireJs就是AMD规范的实现。对于requireJs的使用方法,我之前的笔记已经有详细的说明,详细查看:《RequireJs学习教程》。

三、CMD

大名远扬的玉伯写了seajs,就是遵循他提出的CMD规范,与AMD蛮相近的,不过用起来感觉更加方便些,最重要的是中文版,应有尽有:seajs官方doc。

define(function(require,exports,module){…});
前面说AMD,说RequireJS实现了AMD,CMD看起来与AMD好像呀,那RequireJS与SeaJS像不像呢?

虽然CMD与AMD蛮像的,但区别还是挺明显的,官方、非官方都有阐述和理解,个人感觉说的都挺好:

《SeaJs与 RequireJS 的异同》

《SeaJS与RequireJS最大的区别》

本节完!

揭秘:新站怎样建设才能迅速获取排名!

从增长的角度看,企业的SEO就是一个有自驱力的增长闭环。排名与点击相互影响,排名越好,网站点击越多,从而又促进排名的提升。随着增长闭环变成增长飞轮,SEO的投入越来越少,效果却越来越好。从增长的角度看,企业的SEO就是一个有自驱力的增长闭环。排名与点击相互影响,排名越好,网站点击越多,从而又促进排名的提升。随着增长闭环变成增长飞轮,SEO的投入越来越少,效果却越来越好。
如何做一个可以实现上述增长飞轮的网站?第一,肯定是电脑能够运行网站的环境。第二,用的是什么系统。第三,内容管理系统。今天就以工具为切入点一起来学习如何快速获取搜索引擎排名。01

搭建本地的运行环境

建站搭建本地的运行环境,推荐phpstudy。phpstudy是一个PHP调试环境的程序集成包。该程序包具有集成最新的Apache+PHP+MySQL+phpMyAdmin+ZendOptimizer,一次性安装,无须配置即可使用的优点。是非常方便、好用的PHP调试环境!

有一定SEO基础的同学也可以选择PHPTS工具,它的优点是扩展性能更好,支持的环境软件更多,可以在远程服务器上布局环境,不但支持本地,还可以支持远程服务器上面的配置!

02

帝国CMS建站系统

建站系统推荐帝国CMS,它是目前最稳定的建站系统,帝国CMS建站系统需要什么运行环境呢,就是我们讲到的第一点,使用phpstudy或者phpts创建的运行环境。

帝国CMS建站系统的一个比较好用、便捷的功能就是你所有操作上的问题都可以在编辑手册中找到。

03

网站的内容管理系统

搜索引擎起初存在的目的是为了帮助用户,提供有价值的内容。有价值的的内容取决于用户搜索到文章的质量,而网站又是由多个文章页面构成。那么影响网站排名主要有哪几个因素呢,请看下图!

了解了文章对网站排名的影响,那么怎么快速输出高质量文章呢?建议选择星矿内容管理系统!

推荐工具(星矿内容管理系统)
04

如何快速获取网站排名

影响网站排名的因素有:TKD、URL、域名、服务器所在地、网站打开速度、收录数量、网站结构、代码简易度、关键词覆盖度、关键词字体尺寸、网站内容重复度、H1 H2 H3、关键词密度、Alt、面包屑导航、TKD字符长度、更新率、目录名、锚文本、内链、外链、域名后缀、域名年龄、URL长度、二级域名、Robots、Sitemap、301跳转、404页面、SSL证书、云加速、点击率、停留时长、跳出率、用户体验、页面大小、静态页面、门页、HTML是否符合W3C标准、等等。下面就从6个主要因素来讲如何快速获取网站排名(见下图)。

划重点
快速获取搜索引擎排名,需要用phpstudy运行环境+帝国CMS建站系统创建内贸网站,然后用星矿内容管理系统提高网站关键词覆盖度,提供高质量的内容,为客户提供有价值的文章。

-End-