【基础篇】2、WordPress 的主题机制

在制作 WordPress 主题之前,先要大体了解一下 WordPress 的主题机制,这样才能将自己设计的 HTML 模板等,转换成 WordPress 所能识别的主题文件。在这篇文章中,有一些概念会比较抽象,在随后的教程中,你会亲身感受到这些概念,就明白了。所以,你只需要记住下面三个大标题即可,如果不懂不用怕,在后面的基础教程中,你会理解的。

经过潜行者 m思考总结,WordPress 主要有以下三个显而易见的主题机制:函数调用数据机制缺失文件替换机制分离文件分块调用机制

一个 WordPress 主题默认的文件目录

这是来自官方的说明,一个主题中需要包含以下文件。当然对于新手和比较简单的模板,我们并不需要设计生成这么多的文件,如果做比较专业的主题,则需要设计生成更多的文件,这个将会在【中级篇】的文章中深入介绍。

  • 404 错误页 = 404.php
  • 存档页 = archive.php
  • 存档索引页 = archives.php
  • 评论页 = comments.php
  • 底部 = footer.php
  • 头部 = header.php
  • 链接 = links.php
  • 首页 = index.php
  • 静态页 = page.php
  • 弹出式评论页 = comments-popup.php
  • 单篇博文页 = single.php
  • 搜索表单 = searchform.php
  • 搜索 = search.php
  • 侧栏 = sidebar.php
  • 样式表 = style.css

函数调用数据机制

首先你要明白,一个主题,要展示输入的文章等数据,它会需要一种代码来从数据库中提取数据,然后结合你自己编写的 HTML 文件,生成供浏览者观看的页面。

在 WordPress 中,官方团队为你写好了一系列的数据调用函数,使用这些函数以及相应的参数,就可以调用相应的博客数据并且显示出来。这样,当我们设计好了我们的 HTML 模板之后,只需要在相应的地方,加上调用相应数据的函数,就可以显示出来了。

在随后的教程中,我们就会遇到那些常用的函数,以及函数的参数和使用方法、效果。

缺失文件替换机制

从上面的标准主题的文件列表里面,我们可以清晰的看到每个文件都有每个文件的功能,例如 sidebar.php 是边栏文件; single.php 是用来显示文章的文件。同时,潜行者 m还说了,如果是比较简单的主题,并不需要这么多的文件。这里,你会不会产生一种疑问:如果缺少了某个功能文件,WordPress 会怎样处理?

这就是 WordPress 的缺失文件替换机制要处理的。WordPress 主题里面,最重要的只有两个文件:index.php、style.css 这两个文件。一个是模板文件,另一个是 CSS 定义样式用的。而其他的 single.php 等文件,则是 index.php 的下级文件。WordPress 发现没有相对应的功能文件(例如显示文章的 single.php),它就会使用上级文件来代替显示缺失文件的内容(缺失 single.php,就使用 index.php 来显示文章内容)。

具体关系如下图:

分离文件分块调用机制

制作主题的时候,通常先制作 index.php 文件,来做出整体的效果。做完 index.php 文件之后,我们通常会把顶部的信息、边栏、底部的信息,分离出来,分别生成 header.php、sidebar.php、footer.php 这三个文件。之后,在 index.php 以及其他的主题文件中,使用相应的函数来调用这三个文件。

为什么?因为头部、边栏和底部的内容,通常是不变化的,变化最多的就是博客的主体。所以将这几块分离出来,提高代码的重用,同时也提高修改和二次开发的效率,这点是非常科学的,你将会慢慢体会到。

本节课的总结

通过本节课,我们了解到了 WordPress 主体的标准文件列表,同时我们了解了三种 WordPress 的主题机制。其中,缺失文件替换机制,让我们了解到,比较简单的模板,并不需要设计生成标准文件列表里面的文件,我们只需要设计主要的文件即可,因为缺失的其他功能文件,WordPress 系统会使用 index.php 的文件内容来显示。所以,在【基础篇】,我们要做的主题文件列表如下:

  • index.php = 主体文件
  • header.php = 头部文件
  • sidebar.php = 边栏文件
  • footer.php = 底部文件
  • single.php = 文章显示文件
  • page.php = 页面显示文件
    同时,我们还确定了我们制作主题的大体流程:
  1. 制作 index.html 和 style.css 文件,确定主题的整体风格。
  2. 放入 WordPress 主题目录中,修改成 index.php。
  3. 对 index.php 进行文件分割,分离出内容不变的 header.php、footer.php、sidebar.php 文件。
  4. 由 index.php 文件,生成 single.php 文章页面,并进行简单改造。
  5. 由 single.php 文件生成 page.php 文件,因为文章和页面的布局比较像。
  6. 在各种主题文件中,插入 WordPress 数据调用函数,然后显示博客数据。
    随后的【基础篇】教程,潜行者 m将围绕这几个大体流程来依次讲解,直到最后做出一个比较简单的主题。

之前的系列文章

  1. 开始执行的 wordpress 主题教程计划
  2. 【基础篇】1、学习制作主题之前的准备
     

【基础篇】1、学习制作主题之前的准备

我学习主题制作的过程

最初学习 WordPress 主题制作的时候,需要一整套比较完整,比较全面的教程。经过搜索找到了由水煮鱼博客翻译的国外wordpress主题制作教程。第一遍看的时候,比较枯燥难懂,也是因为当时的 CSS、PHP 水平比较底下,导致没有耐心看下去。过了一段时间,决定彻底攻克下来,于是下定决心花了一天时间看完了。随后根据教程中讲解的,一遍实践下来,就了解的差不多了。过了几天,就按照自己的思路做出了自己第一个主题。

所以总结一下,学习主题制作教程需要两点

  1. 一点点 CSS、PHP、HTML 基础。没有基础比较吃力
  2. 找一套完整的教程,彻底学完,并且动手实践。
    水煮鱼博客的 WordPress 主题制作教程非常不错,很多人都是靠它入门的,但是也有一些缺点

  3. 老外写的,思想的差异,你懂的。

  4. 07年的,已经过时了,有些函数貌似被抛弃了。
  5. 翻译的,部分晦涩难懂,源代码的注释是英文。
    所以我打算根据自己这几个月来的主题制作得到的经验,重新补充升级一下。

搭建本地环境

在这里,我默认你的电脑系统为 Windows 系列,我们需要在本地搭建 PHP 环境。你可以选择一些整合的傻瓜安装包,但是如果你想多研究一下 PHP 的话,我还是建议分别安装 PHP、Apache、Mysql 然后配置一下。傻瓜化的安装步骤请移步本人这篇文章:本地搭建配置apache+php+mysql环境

搭建好本地系统之后,需要安装 WordPress ,这是废话,你懂的。

我有服务器,为什么还要自己本地安装?

  1. 在本地读取文件、加载速度快,不受网络限制。
  2. 直接修改文件刷新即可,不需要一遍遍的上传文件、覆盖、访问。
    当然,你不怕麻烦,也可以上传远程服务器。

文本编辑类工具

  • 记事本:小巧默认,但是编码、代码高亮功能不行,不推荐新手使用。
  • EmEditor:编码比较好,但是对代码段的处理不太好,而且是收费的,不过在中国免费,你懂。
  • NotePad++:推荐,本人目前就在用这个,无论从代码高亮、代码段等的处理,都比较好,免费开源。
  • Dreamweaver:推荐新手使用,可以帮你自动完成很多代码,不过有种受限的感觉。
    其他的开发环境,用也行,不过制作主题来说,有点大材小用。

浏览器类

  • Firefox & FireBug :推荐,做 Web 相关的东西,必不可少。
  • IEtest : 做IE兼容测试,如果你需要的话。
  • Chrome:做兼容测试。
  • Opera:做兼容测试。

制作主题的大体流程

  1. 思考并设计好你的主题样式。
  2. 制作出 HTML 页面,即大体的风格。
  3. 根据 WordPress 的主题机制等,进行改造。
    完成。

学习重点

  1. WordPress 的主题机制,以及相关技巧。

对于新手来说

你只需要准备一下两个东西就可以了

  1. Dreamweaver (推荐使用 8)
  2. xampp (一键搭建环境,搜索一下非常多)
  3. FireFox (浏览器,用来查看效果)

本人用到的工具

  1. NotePad++
  2. FireFox

之前的系列文章

  1. 开始执行的wordpress主题教程计划
     

 

ThinkSAAS 常用数据表结构

本文仅列出开发ThinkSAAS app比较常用的数据表结构,这样,可以方便构造sql语句,对数据库的信息进行操作。

ts_article =>文章列表

+—————+————+——+—–+———————+—————-+
| Field | Type | Null | Key | Default | Extra |
+—————+————+——+—–+———————+—————-+
| articleid | int(11) | NO | PRI | NULL | auto_increment |
| userid | int(11) | NO | | 0 | |
| cateid | int(11) | NO | | 0 | |
| title | char(64) | NO | | | |
| content | text | NO | | NULL ||
| path | char(32) | NO | | | |
| photo | char(32) | NO | | | |
| isaudit | tinyint(1) | NO | | 0 | |
| isrecommend | tinyint(1) | NO | | 0 | |
| count_comment | int(11) | NO | | 0 | |
| addtime | datetime | NO | | 0000-00-00 00:00:00 | |
| isrecommend | tinyint(1) | NO | | 0 ||
| count_comment | int(11) | NO | | 0 ||
|addtime | datetime | NO | | 0000-00-00 00:00:00 |
+—————+————+——+—–+———————+—————-+

ts_article_cate =>文章目录

+———-+———-+——+—–+———+—————-+
| Field | Type | Null | Key | Default | Extra |
+———-+———-+——+—–+———+—————-+
| cateid | int(11) | NO | PRI | NULL | auto_increment |
| catename | char(16) | NO | | | |
| orderid | int(11) | NO | | 0 | |
+———-+———-+——+—–+———+—————-+

ts_article_comment =>文章评论

+———–+———+——+—–+———+—————-+
| Field | Type | Null | Key | Default | Extra |
+———–+———+——+—–+———+—————-+
| commentid | int(11) | NO | PRI | NULL | auto_increment |
| articleid | int(11) | NO | | 0 | |
| userid | int(11) | NO | | 0 | |
| content | text | NO | | NULL | |
| addtime | int(11) | NO | | 0 | |
+———–+———+——+—–+———+—————-+

ts_group =>小组列表

+——————-+————+——+—–+———+—————-+
| Field | Type | Null | Key | Default | Extra |
+——————-+————+——+—–+———+—————-+
| groupid | int(11) | NO | PRI | NULL | auto_increment |
| userid | int(11) | NO | MUL | 0 | |
| cateid | int(11) | NO | MUL | 0 | |
| cateid2 | int(11) | NO | | 0 | |
| cateid3 | int(11) | NO | | 0 | |
| groupname | char(32) | NO | MUL | | |
| groupname_en | char(32) | NO | | | |
| groupdesc | text | NO | | NULL | |
| path | char(32) | NO | | | |
| groupicon | char(32) | NO | | | |
| count_topic | int(11) | NO | | 0 | |
| count_topic_today | int(11) | NO | | 0 | |
| count_user | int(11) | NO | | 0 | |
| count_topic_audit | int(11) | NO | | 0 | |
| joinway | tinyint(1) | NO | | 0 | |
| role_leader | char(32) | NO | | ?? | |
| role_admin | char(32) | NO | | ??? | |
| role_user | char(32) | NO | | ?? | |
| addtime | int(11) | YES | | 0 | |
| isrecommend | tinyint(1) | NO | | 0 | |
| isopen | tinyint(1) | NO | | 0 | |
| isaudit | tinyint(1) | NO | | 0 | |
| ispost | tinyint(1) | NO | | 0 | |
| isshow | tinyint(1) | NO | MUL | 0 | |
| ispostaudit | tinyint(1) | NO | | 0 | |
| uptime | int(11) | NO | | 0 | |
+——————-+————+——+—–+———+—————-+

ts_group_cates =>小组分类

+————-+———-+——+—–+———+—————-+
| Field | Type | Null | Key | Default | Extra |
+————-+———-+——+—–+———+—————-+
| cateid | int(11) | NO | PRI | NULL | auto_increment |
| catename | char(32) | NO | | | |
| referid | int(11) | NO | MUL | 0 | |
| count_group | int(11) | NO | | 0 | |
| uptime | int(11) | NO | | 0 | |
+————-+———-+——+—–+———+—————-+

ts_group_options =>小组配置

+————-+———–+——+—–+———+——-+
| Field | Type | Null | Key | Default | Extra |
+————-+———–+——+—–+———+——-+
| optionname | char(12) | NO | PRI | | |
| optionvalue | char(255) | NO | | | |
+————-+———–+——+—–+———+——-+

ts_group_topics =>小组帖子

+—————+————–+——+—–+———+—————-+
| Field | Type | Null | Key | Default | Extra |
+—————+————–+——+—–+———+—————-+
| topicid | int(11) | NO | PRI | NULL | auto_increment |
| typeid | int(11) | NO | MUL | 0 | |
| groupid | int(11) | NO | MUL | 0 | |
| userid | int(11) | NO | MUL | 0 | |
| appkey | char(32) | NO | | group | |
| appname | char(32) | NO | | ?? | |
| appaction | char(32) | NO | | topic | |
| appid | int(11) | NO | | 0 | |
| title | char(64) | NO | MUL | | |
| content | text | NO | | NULL | |
| thread_type | char(16) | NO | | | |
| path | char(32) | NO | | | |
| photo | char(32) | NO | | | |
| photoshow | tinyint(1) | NO | | 0 | |
| attach | char(32) | NO | | | |
| attachname | char(64) | NO | | | |
| attachshow | tinyint(1) | NO | | 0 | |
| attachscore | int(11) | NO | | 0 | |
| music | varchar(512) | NO | | | |
| video | varchar(512) | NO | | | |
| count_comment | int(11) | NO | | 0 | |
| count_view | int(11) | NO | | 0 | |
| count_love | int(11) | NO | | 0 | |
| istop | tinyint(1) | NO | | 0 | |
| isshow | tinyint(1) | NO | | 0 | |
| isclose | int(4) | NO | | 0 | |
| color | int(4) | NO | | 0 | |
| iscomment | tinyint(1) | NO | | 0 | |
| isposts | tinyint(1) | NO | | 0 | |
| isaudit | tinyint(1) | NO | | 0 | |
| addtime | int(11) | YES | | 0 | |
| uptime | int(11) | NO | | 0 | |
+—————+————–+——+—–+———+—————-+

ts_group_topics_comments =>小组主题评论

+————+———-+——+—–+———+—————-+
| Field | Type | Null | Key | Default | Extra |
+————+———-+——+—–+———+—————-+
| commentid | int(11) | NO | PRI | NULL | auto_increment |
| referid | int(11) | NO | MUL | 0 | |
| topicid | int(11) | NO | MUL | 0 | |
| userid | int(11) | NO | MUL | 0 | |
| content | text | NO | | NULL | |
| path | char(32) | NO | | | |
| photo | char(32) | NO | | | |
| attach | char(32) | NO | | | |
| attachname | char(64) | NO | | | |
| addtime | int(11) | YES | | 0 | |
+————+———-+——+—–+———+—————-+

ts_group_users =>小组成员

+———–+————+——+—–+———+——-+
| Field | Type | Null | Key | Default | Extra |
+———–+————+——+—–+———+——-+
| userid | int(11) | NO | PRI | 0 | |
| groupid | int(11) | NO | PRI | 0 | |
| isadmin | int(11) | NO | | 0 | |
| isfounder | tinyint(1) | NO | | 0 | |
| addtime | int(11) | NO | | 0 | |
+———–+————+——+—–+———+——-+

ts_photo =>照片列表

+————-+————+——+—–+———+—————-+
| Field | Type | Null | Key | Default | Extra |
+————-+————+——+—–+———+—————-+
| photoid | int(11) | NO | PRI | NULL | auto_increment |
| albumid | int(11) | NO | | 0 | |
| userid | int(11) | NO | | 0 | |
| photoname | char(64) | NO | | | |
| phototype | char(32) | NO | | | |
| path | char(32) | NO | | | |
| photourl | char(120) | NO | | | |
| photosize | char(32) | NO | | | |
| photodesc | char(120) | NO | | | |
| count_view | int(11) | NO | | 0 | |
| isrecommend | tinyint(1) | NO | | 0 | |
| addtime | int(11) | NO | | 0 | |
+————-+————+——+—–+———+—————-+

ts_photo_album =>相册列表

+————-+————–+——+—–+———+—————-+
| Field | Type | Null | Key | Default | Extra |
+————-+————–+——+—–+———+—————-+
| albumid | int(11) | NO | PRI | NULL | auto_increment |
| userid | int(11) | NO | MUL | 0 | |
| path | char(32) | NO | | | |
| albumface | char(64) | NO | | | |
| albumname | char(64) | NO | | | |
| albumdesc | varchar(400) | NO | | | |
| count_photo | int(11) | NO | | 0 | |
| count_view | int(11) | NO | | 0 | |
| isrecommend | tinyint(1) | NO | MUL | 0 | |
| addtime | int(11) | NO | | 0 | |
| uptime | int(11) | NO | | 0 | |
+————-+————–+——+—–+———+—————-+

ts_photo_comment =>照片评论

+———–+———–+——+—–+———+—————-+
| Field | Type | Null | Key | Default | Extra |
+———–+———–+——+—–+———+—————-+
| commentid | int(11) | NO | PRI | NULL | auto_increment |
| referid | int(11) | NO | MUL | 0 | |
| photoid | int(11) | NO | MUL | 0 | |
| userid | int(11) | NO | MUL | 0 | |
| content | char(255) | NO | | | |
| addtime | int(11) | YES | | 0 | |
+———–+———–+——+—–+———+—————-+

ts_tag =>标签列表

+—————+————+——+—–+———+—————-+
| Field | Type | Null | Key | Default | Extra |
+—————+————+——+—–+———+—————-+
| tagid | int(11) | NO | PRI | NULL | auto_increment |
| tagname | char(16) | NO | UNI | | |
| count_user | int(11) | NO | | 0 | |
| count_group | int(11) | NO | | 0 | |
| count_topic | int(11) | NO | | 0 | |
| count_bang | int(11) | NO | | 0 | |
| count_article | int(11) | NO | | 0 | |
| count_photo | int(11) | NO | | 0 | |
| isenable | tinyint(1) | NO | | 0 | |
| uptime | int(11) | NO | | 0 | |
+—————+————+——+—–+———+—————-+

ts_system_options =>系统配置

+————-+———–+——+—–+———+——-+
| Field | Type | Null | Key | Default | Extra |
+————-+———–+——+—–+———+——-+
| optionname | char(32) | NO | PRI | | |
| optionvalue | char(255) | NO | | | |
+————-+———–+——+—–+———+——-+

ts_user =>用户列表

+———-+———-+——+—–+———+—————-+
| Field | Type | Null | Key | Default | Extra |
+———-+———-+——+—–+———+—————-+
| userid | int(11) | NO | PRI | NULL | auto_increment |
| pwd | char(32) | NO | MUL | | |
| salt | char(32) | NO | | | |
| email | char(32) | NO | UNI | | |
| resetpwd | char(32) | NO | | | |
+———-+———-+——+—–+———+—————-+

ts_user_gb =>用户留言

+———-+—————+——+—–+———————+—————-+
| Field | Type | Null | Key | Default | Extra |
+———-+—————+——+—–+———————+—————-+
| id | int(11) | NO | PRI | NULL | auto_increment |
| reid | int(11) | NO | | 0 | |
| userid | int(11) | NO | MUL | 0 | |
| touserid | int(11) | NO | MUL | 0 | |
| content | varchar(2000) | NO | | | |
| addtime | datetime | NO | | 0000-00-00 00:00:00 | |
+———-+—————+——+—–+———————+—————-+

ts_user_info =>用户信息

+—————–+————-+——+—–+———+——-+
| Field | Type | Null | Key | Default | Extra |
+—————–+————-+——+—–+———+——-+
| userid | int(11) | NO | UNI | 0 | |
| ucid | int(11) | NO | MUL | 0 | |
| fuserid | int(11) | NO | MUL | 0 | |
| username | char(32) | NO | UNI | | |
| email | char(32) | NO | PRI | | |
| sex | tinyint(1) | NO | | 0 | |
| phone | char(16) | NO | | | |
| roleid | int(11) | NO | | 1 | |
| province | int(11) | NO | | 0 | |
| city | int(11) | NO | | 0 | |
| area | int(11) | NO | | 0 | |
| areaid | int(11) | NO | | 0 | |
| path | char(32) | NO | | | |
| face | char(64) | NO | | | |
| signed | char(64) | NO | | | |
| blog | char(32) | NO | | | |
| about | char(255) | NO | | | |
| ip | varchar(16) | NO | | | |
| address | char(64) | NO | | | |
| qq_openid | char(32) | NO | MUL | | |
| qq_access_token | char(32) | NO | | | |
| count_score | int(11) | NO | | 0 | |
| count_follow | int(11) | NO | | 0 | |
| count_followed | int(11) | NO | | 0 | |
| isadmin | tinyint(1) | NO | | 0 | |
| isenable | tinyint(1) | NO | | 0 | |
| isverify | tinyint(1) | NO | | 0 | |
| verifycode | char(11) | NO | | | |
| thems_other | tinyint(1) | NO | | 0 | |
| addtime | int(11) | NO | | 0 | |
| uptime | int(11) | YES | | 0 | |
+—————–+————-+——+—–+———+——-+

ts_user_options =>用户选项

+————-+———–+——+—–+———+——-+
| Field | Type | Null | Key | Default | Extra |
+————-+———–+——+—–+———+——-+
| optionname | char(12) | NO | PRI | | |
| optionvalue | char(255) | NO | | | |
+————-+———–+——+—–+———+——-+

这里只包含常用的数据表结构,至于其他的数据表请看这里ThinkSAAS 数据库结构 -> 数据表结构

至于本文中未列出的数据表,请在mysql命令行,使用describe命令查看。

人们究竟怎么去看你博客里的文章

这篇文章是我建博一年多以来一个观察和总结。阅读本文章,你也可以根据你博客的实际情况,对你博客的内容排版等做出调整,更有利于发挥你博客的能力。

首先要说明一点,这里说的博客,并不是生活记录类的博客。因为那类的博客,看的大多是朋友或者家人。这里说的是像潜行者m博客那样的,具有一定方向的博客,写的文章具有一定的应用价值的博客。因为这种博客,才能吸引大量网络上的有这方面需求的人来看。

从网址直接进入

浏览者的想法分析

从网址直接进入的朋友,可以能是记住了,或者是添加到了收藏夹里,也有可能是通过评论,回访进来的。但是就本人的博客而言,首页仅仅显示八篇文章,剩下的就需要继续翻页或者点击标签、目录分类才可以看到。通过这种方式进来的人,通常只会看第一页,仅仅是看到首页里面的八篇文章,而懒的继续点击看其他文章。也有个特例,如果访问者看到你首页的文章质量非常不错,可能就会收藏网站以便下次继续访问,也有可能会点击自己感兴趣的分类,查看更多文章。

解决方法:

  1. 设置醒目的目录链接等,吸引有兴趣的用户点击,这样可以看到更多的相关文章。
  2. 提高文章质量是重中之重,浏览者来看了,但只有文章质量提升上去了,浏览者才会留下来,之后继续观看。
  3. 在文章中增加相关性较强的文章链接,当浏览者观看文章的时候,可以继续看自己感兴趣的文章。

通过搜索引擎进入

浏览者的想法分析

这种方法得到的浏览者质量最好,但是要求博客文章的质量也要好。这一点比较适用于技术类博客,大家在搜索某个函数或者某个插件的时候,前面几个往往是独立博客,针对这个插件的介绍和使用方法等。一般不会有人去搜索某某心情,然后看到你博客上面,写你最近的心情如何。但是,浏览者往往看完文章,学到知识就走人了,而不会去看其他文章。

解决方法:

  1. 在文章的底部等,添加相关文章显示,浏览者可能会发现有很多他喜欢的文章,而继续看下去或者收藏一下。
  2. 提高文章质量,让浏览者明白,你的博客是一个质量非常高的博客,在你博客里,可以学到很多有用的知识。

从外链进入

浏览者的想法分析

这种外链进入,并非是上面说的第一条,这里的外链,主要是指在其他地方发表文章留下的版权链接、他人转载文章留下的原文链接、他人在文章中引用文章留下的链接等。这中方式进入的和第二条,通过搜索引擎进入的有异曲同工之妙。浏览者往往是为了好奇或者是扩充知识等,来到你的文章,但是一旦看完,就觉得没有什么必要继续看下去。

解决方法:

  1. 同第二条的解决方法。

实际应用

理论永远只是理论,能实践的理论才是好理论。现在就说一下本人的实际应用方案。

  1. 首先要提高整体的博客文章质量和素质,文章要是给别人看的,如果写的没有质量和水平,谁去看。
  2. 由于那次robots文件事件,导致百度收录全清,结果完全没有搜索引擎的流量。加强一了下SEO,现在百度每天一收。
  3. 在之前的文章中,仍然有很多精品文章,但由于百度收录没有,如果想要别人看到,则要在新写的文章中,不时地提一下之前写的文章,给出一个连接,让浏览者可以点击查看之前的精品文章。
  4. 为了增加对以前文章的收录,潜行者m还整理了一下以前的精品文章,加上原文链接,将其转载到其他博客或者网站上,这样,百度可以收录较早的文章,而其他博客平台或者网站上的用户,也可以看到之前的精品文章。
    计划就是这些,希望本文能给你一些启示和帮助。

ThinkSAAS 的安装与使用基础教程

昨天花了一段时间写这篇文章,电脑上装了金山词霸,词霸装了一个 firefox 插件,不知道为什么,在写文章的时候,就自动插上一个隐藏的 div 标签,导致频出异常.写完的那篇文章,也丢失了不见了.现在禁用了这个插件,就好了.

本文所说的 ThinkSAAS 版本为 1.85,在其他版本中,可能会略有不同.

安装

ThinkSAAS 的安装,是比较简单和方便的,我们首先把下载包解压,把 www 文件里面的所有文件上传到服务器.

之后,访问我们的网站,填写上相应的配置信息即可,系统会自动进行安装

不到一分钟,系统就安装完成,这时候,你可以到前台看看或者到后台配置网站相关信息.

配置

ThinkSAAS 系统与大家常见 cms 系统不同,它的功能配置,并不像其他系统那样,一个功能组打开配置.

简单形象的说,ThinkSAAS 系统,只是一个空房子.我们编写开发 APP 组件,就相当于在这个空房子,砸出了一个厨房.但是仅仅有一个厨房还不行,我们做饭需要煤气灶和吸油烟机,所以我们开发出插件,来增强 APP 的功能和效果.这样,如果我想配置一下吸油烟机的功能,我需要走到厨房的吸油烟机那里,进行修改配置.

1,系统管理

在系统管理界面,可以配置我们网站的基础信息,以及缓存处理和数据库优化等.

2,APP 管理

在 APP 管理界面,是我们系统中已经内置的一些必须的 APP 组件

正如我前面说的那样,如果我想配置管理网站中发布的文章,那么我就需要点击文章 APP 后面的管理按钮进行配置. 取消导航的意思就是取消在首页显示的链接.

3,插件管理

插件是对 APP 组件的功能扩展,系统已经内置了部分插件,但是有部分非必须的插件没有启用.你可以根据你网站的需求,开启相应的插件.

启用插件之后,部分插件还需要你去配置一下才能使用,例如:QQ 登陆.

4,安全中心

安全中心里面,你可以设置屏蔽的敏感词或者是屏蔽的 IP 以防止攻击.同时还提供了一个创意性的功能,你可以提交你遇到的垃圾关键词,也可以下载云端的垃圾关键词,实现垃圾的共享屏蔽.

5,获取更多组件和插件

你会需要更多的组件和插件,来扩展你网站的功能,适应你的用户需求.你可以在官方网站搜索找到这些组件和插件,但是有些插件是需要你去购买.你也可以联系官方网站有开发经验的朋友,为你的网站定制插件.

解决iconv和mb_convert_encoding函数的汉字乱码问题

近期在做一个小应用,就是填上信息,然后输出wordpress模板标准的style.css文件,当然,这个文件包含了CSSreset 和本人常用的原子类,这样可以大大缩小制作的难度和时间。

于是就遇到了一个编码问题,因为wordpress的编码是UTF-8,所以我们模板的css文件编码最好也是UTF-8。因为在早期的浏览器中,如果编码和文档中声明的不同,会读取不出来。IE6就是这样,在其他浏览器中没有出现类似的情况,不过还是建议使用UTF-8编码,如果你的模板要面向全世界的用户,你必须用这个编码,因为国外的电脑上没有装GBK、GB2312这类中文编码,就会出现乱码,或者出现一些其他的意外情况。

那么,我使用php接受字符串,并且输出的时候,需要使用编码相关的函数。经过搜索,找到了标题上面的两款函数。iconv和mb_convert_encoding,这两个函数,可以把字符串进行编码,然后配合file_put_contents这个函数,可以输出你指定的编码。我这个工具的原理很简单,就是获取表单内容,读取已经保存的写好的文件,然后混合编码,输出。

$add_string = $add_string.$fpr; //$fpr变量是读取之前写好的UTF-8编码的style.css文件模板
$add_string = iconv(“utf-8”,”utf-8”,$add_string); //由于读取的style.css文件是utf-8编码,所以这里用了utf-8编码转换utf-8编码
file_put_contents($new_filename,$add_string);

但是问题就出现了,出现在中文上了。由于iconv是php默认安装的模块,所以先使用的iconv函数。编写完成之后,输入中文信息,输出中断,查看输出文件,在中文的地方,输出了一个DZ,之后就断掉了。经过搜索,说这是iconv的一个bug,遇到“-”这样的符号,就出问题,可以使用“GBK”编码或者是加上“//IGNORE”参数解决。实验了一下,还是没有效果,加上了//IGNORE参数,中文全被过滤,只输出英文。

疯狂的在网上查找相关资料,没有找到,我找了一段网上编写的,有这个函数的应用,把代码运行了一下,结果发现,还是没有。蛋碎,别人写的可以用的代码,在自己电脑上还是不能支持中文。我phpinfo了一下,这个模块正常啊,我还把代码上传到远程服务器上,执行还是不行。

没办法,我考虑使用同样的功能的mb_convert_encoding函数,来试一下。结果还是不行,仍然出现乱码。这个时候,我突然想,不要把utf-8转换成utf-8 了,把GBK转换成utf-8试试怎么样啊。试了一下,表单部分在utf-8文件中,显示正常,但是模板(style.css模板用的utf-8编码)中的中文,全都变乱码了。研究一晚上这个问题了,已经到了0点了,果断关机睡觉。

在床上,翻来覆去的思考这个问题。最后的这个尝试,给了我一个思路。然后我就想明白了,我们用浏览器输入内容,我们也没有规定编码是什么,那系统得到我们输入的内容,它的编码是什么呢?那就只有GB2312 了,因为我中文系统默认的编码就是这样。所以,我对字符串的处理,应该是由GBK、GB2312来转换成UTF-8编码才对。这就是为什么最后,表单内容正常,而源css模板不正常了。我用utf-8保存的css模板,却用GBK的方式去读,然后转换成utf-8编码,读出来的时候,已经是乱码了,再把乱码转换成utf-8,那不更乱了。

不仅感叹一句,有多少问题,是在床上解决的,别想歪了哦 ^-^

今天早上起来,立刻按照昨晚想的思路写了一下,果然可以成功输出汉字。最终代码:

    $add_string = iconv(“GBK”,”utf-8”,$add_string);//先把表单内容转成utf-8
$add_string = $add_string.$fpr; //再与utf-8编码的css模板文件结合
file_put_contents($new_filename,$add_string); //输出

就这样,变化一下顺序,这个问题就完美解决了。今天写这篇文章时,发现这是一个多么简单的逻辑问题,却研究尝试了一个晚上,自己也真够笨的。不过最终解决了就好。我们平时都看书,太重于理论,到实践的时候,却发现,出现好多书上没有的错误。但是有了这个经历,以后遇到编码问题,就再也不用怕了。

另附这两个函数的用法:

iconv(“UTF-8”,”GB2312//IGNORE”,$data); //意思是把$data字符串由utf-8编码转成gb2312编码,刚开始就被这个误导了

mb_convert_encoding($data, “UTF-8”, “GBK”); //这个意思是把$data字符串,由gbk转成utf-8编码,注意顺序与iconv相反

至于gbk和gb2312,都是中文编码,区别在于,你想多打字,就打gb232,想少打字就打gbk.

此外,上面这两个函数,需要配合file_put_contents这个函数输入才有效,这个函数的用法和其他输出函数都一样.不再赘述.

ThinkSAAS 数据库结构 -> 数据表结构

注:这段时间,要用来研究一套系统ThinkSAAS,一个目前还不是很成熟的轻量化论坛系统.

看到很多app都需要数据库的操作,再看了一下,好像没有关于数据库结构的文章,然后我就整理了一下.

这是第一篇文章,关于数据表的结构,之后会陆续把一些app开发常用的数据表的结构整理出来.

完全是音译,有部分还是不理解功能是什么,还望邱君和高手把这部分用处说一下,不确定的后面有”???”

+——————————————————————-+

| ts_anti_email => 阻止邮件名单

| ts_anti_ip => 禁止IP

| ts_anti_word =>禁止关键词

| ts_area =>用户区域

| ts_area_city =>用户居住城市

| ts_area_province =>用户居住省

| ts_article =>文章列表

| ts_article_cate =>文章目录

| ts_article_comment =>文章评论

| ts_attach =>附件列表

| ts_feed =>订阅列表

| ts_group =>小组列表

| ts_group_cates =>小组分类

| ts_group_options =>小组配置

| ts_group_topics =>小组帖子

| ts_group_topics_add =>添加小组主题???

| ts_group_topics_collects =>收藏主题?

| ts_group_topics_comments =>小组主题评论

| ts_group_topics_type =>小组主题类别

| ts_group_users =>小组成员

| ts_home_info =>首页信息

| ts_mail_options =>邮件配置就是系统发邮件的配置

| ts_message =>消息

| ts_photo =>照片列表

| ts_photo_album =>相册列表

| ts_photo_comment =>照片评论

| ts_photo_options =>照片选项

| ts_session =>session 你懂得

| ts_system_options =>系统配置

| ts_tag =>标签列表

| ts_tag_article_index =>文章标签指数???

| ts_tag_group_index =>小组标签指数???

| ts_tag_photo_index =>图片标签指数???

| ts_tag_topic_index =>主题标签指数???

| ts_tag_user_index =>用户标签指数???

| ts_user =>用户列表

| ts_user_follow =>用户关注跟随

| ts_user_gb =>用户留言

| ts_user_info =>用户信息

| ts_user_invites =>邀请用户

| ts_user_open =>第三方登录

| ts_user_options =>用户选项

| ts_user_role =>用户参与任务

| ts_user_scores =>用户积分

+———————————————————————-+

在搬家的时候随时注意好你的robots

首先先来说一下robots这个文件.

简单的说,这个文件是控制搜索引擎收录网站的.搜索引擎会派出蜘蛛在网络中爬行,但是有的时候,我们的网站或者网站的某个目录并不想被搜索引擎爬行到并且收录。例如一些后台文件,配置文件等等。搜索引擎也思考到了这一点,就弄出了一条规则,爬行一个网站的时候,先读取网站的robots文件,查看哪些被允许爬行,哪些不允许。之后再进行爬行收录。

在seo中,这是一个很重要的东西,它告诉搜索引擎哪些可以收录等,同时弄的不好,也会对网站收录造成致命伤害。这次就是一次血的教训。

在上次网站搬家之后,新主机还没有开启rewrite模块,所以博客链接无法伪静态写成以前的样子。之后又发生了一些事情,没有上网管理网站。以前的朋友都知道,我有三个月没有更新博客,也当然没有管理,就把这个事情忘了。

后来,听了很多站长朋友,在骂百度更新算法,把他的网站K掉了。我也没在意,检测一下我网站的收录,突然发现,以前很多的收录,现在只剩一个6月份的首页快照。坏了,我被百度K了。然后就在百度那里进行投诉。因为潜行者m的博客,文章都是精心构思原创手写的,SEO等方面也稍微做了一些,怎么会直接全K呢?查看了一下网站权重,跟以前没变,怎么收录没了?

前天,在后台清理的时候,发现服务器的rewrite开启了,然后就填上了以前的伪静态规则。这时,我猛的想起来了一件事,我曾经写的robots规则。

打开robots文件一看,果然,里面有条规则,把wordpress默认的链接形式屏蔽。此举是为了修改了伪静态规则之后,防止被检测成重复内容。结果那段时间,网站的链接全部都是wordpress的默认链接。我查询了一下谷歌的收录,结果也为0。原来,我的网站并不是被K了,而是被自己编写的robots规则,清掉了搜索引擎的索引。

修改了之后,搜索引擎又开始重新收录了,可以之前一年的积累,全化为了乌有。以后真的多注意一下。

 

阮一峰博客与zac博客的区别

阮一峰和zac的博客,都是业界公认的名博,两个博客开博的时间都比较早,阮一峰要更早一些。本文就对比一下这两个独立博客的区别,并且总结从中能够学到什么东西。

我个人感觉,他们俩的区别非常明显,阮一峰是实力派,而zac则是偶像派。怎么说呢?

阮一峰的博文,写得都非常有深度,总结的都很全面。这应当归结于他的职业和性格,他阅读非常多的各类的书籍,并且读过之后,就会写一些读书的总结或者自己的感悟,这本身就是博文很好的素材,所以他写的每一篇文章都值得收藏,都像一个完整的参考文档一样。在加上开博时间之久,以及翻译过多本书籍,所以博客积累了很多的人气,有固定的阅读用户。

而zac的博文,现在更新的速度已经大不如从前了,一般每个月更新3,4篇文章,而且这些文章都比较短,更偏向于个人或者抒发一些感慨。当然也会涉及到一些seo最新的动态等。出于seo这个职业,本身就不太好写文章,所以写出的文章,大部分都在于猜测或者做得实验以及国外的研究成果翻译。再加上大部分的seo相关内容,是变化不大的,把以前写过的内容重新拿出来,老调重谈并不是一件好事。但是由于他在seo界的知名度,博客仍然具有极高的人气,有很多的评论,虽然这些评论有很大一部分是来借光宣传的。所以,相对的来说,我更推荐阮一峰的博客,因为在他的博客上,你能够真真正正的学到东西,而在zac博客中,虽然可以学到点,把握seo的最新动态,但是学到的东西,实在是比较少。

这对我们开博有什么启示呢?你更愿意作哪一种博主?这个留给你思考吧。

博客运营:文章质量重于文章数量

写了这个题目之后,我真想扇自己两巴掌,这不是明摆的废话吗?!但是就是这样人人都知道的明摆的废话,还有无数的博主在贯彻低质量高数量的方针,所以写下此文,为各位博主认真的分析一下。

从博客的功能讲起。一个博客,它的作用就是写文章,并且显示文章给浏览者看。浏览者之所以要看你的文章,是因为他们需要你的文章,通过你的文章获取一些知识或者解决一些问题。那么,你写的文章,就必须要有一定的价值,狭义的讲,就是要有一定的技术含量,可以帮助别人解决一些他们遇到的问题。只有这样,别人才有来你博客的理由和冲动,也只有提供了大量优质的信息内容,浏览者才会收藏你的网站,并且经常回来看一下。例如,人们想要看最新的科技新闻,肯定会想到月光博客;站长想了解网站建设运营相关,就会去潜行者m博客看看。

所以,网站的内容质量,决定了网站的生存与发展,而这一点尤其体现在博客上。

一个博客的生命力不在于更新频率

看一个博客是否有活力,是否有生命力,并不应该看文章的数量和更新频率。在建博初期,我也曾有过那么一段时间,每天为了更新博客文章而奋斗,曾经定下规定,每天更新三篇文章。而且我的确坚持下来了,但是每天的这三篇文章,很少有技术性很强的文章。我个人是偏重于技术的,但是当时的技术水平不是特别强,所以很难写出大量的技术性文章,但是每天都要去写文章,所以就把每天做的事情和一切乱七八糟的内容组织起来,写成文章发布在博客上。就这样,每天都比较累,但是看着自己博客的文章,很欣慰。

友情链接是博客发展的一个要素,当我觉得文章数量以及够了,就去一个小有名气的博客申请友链,他很正常的拒绝了。之后我就松懈了,感觉开博没有什么意义了,于是博客就荒废了半年左右。之后,又重新整理规划了一下博客,把过去写的大部分的文章都删掉了,因为它们本来就没有什么用。像是日记、心情之类的,除了你的老妈和要好的朋友,估计没有别人想去看。与其写些乱七八糟的文章,还不如把精力集中,写一篇好的文章。

一个博客的内容要有范围和深度

人的精力是有限的,要想写出高质量的文章,是要时间酝酿和编写的,所以博客的内容一定要有一些范围。选择自己最感兴趣和最擅长的领域,专门写此类的文章,这样可以保证文章有一定的深度,也有一个固定的需求人群来关注。即使是很大的博客,也有一定的范围,例如月光博客,就是关注互联网和科技的,它上面你找不到健康养生的文章。很多博客的分类和目录都比较混乱,有wordpress、SEO、黑客技术、软件推荐、健康养生等等文章分类。一个人肯定有很多感兴趣的领域,但不见得每个领域都很精通。

目录杂乱的博客,会找不到博客的方向,找不到写作的重点,乱成一锅粥,每个分类都想照顾到,但是每个分类的更新频率也低。访客也乱,看不到自己想看的文章,最终会慢慢衰竭。如果你说,我精力异常充沛,写文章很多,每个分类都会写很多文章,我还邀请很多人来一块写各个领域的文章。那么我会说,你去建门户网站吧,博客已经不适合你了。

以上两点,就是潜行者m所给出的建议,总结起来,很简单的两条:

1,写出对浏览者有用的文章。

2,求质量不求数量,在质量的基础上,增加数量。