分类目录归档:PHP

使用插件显示博客阅读数量

博客的访问统计已借助第三方工具实现,但是参考了传统的公共博客系统,每篇博客都有阅读数量统计和显示。本着“WP插件无所不能”的信念(主要是懒得自己考虑如何把第三方工具的统计数据引入进来),经过一番搜索后问题解决。

 

用到的插件:

WP-PostViews:用于统计每篇博客的阅读数量(首页访问不计入统计范围)

PHP Code Widget(可选): 用于在小工具栏执行php代码

 

操作方法:

1、安装WP-PostViews并启用

2、(在合适位置)添加阅读数显示代码:

<?php if(function_exists('the_views')) { the_views(); } ?>

显示最受欢迎的日志:

<?php if (function_exists('get_most_viewed')): ?>
   <ul>
      <?php get_most_viewed(); ?>
   </ul>
<?php endif; ?>

2.1(可选):修改主题相关页面,如index.php, archive.php, single.php, post.php , page.php等,并添加以上代码,及适当的布局,此方法适用于对显示效果有严格要求的人

2.2(可选):因为之前的使用经验,修改主题布局后,再升级主题会导致修改的内容消失。所以考虑使用小工具来解决此问题。但是默认情况下,小工具并不支持执行php代码。搜索后使用插件PHP Code Widget解决问题

3、使用小工具显示博客浏览数

搜索安装并启用PHP Code Widget后,在外观——小工具页面,拖动一个PHP Code标签到小工具栏的合适位置,并根据自己的需求设置合适的内容,保存后测试

 

一些问题:

1、与WP Super Cache的兼容问题:

博客使用了WP Super Cache,但WP-PostViews可以采用ajax方式,使得即使启用了缓存,统计依然可以准确进行。

此外,在小工具栏设置的显示访问数量代码,依然会收到cache影响。负面影响使会使阅读数显示不实时,正面影响是即使开启了这个插件,也可以做到全页面缓存

2、关于增加的数据库操作:

每次访问,会导致一次数据库wp-postmeta表中,post_id为对应博客id,meta_key为views的记录的update操作。由于update操作会导致一次随机读,操作代价比较大,当博客负载较重时不宜采用本插件。当博客负载过重时,建议使用可以部署在其他机器上的软件来实现。

Laravel 5 默认使用类/方法路由

在使用绝大部分框架时,路由默认行为为访问http://xxx.com/controller_name/function_name时自动路由至Controller_nameController.php控制器下的function_name方法(Yii2 中为actionFunction_name方法),在laravel中默认并不支持这么做并认为这是一个不好的习惯。
如果执意需要此功能,可通过修改路由实现。

修改路由文件rootpath/routers/web.php,在文件最后增加以下内容:

Route::get('{model}/{func}', function ($model,$func) {
$className = 'App\Http\Controllers\\'.ucfirst($model).'Controller';
$obj = new $className;
return $obj->$func();
});
Route::get('{model}', function ($model) {
$className = 'App\Http\Controllers\\'.ucfirst($model).'Controller';
$obj = new $className;
return $obj->index();
});

参考:
https://doc.laravel-china.org/docs/5.1/routing

使用对象存储加速网站访问

起因:国内主机的带宽实在是太贵了,买不起。。。被迫在项目上线之前就启用图片cdn。走了大概一周的弯路,发现其实用起来远比想象中来的简单。

程序端的思路:

考虑到以最小的代价改动原有程序,并能够提供一个开关来方便切换cdn服务商或者关闭cdn服务,故不考虑修改数据库中现有数据。
原有的图片以相对路径存储在数据库中(形如”images/1.jpg” “upload/20160815/100000.jpg”),输出时只要在记录前拼接cdn地址即可;
项目中使用了ueditor富文本编辑器(稍作修改使上传目录为/upload文件夹下),观察发现其图片url均为”./upload“开头,故替换”./“为cdn地址;
当不再使用cdn服务时,将cdn地址写成服务器主域名即可完成禁用。

由于这类对象存储服务都提供了无缝迁移功能(腾讯云中称之为”回源设置“,七牛中称为”镜像源“),即对象存储服务器中若不存在当前文件,则自动从用户设定的源地址获取,使得无需手动处理上传逻辑。

参考代码:(原始代码在公司,以下代码为在家写博客时凭回忆手写,并未调试,可能存在某些小错误;以说明思路为主)

class Zcdn
{
$cdn_host = '';
public function __construct()
{
//可以从配置文件中读取或手动修改此处配置;将此处修改为主域名以达到不使用cdn服务的目的
$this->cdn_host = 'http://your.cdn.host'; 
}
public static function auto($url, $type='normal')
{
if($type == 'normal'){
return (new Zcdn())->cdn_host.$url;
}elseif($type == 'ue'){
return str_replace("./", (new Zcdn())->cdn_host, $url);
}
}
}

调用:

//图片或者其他静态资源
Zcdn::auto($item['url_from_db']);
//使用ueditor富文本编辑器时保存在数据库中的记录
Zcdn::auto($item['ue_text_from_db'],'ue');