月度归档:2014年05月

2014年25个最好免费的WordPress插件

WordPressordPress是最有名的和领先的内容管理系统。拥有非常多的插件,下面列举2014年25个最好免费的WordPress插件。

1. Cookieless Comments

2014年25个最好免费的WordPress插件
Cookieless lets users disables WordPress comment cookies. A tiny but useful plugin for people looking to simplify EU cookie law compliance requirements.

2. FTP Sync

2014年25个最好免费的WordPress插件
This plugin allows you to sync local and remote media uploads, theme files, and plugins folders with one click via FTP. Do all your development on your localhost, initiate a sync whenever you need to from the FTP Sync options page.

3. Simple Exclude Categories

2014年25个最好免费的WordPress插件
Simple Exclude Categories provides additional settings for the Reading section in your settings menu. it allows you to exclude entire categories of posts from your home page.

4. GUI Form

2014年25个最好免费的WordPress插件
This plugin has a simple drag and drop function and user-friendly customization commands that would let anyone create forms in a flash. No need to code anything – the plugin will do it for you.

5. Pinned URL

2014年25个最好免费的WordPress插件
Shorten long blog post URLs into PinnedURLs via pinnedurl.com that will be unobtrusively tagged on the bottom of each post. Use the shortened url to easily share your posts on websites or social networking sites like Facebook, Twitter and Pinterest.

6. Zurb Foundation 5 Clearing Gallery

2014年25个最好免费的WordPress插件
This plugin lets you enhance WordPress gallery shortcode content with the Zurb Foundation Clearing lightbox. Just enable and all gallery shortcodes will use Clearing.

7. WP Report Post

2014年25个最好免费的WordPress插件
Report Post is a highly customizable plugin that lets your visitors to report posts or pages with inappropriate content. All these reports are displayed as a table in your Administrator section so you can decide what to do next: edit contents, unpublish posts/pages, or just delete these reports. The plugin was designed to work in both automatic and manual modes. In automatic mode, the link to report will be added to post’s meta box.

8. Responsive Cookie Banner

2014年25个最好免费的WordPress插件
A simple, stylish responsive EU cookie banner plugin that will display a message asking if the viewer would like to accept cookies. The message and ‘more info’ link destination can be changed in the settings menu. Compatible with all devices and browsers.

9. WP Guards

2014年25个最好免费的WordPress插件
WPGuards plugin is the complete solution for everyone who have a WordPress blog. Automated Security and Support plugin to keep your website fully protected. Backups, malware scans and diagnostics included.

10. WP Report Post

2014年25个最好免费的WordPress插件
Report Post is a highly customizable plugin that lets your visitors to report posts or pages with inappropriate content. All these reports are displayed as a table in your Administrator section so you can decide what to do next: edit contents, unpublish posts/pages, or just delete these reports.

11. Google Publisher

2014年25个最好免费的WordPress插件
The Google Publisher Plugin enables you to easily use Google’s products – including AdSense and Webmaster Tools – with your WordPress site. Adding AdSense ads usually requires you to generate snippets in AdSense and paste these into your site, or to manually edit PHP files. This plugin lets you place AdSense ads using a simple point-and-click UI.

12. WP Drafts for Friends

2014年25个最好免费的WordPress插件
This plugin will generate a unique link that you can send to your friends to allow them to preview your draft before they are published. You are able to set the expiry for the link as well.

13. DIYCWare Image Editor

2014年25个最好免费的WordPress插件
If you are a printing business or photography business, you can add this plugin to your store so that customers can upload and edit images. The customer uploads the image, makes adjustments, selects the type of media and adds it to the cart. The tool uses the Woocommerce plugin for the store management.

14. Featured Image Zoom

2014年25个最好免费的WordPress插件
Add the [zoom] shortcode to a page, post or custom post-type entry. The featured image at the ‘large’ size will then be displayed on the page. When you move the cursor over the image, the image zooms to show the ‘full’ size featured image masked within the boundary of the image.

15. WP Product Review

2014年25个最好免费的WordPress插件
It lets you turn your basic posts into in-depth reviews with ratings, pros and cons and affiliate links.

16. JSJ Code Highlight

2014年25个最好免费的WordPress插件
JSJ Code Highlight is a simple syntax highlighter for all your WordPress code snippets. The plugin includes four visual themes to enhance the look and feel of your code. These themes (taken form Highlight.js) have been enhanced for a more contemporary feel.

17. WP Post Series

2014年25个最好免费的WordPress插件
WP Post Series is a lightweight plugin for making a series of posts and showing information about the series on the post page. The information box is prepended to the post content, and it can work with any theme (given a bit of CSS styling) – no setup required.

18. Sender

2014年25个最好免费的WordPress插件
This plugin sends mail to registered users. You can send mails to all users or to certain categories of users. To send letters, you can use the php functions such as sending emails, wordpress functions, or send an email through the SMTP server.

19. Inline Comments

2014年25个最好免费的WordPress插件
Inline Comments adds the great Disqus Comment System to the side of paragraphs and other specific sections (like headlines and images) of your post.

20. Launch Check

2014年25个最好免费的WordPress插件
Launch Check is a WordPress plugin that ensures you have made your site visible to search engines, changed the default description and added Google Analytics before launch.

21. Contact Form 7 WYSIWYG Field

2014年25个最好免费的WordPress插件
Add wysiwyg fields to the popular Contact Form 7 plugin. This field use the default WYSIWYG editor set in WordPress parameters. You just have to install this plugin to add a new field type in Contact form 7 fields.

22. WP Backup Lite

2014年25个最好免费的WordPress插件
WP Backup Lite allows you to backup, clone, and restore your wordpress website at any time for either download or to your server for safe storage. Its one of the fastest backup utilities to move your wordpress website and a quick way to better secure your websites, best of all, its completely free.

23. WP Pipes

2014年25个最好免费的WordPress插件
Yahoo Pipes & Zapier are powerful online services for making pipeline of data, WP Pipes comes available to the WordPress community to bring such of powerful abilities to WordPress site, works right inside your WordPress site. You can create many Pipes, give your Pipes input and get output as your needs.

24. Custom Resources

2014年25个最好免费的WordPress插件
Custom Resources enables site administrators to supply additional styles or/and scripts to be loaded alongside the theme’s resources. It will work regardless which theme the site is running, which makes it brilliant for adding custom programming and content blocks.

25. Eventissimo

2014年25个最好免费的WordPress插件
Eventissimo lets you create and organize events into your site. Your events also automatically created on Facebook. Import your Facebook Events.

 

来源:http://www.open-open.com/news/view/10b1950

linux下screen命令的使用

系统管理员经常需要远程登录服务器然后在服务器上跑一些程序有个时候得跑很长时间(超过12小时)这是如果程序没结束就退出远程管理终端远程跑的程序很有可能就此当掉以前常用的解决方式是用命令nohup但是nohup也有很多的问题

当有了screen这一切便都迎刃而解了敲入命令screen会创建一个跑着shell的单一窗口在这里面你可以跑你所需要的程序然后Ctrl+a d退出刚创建的窗口(回到进入screen前的环境)然后再敲入命令screen创建新的终端窗口就这样你可以建立多个有shell的窗口(这些窗口里都可以跑你自己的应用)这样就是你退出远程管理窗口(进入screen的环境)你的screen窗间的窗口都不会关闭里面跑得应用自然也不会当掉

用screen -ls可以看所有的screen sessions

用screen -r sessionid可以进sessionid指定的特定的screen session

最后screen session不再使用的时候screen -r sessionid进去exit退出即可

一.Screen安装

. screen 命令简介

实例

1. 执行screen , 按任意键进入子界面

子界面和父界面没有任何不同,注意识别

我用ping命令开始执行

如果想下班了,关机了,但是想关闭ssh以后ping继续运行,那么按ctrl+a 再按d 这样暂停了子界面

会显示[detached]的字样

这时候 我回到了父界面

2. screen -ls查看目前子界面的状态

[root@free /]# screen -ls

There is a screen on:

22292.pts-3.free (Detached)

1 Socket in /tmp/screens/S-root.

这里的22292其实是子界面的pid号

3. 如果回到子界面 用screen -r 22292

一下子弹到了ping 的子界面

4. 如何关闭子界面

3种办法

1 ctrl+c终止ping ,输入exit退出 出现[screen is terminating]的字样

2 使用ctrl+a k退出当前子界面 会问你y还是n 选择y 即可

3 父界面用kill -9 子界面进程号

这是进程变为死亡状态

8462.pts-0.tivf18 (Dead ???)

然后用screen -wipe清理一下子界面

注意的问题:

1 分清楚父界面和子界面,因为子界面也是可以执行screen -ls的在子界面执行

screen -r 22292肯定是不行的

2 如果这边子界面在运行,那么新开一个ssh窗口想要执行screen -r 22292也是不行的

三. 更多Screen 功能

Screen 提供了丰富强大的定制功能。你可以在Screen的默认两级配置文件/etc/screenrc 和$HOME/.screenrc中指定更多,例如设定screen选项,定制绑定键,设定screen会话自启动窗口,启用多用户模式,定制用户访问权 限控制等等。如果你愿意的话,也可以自己指定screen配置文件。

因此关键在于修改 ~/.screenrc这个文件吧

因为我使用的是xshell所以需要更改的是下面的状态栏 显示是哪个screen

打开~/.screenrc 写入

caption always "%{= kw}%-w%{= kG}%{+b}[%n %t]%{-b}%{= kw}%+w %=%d %M %0c %{g}%H%{-}"

那么子界面变为了下面样子,至少和父界面可以区分开了

四.screen 快捷键和常用选项

可以通过C-a ?来查看所有的键绑定,常用的键绑定有:

C-a ?

显示所有键绑定信息

C-a w

显示所有窗口列表

C-a C-a

切换到之前显示的窗口

C-a c

创建一个新的运行shell的窗口并切换到该窗口

C-a n

切换到下一个窗口

C-a p

切换到前一个窗口(与C-a n相对)

C-a 0..9

切换到窗口0..9

C-a a

发送 C-a到当前窗口

C-a d

暂时断开screen会话

C-a k

杀掉当前窗口

C-a [

进入拷贝/回滚模式

其他常用选项:

-c file

使用配置文件file,而不使用默认的$HOME/.screenrc

-d|-D [pid.tty.host]

不开启新的screen会话,而是断开其他正在运行的screen会话

-h num

指定历史回滚缓冲区大小为num行

-list|-ls

列出现有screen会话,格式为pid.tty.host

-d -m

启动一个开始就处于断开模式的会话

-r sessionowner/ [pid.tty.host]

重新连接一个断开的会话。多用户模式下连接到其他用户screen会话需要指定sessionowner,需要setuid-root权限

-S sessionname

创建screen会话时为会话指定一个名字

-v

显示screen版本信息

-wipe [match]

同-list,但删掉那些无法连接的会话

参考文章

linux下screen命令的使用

linux screen—-让您处理终端游刃有余

ActiveMQ入门

摘要:本文主要讲述ActiveMQ的基本知识和使用方法,并简单结合spring使用ActiveMQ

一、ActiveMQ特性和使用总览

企业消息软件从80年代起就存在,它不只是一种应用间消息传递风格,也是一种集成风格。因此,消息传递可以满足应用间的通知和互相操作。但是开源的解决方案是到最近10年才出现的。Apache ActiveMQ就是其中一种。它使应用间能以异步,松耦合方式交流。本章将向您介绍ActiveMQ

ActiveMQApache软件基金下的一个开源软件,它遵循JMS1.1规范(Java Message Service),是消息驱动中间件软件(MOM)。它为企业消息传递提供高可用,出色性能,可扩展,稳定和安全保障。ActiveMQ使用Apache许可协议。因此,任何人都可以使用和修改它而不必反馈任何改变。这对于商业上将ActiveMQ用在重要用途的人尤为关键。MOM的工作是在分布式的各应用之间调度事件和消息,使之到达指定的接收者。所以高可用,高性能,高可扩展性尤为关键。

ActiveMQ的目标是在尽可能多的平台和语言上提供一个标准的,消息驱动的应用集成。ActiveMQ实现JMS规范并在此之上提供大量额外的特性。

下面是一个高层次的特性列表。

·遵循JMS规范 ----理解ActiveMQ的起始点是明白ActiveMQ的各种特性是JMS1.1规范的实现。本章后面将讨论JMS规范提供的好处和保证。它们包括同步和异步消息传递,一次和只有一次的消息传递,对于预订者的持久消息等等。依附于JMS规范意味着,不论JMS消息提供者是谁,同样的基本特性都是有效的。

·连接----ActiveMQ提供各种连接选择,包括HTTPHTTPSIP多点传送,SSLSTOMPTCPUDPXMPP等。大量的连接协议支持使之具有更好的灵活性。很多现有的系统使用一种特定协议并且不能改变,所以一个支持多种协议的消息平台降低了使用的门槛。虽然连接很重要,但是和其他容器集成也同样重要。第四章将讲解 ActiveMQ的传输连接器(transport connectors)和网络连接器(network connectors)。

·可插拔的持久性和安全----ActiveMQ提供多种持久性方案可供选择,也可以完全按自己需求定制验证和授权。例如,ActiveMQ通过KahaDB提供自己的超快速消息持久方案(ultra-fast message persistence),但也支持标准的JDBC方案。ActiveMQ可以通过配置文件提供简单的验证和授权,也提供标准的JAAS登陆模块。

·用Java建立消息驱动应用----ActiveMQ最常用在Java应用中,用于发送和接收消息。这部分的内容涉及JMS规范API

·与应用服务器集成----ActiveMQjava应用服务器集成是很常见的。

·客户端APIs----ActiveMQ对多种语言提供客户端API,除了Java之外还有C/C++.NETPerlPHPPythonRuby等。这使得ActiveMQ能用在Java之外的其它语言中。很多其它语言都可以通过ActiveMQ提供的客户端API使用ActiveMQ的全部特性。当然,ActiveMQ代理器(broker)仍然是运行在java虚拟机上,但是客户端能够使用其它的被支持的语言。

·代理器集群(Broker clustering----为了利于扩展,多个ActiveMQ broker能够联合工作。这个方式就是network of brokers并且能支持多种拓扑结构。

·高级代理器特性和客户端选项----ActiveMQ为代理器和客户端连接提供很多高级的特性。ActiveMQ也可以通过代理器的XML配置文件支持Apache Camel

·简单的管理----ActiveMQ是为开发者设计的。它并不需要专门的管理工具,因为它提供各种易用且强大的管理特性。有很多方法去监控ActiveMQ的各个方面,可以通过JMX使用JConsoleActiveMQ web console;可以运行ActiveMQ消息报告;可以用命令行脚本;可以通过日志。

用 ActiveMQ 最好还是了解下 JMS

JMS 公共

点对点域

发布/订阅域

ConnectionFactory

QueueConnectionFactory

TopicConnectionFactory

Connection

QueueConnection

TopicConnection

Destination

Queue

Topic

Session

QueueSession

TopicSession

MessageProducer

QueueSender

TopicPublisher

MessageConsumer

QueueReceiver

TopicSubscriber

JMS 定义了两种方式:Quere(点对点);Topic(发布/订阅)。

·ConnectionFactory 是连接工厂,负责创建Connection。

·Connection 负责创建 Session。

·Session 创建 MessageProducer(用来发消息) 和 MessageConsumer(用来接收消息)。

·Destination 是消息的目的地。

详细的可以网上找些 JMS 规范(有中文版)

二、开始使用ActiveMQ

开始使用ActiveMQ并不难。你只要启动代理器并确保它能接受连接和发送消息。ActiveMQ有一些自带的例子。

在这部分,你将下载和安装Java SE,下载和安装ActiveMQ,检查ActiveMQ目录,然后第一次启动ActiveMQ。所需工具包括JDK1.5+AntActiveMQ

1 JDK下载和安装

ActiveMQ 要求Sun Java SE 1.5或以上。在开始这部分前,必须先安装。JDK的下载和安装就不是本文介绍重点。

2 Ant下载和安装

Ant可以用来构建和运行ActiveMQ自带例子。Ant可以从Apache Ant网址下载。URL: http://ant.apache.org/bindownload.cgi

点击链接地址并选择正确的压缩包。(tar包是LinuxUnixzipWindows)。请按照下列地址安装AntURL: http://ant.apache.org/manual/install.html。确保你设置好$ANT_HOME环境变量,并将$ANT_HOME/bin放到$PATH环境变量里。安装完毕后你可以运行下面的命令查看Ant版本。

你的可能跟我的不太一样,使用Ant的不同版本,不过这没关系。一旦Ant输出如上信息,你就可以确定Ant都安装正确。

3 ActiveMQ下载和安装

ActiveMQ可以从Apache ActiveMQ网站下,URL: http://activemq.apache.org/download.html.

点击地址到5.4.3版本,你可以看到tarzip格式包。(tar包是LinuxUnixzipWindows)。下载完后解压。我的解压到了E:\tools\apache-activemq-5.4.3

从命令行进入apache-activemq-5.4.3 目录,输入如下命令。

· LICENSE----Apache Software Foundation(ASF)要求的一个文件.包含ActiveMQ使用的所有库的许可证.

· NOTICE----ASF要求的另一个文件.包含ActiveMQ使用的所有库的版权信息.

· README.txt 一个包含一些URL的文档,使新手可以使用ActiveMQ.

· WebConsole-README.txt---- 包含使用ActiveMQ web console使用说明.

· activemq-all-5.4. 3.jar---一个jar包包含ActiveMQ所有东西。放在这里是方便你使用它。

· bin----包含二进制或可运行文件。ActiveMQ启动脚本就放在里面。

· conf--ActiveMQ所有的配置信息。

· data--日志和持久化文件存储地方。

· docs--包含一个简单的index.html,该文件指向ActiveMQ网站。

· example----ActiveMQ 例子。我们用这些例子来简单的测试ActiveMQ

· lib----所有ActiveMQ所需库。

· user-guide.html---- 一个简单指引启动ActiveMQ和运行例子。

· webapps----ActiveMQ web console和一些网络演示。

下一部分将启动 ActiveMQ并用这些例子验证它。

启动ActiveMQ

在命令行中输入一下命令,或者直接运行bin目录下的activemq.bat文件

刚才的命令启动了ActiveMQ代理器和一些连接器,使得客户端可以通过一些诸如TCPSSLSTOMPXMPP协议连接进来。请注意现在ActiveMQ已经启动,并且客户端可以通过TCP 61616端口连接进来。最好的方法是使用ActiveMQ自带的例子来发送和接收消息。下面我们来运行第一个例子。

4 、运行ActiveMQ第一个例子

这个例子是模拟生产者消费者的例子,生产者产生2000条信息,然后关闭,消费者消费2000信息,然后关闭。下面我们演示一下。

重新打开一个DOS窗口,切到MQ目录的example目录下,我的是E:\tools\apache-activemq-5.4.3\example

然后输入一下命令

最后一行显示程序在等待2000message。这是一个消费者。再重新打开DOS窗口并且到MQ目录下的example目录,输入一下命令ant producer,这个是生产者。输入命令之后你回看到刚才打开的两个DOS窗口打印出一堆东西

看到BUILD SUCCESSFUL说明程序运行成功。

消费者窗口变成了如下内容:

示例程序演示完毕,观看别人写的看着没啥意思,我们自己写一个程序,测试一下。

三、运行自己编写的第一个例子

我们自己编写一个跟上面类似的例子。

1 、建立web项目

打开myeclipse,新建web项目,内容填下如下:

点击finish。接着在项目根目录下新建一个lib目录,然后将我们上面提及的activemq-all-5.4.3.jar 拷贝至lib目录下,并将其加入项目library中如下图:

点击OK,项目目前的文件夹结构如下:

2 、编写代码

src上右键选择新建class,具体如下:

点击finish。然后输入如下代码

package com.mq;

import java.util.Date;

import javax.jms.Connection;

import javax.jms.ConnectionFactory;

import javax.jms.Destination;

import javax.jms.JMSException;

import javax.jms.MapMessage;

import javax.jms.MessageProducer;

import javax.jms.Session;

import org.apache.activemq.ActiveMQConnection;

import org.apache.activemq.ActiveMQConnectionFactory;

public class Producer {

public static void main(String[] args) {

String user = ActiveMQConnection. DEFAULT_USER;

String password = ActiveMQConnection. DEFAULT_PASSWORD;

String url = ActiveMQConnection. DEFAULT_BROKER_URL;

String subject = "TOOL.DEFAULT" ;

ConnectionFactory contectionFactory = new ActiveMQConnectionFactory(user,password,url);

try {

Connection connection = contectionFactory.createConnection();

connection.start();

Session session = connection.createSession(Boolean. TRUE, Session. AUTO_ACKNOWLEDGE);

Destination destination = session.createQueue(subject);

MessageProducer producer = session.createProducer(destination);

for( int i = 0;i<=20;i++){

MapMessage message = session.createMapMessage();

message.setLong( "count", new Date().getTime());

Thread. sleep(1000);

producer.send(message);

System. out.println( "--发送消息:"+ new Date());

}

session.commit();

session.close();

connection.close();

} catch (JMSException e) {

e.printStackTrace();

} catch (InterruptedException e) {

e.printStackTrace();

}

}

}

然后再新建一个消费者类如下图:

点击finish。然后输入如下代码

package com.mq;

import java.util.Date;

import javax.jms.Connection;

import javax.jms.ConnectionFactory;

import javax.jms.Destination;

import javax.jms.JMSException;

import javax.jms.MapMessage;

import javax.jms.Message;

import javax.jms.MessageConsumer;

import javax.jms.MessageListener;

import javax.jms.Session;

import org.apache.activemq.ActiveMQConnection;

import org.apache.activemq.ActiveMQConnectionFactory;

public class Consumer {

public static void main(String[] args) {

String user = ActiveMQConnection. DEFAULT_USER;

String password = ActiveMQConnection. DEFAULT_PASSWORD;

String url = ActiveMQConnection. DEFAULT_BROKER_URL;

String subject = "TOOL.DEFAULT" ;

ConnectionFactory connectionFactory = new ActiveMQConnectionFactory(user,password,url);

Connection connection;

try {

connection = connectionFactory.createConnection();

connection.start();

final Session session = connection.createSession(Boolean. TRUE, Session. AUTO_ACKNOWLEDGE);

Destination destination = session.createQueue(subject);

MessageConsumer message = session.createConsumer(destination);

message.setMessageListener( new MessageListener(){

public void onMessage(Message msg) {

MapMessage message = (MapMessage)msg;

try {

System. out.println( "--收到消息:"+ new Date(message.getLong("count" )));

session.commit();

} catch (JMSException e) {

e.printStackTrace();

}

}

});

Thread. sleep(30000);

session.close();

connection.close();

} catch (JMSException e) {

e.printStackTrace();

} catch (InterruptedException e) {

e.printStackTrace();

}

}

}

3 、运行程序

右键运行程序Consumer类,控制台打印出如下信息:

再右键运行Producer类,控制台上打印出来的信息同上。稍等一秒,Producer类的运行控制台会打印出来如下信息:

有信息可知,生产者正在生成消息,切到消费者类的控制台方法如下:

选择Cosumer,会看到如下信息:

由信息可以看到,消费者收到了同等数量的信息。

至此我们的第一个程序成功完成。下面将MQspring结合使用。

四、springactiveMQ的简单整合

在做上面的测试例子的时候我们可以看出发送一个简单的消息,要几行代码! 其实我们的目的就是发送和接受消息。幸运的是Spring为我们提供了大量的模板。spring为我们提供了JMSTemplate模板。

1 、引入spring相关文件和配置

我使用的是spring版本是3.1.0.M2,其他版本的也可以,只是配置不同,去spring官网下载zip包,解开后将dist目录下的所有jar包(根据自己选择)拷贝到项目lib目录下并加入项目library中,具体可以参考上面步骤。

src目录下新建applicationContext.xml文件并输入一下内容:

<? xml version ="1.0" encoding ="GBK" ?>

<beans xmlns ="http://www.springframework.org/schema/beans"

xmlns:xsi ="http://www.w3.org/2001/XMLSchema-instance"

xmlns:aop ="http://www.springframework.org/schema/aop"

xmlns:tx ="http://www.springframework.org/schema/tx"

xmlns:context ="http://www.springframework.org/schema/context"

xsi:schemaLocation ="

http://www.springframework.org/schema/beans

http://www.springframework.org/schema/beans/spring-beans-3.0.xsd

http://www.springframework.org/schema/tx

http://www.springframework.org/schema/tx/spring-tx-3.0.xsd

http://www.springframework.org/schema/context

http://www.springframework.org/schema/context/spring-context-3.0.xsd

http://www.springframework.org/schema/aop

http://www.springframework.org/schema/aop/spring-aop-3.0.xsd"

default-autowire ="byName" >

</ beans>

打开web.xml并将其内容修改为以下内容:

<? xml version ="1.0" encoding ="GBK" ?>

<web-app version ="2.5" xmlns ="http://java.sun.com/xml/ns/javaee"

xmlns:xsi ="http://www.w3.org/2001/XMLSchema-instance"

xsi:schemaLocation ="http://java.sun.com/xml/ns/javaee

http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" >

<context-param >

<param-name >contextConfigLocation </param-name >

<param-value >classpath*:applicationContext*.xml </param-value >

</ context-param>

<servlet >

<servlet-name >spring </servlet-name >

<servlet-class >

org.springframework.web.servlet.DispatcherServlet

</ servlet-class>

<load-on-startup >1</ load-on-startup>

</ servlet>

<servlet-mapping >

<servlet-name >spring </servlet-name >

<url-pattern >/</ url-pattern>

</ servlet-mapping>

<welcome-file-list >

<welcome-file >index.jsp </welcome-file >

</ welcome-file-list>

</ web-app>

2 、配置JMSTemplate模板

类似于jdbcTemplate,首先要配置一个ConnectionFactory,之后要开始配置JmsTemplate模板了。最后是配置消息目标了。消息分为队列和主题两大类。在applicationContext.xml中加入如下内容:

<!-- 配置Jms模板 -->

<bean id ="jmsTemplate"

class ="org.springframework.jms.core.JmsTemplate" >

<property name ="connectionFactory" ref ="connectionFactory" />

<property name ="defaultDestination" ref ="destination" />

<property name ="receiveTimeout" value ="10000" />

</ bean>

<!-- 配置JMS连接工厂 -->

<bean id ="connectionFactory"

class ="org.apache.activemq.ActiveMQConnectionFactory" >

<property name ="brokerURL" value ="tcp://localhost:61616" />

</ bean>

<!-- 发送消息的目的地(队列) -->

<bean id ="destination"

class ="org.apache.activemq.command.ActiveMQQueue" >

<!-- 设置消息队列的名字 -->

<constructor-arg index ="0" value ="myQueue" />

</ bean>

配置完成了,那么如何使用JmsTemplate发送消息呢?

springbeanfactory得到一个jmsTemplate的实例和消息目标的实例,发送消息,够简单的吧。下面我们就来编写具体代码。

3 、编写代码

新建类ProducerService.java,界面如下:

代码如下:

package com.mq.service;

public interface ProducerService {

public void send();

}

新建一个生产者实现类ProducerServiceImpl .java,界面略,代码如下:

package com.mq.service;

import java.util.Date;

import javax.jms.Destination;

import javax.jms.JMSException;

import javax.jms.MapMessage;

import javax.jms.Message;

import javax.jms.Session;

import org.springframework.jms.core.JmsTemplate;

import org.springframework.jms.core.MessageCreator;

public class ProducerServiceImpl implements ProducerService {

JmsTemplate jmsTemplate ;

Destination destination ;

public void send() {

MessageCreator messageCreator = new MessageCreator(){

public Message createMessage(Session session) throws JMSException {

MapMessage message = session.createMapMessage();

message.setLong( "count", new Date().getTime());

System. out.println( "--发送消息:"+ new Date());

return message;

}

};

jmsTemplate .send( this.destination ,messageCreator);

}

public void setJmsTemplate(JmsTemplate jmsTemplate) {

this.jmsTemplate = jmsTemplate;

}

public void setDestination(Destination destination) {

this.destination = destination;

}

}

生产者编写完了,下面我们来编写消费者,上面说了,发送消息的时候, springbeanfactory得到一个jmsTemplate的实例和消息目标的实例,然后发送,那么接受的时候肯定也是得到一个jmsTemplate的实例和消息目标的实例,然后接受,下面我们来看具体代码。

新建一个消费者的借口和实现类,具体代码如下:

ConsumerService .java

package com.mq.service;

public interface ConsumerService {

public void receive();

}

ConsumerServiceImpl .java

package com.mq.service;

import java.util.Date;

import javax.jms.Destination;

import javax.jms.JMSException;

import javax.jms.MapMessage;

import org.springframework.jms.core.JmsTemplate;

public class ConsumerServiceImpl implements ConsumerService {

JmsTemplate jmsTemplate ;

Destination destination ;

public void receive() {

MapMessage message = (MapMessage)jmsTemplate .receive();

try {

System. out.println( "--收到消息:"+ new Date(message.getLong("count" )));

} catch (JMSException e) {

e.printStackTrace();

}

}

public void setJmsTemplate(JmsTemplate jmsTemplate) {

this.jmsTemplate = jmsTemplate;

}

public void setDestination(Destination destination) {

this.destination = destination;

}

}

代码编写完毕,下面要进行bean的配置,在applicationContext.xml中加入如下代码:

<bean id ="producerService"

class ="com.mq.service.ProducerServiceImpl" >

<property name ="jmsTemplate" ref ="jmsTemplate" />

<property name ="destination" ref ="destination" />

</ bean>

<bean id ="consumerService"

class ="com.mq.service.ConsumerServiceImpl" >

<property name ="jmsTemplate" ref ="jmsTemplate" />

<property name ="destination" ref ="destination" />

</ bean>

附上完整的applicationContext.xml的内容:

<? xml version ="1.0" encoding ="GBK" ?>

<beans xmlns ="http://www.springframework.org/schema/beans"

xmlns:xsi ="http://www.w3.org/2001/XMLSchema-instance"

xmlns:aop ="http://www.springframework.org/schema/aop"

xmlns:tx ="http://www.springframework.org/schema/tx"

xmlns:context ="http://www.springframework.org/schema/context"

xsi:schemaLocation ="

http://www.springframework.org/schema/beans

http://www.springframework.org/schema/beans/spring-beans-3.0.xsd

http://www.springframework.org/schema/tx

http://www.springframework.org/schema/tx/spring-tx-3.0.xsd

http://www.springframework.org/schema/context

http://www.springframework.org/schema/context/spring-context-3.0.xsd

http://www.springframework.org/schema/aop

http://www.springframework.org/schema/aop/spring-aop-3.0.xsd"

default-autowire ="byName" >

<bean id ="producerService"

class ="com.mq.service.ProducerServiceImpl" >

<property name ="jmsTemplate" ref ="jmsTemplate" />

<property name ="destination" ref ="destination" />

</ bean>

<bean id ="consumerService"

class ="com.mq.service.ConsumerServiceImpl" >

<property name ="jmsTemplate" ref ="jmsTemplate" />

<property name ="destination" ref ="destination" />

</ bean>

<!-- 配置Jms模板 -->

<bean id ="jmsTemplate"

class ="org.springframework.jms.core.JmsTemplate" >

<property name ="connectionFactory" ref ="connectionFactory" />

<property name ="defaultDestination" ref ="destination" />

<property name ="receiveTimeout" value ="10000" />

</ bean>

<!-- 配置JMS连接工厂 -->

<bean id ="connectionFactory"

class ="org.apache.activemq.ActiveMQConnectionFactory" >

<property name ="brokerURL" value ="tcp://localhost:61616" />

</ bean>

<!-- 发送消息的目的地(队列) -->

<bean id ="destination"

class ="org.apache.activemq.command.ActiveMQQueue" >

<!-- 设置消息队列的名字 -->

<constructor-arg index ="0" value ="myQueue" />

</ bean>

</ beans>

4 、编写测试程序

需要的业务代码都已编写完毕,下面编写测试代码。新建一个生产者的测试类 ProducerTest.java。具体代码如下:

package com.mq.service;

import org.springframework.context.ApplicationContext;

import org.springframework.context.support.ClassPathXmlApplicationContext;

public class ProducerTest {

private static ApplicationContext appContext = new ClassPathXmlApplicationContext(

"applicationContext.xml" );

private static void send() {

ProducerService producerService = (ProducerService) appContext

.getBean( "producerService");

producerService.send();

}

/**

* @param args

*/

public static void main(String[] args) {

send();

}

}

再建一个消费者的测试类,ConsumerTest .java,具体代码如下:

package com.mq.service;

import org.springframework.context.ApplicationContext;

import org.springframework.context.support.ClassPathXmlApplicationContext;

public class ConsumerTest {

private static ApplicationContext appContext = new ClassPathXmlApplicationContext(

"applicationContext.xml" );

private static void receive() {

ConsumerService consumerService = (ConsumerService) appContext

.getBean( "consumerService");

consumerService.receive();

}

/**

* @param args

*/

public static void main(String[] args) {

receive();

}

}

5 、运行程序

所有代码都编写完了,我们来看一下我们的劳动成果。运行生产者测试类。控制台打印出如下内容,红线标注的冒号后面就是我们发送的内容:

运行消费者测试类。控制台打印出如下内容,红线标注的冒号后面就是我们接受的内容:

两者是一样的。

看来我们的劳动成果没有白费。以上是一些AciveMQ的基本应用,在接下来的时间,我会写一些高级应方面的文章,敬请关注本人百度空间和新郎微博。也欢迎各位通过一下两种途径和我进行交流,共同进步。推荐一下本人的微博,作为程序员,生活是非常枯燥的(一般都是很枯燥的,哪些以此为乐的不涉及),平时要自己丰富一下自己的业余生活,看些搞笑微博之类的。我每天都会发布一些糗事,欢迎大家关注。另外我在网上看到过有句话--程序员活该你单身身的 ,程序员招谁惹谁了啊,我们就应该单身。不过话又说回来了,程序员的生活确实单调,感情不丰富,不会说话,但是不能怨我们,其实我们也不想这样。推荐关注新浪微博一千零一夜话,微博地址: http://weibo.com/1968007227/,每天发布一条夜话,你懂得,希望各位程序猿每天能给自己的另一位一句温馨的话,不要成为苦逼的娃。

五、参考内容

1http://yunzhongxia.iteye.com/blog/566727

2ActiveMQ in action

3apache官网

一步步教你如何用Bootstrap构建WordPress主题

在前面的文章Bootstrap & Jetstrap-快速构建你的网站中,我们已经介绍了什么是Bootstrap,以及Bootstrap的简单教程及相应的可视化工具,在本教程中,我们将学习如何用Bootstrap制作我们自己的响应式的WordPress主题。Bootstrap是一个响应式的框架,用来创建web网站和应用,用它创建一个响应式的WordPress主题将是一个伟大的起点。

我们将要构建的主题是基于一个基本营销网站的例子,你可以在Bootstrap 示例页面找到。对于本示例,我们将为其页面及功能创建出一系统模板:

· 可定制的首页设计

· 关于我们

· 联系我们

· 带评论的章节

· 一个组件化的侧边栏

开始

在我们开始前还有一点事情需要你去做:

· 安装WordPress

· 下载并解压缩 Bootstrap

· 安装主题测试驱动插件*

* 如果你想在一个线上的网站上创建一个主题并且不想在你开发的过程中让人们看到新主题,你正好需这个插件。

一旦你准备好这些事情,打开你带有WordPress所有文件的目录并导航至wp-content > themes。

在你导航至那个文件夹后,创建一个叫"wpbootstrap"的新文件夹,在文件夹里面粘贴bootstrap文件夹。

在那个文件夹里面创建一个新文件叫index.php。

现在我们将要把基本营销网站的源码拷贝并粘贴到index.php里面。下面是你所要用到的源码。我们仅链接了代码的一个文本版本,因为它太长了不能嵌入在这里。

bootstrap-demo-source-code

现在我们有了一个静态的HTML页面,我们将要继续去创建一个主CSS页面。WordPress需要一个显示在style.css页面顶部的特殊格式的注释,它使用这个注释来获得关于你这个主题的所有信息。

在你的index.php页面所在文件夹中创建一个新文件并命名为style.css,WordPress需要一个带有特定名称的CSS文件style.css,所以我们不将其命名为其它任何名称否则我们的主题将不能工作。

创建完了style.css文件,在文件头部添加注释:

/*

Theme Name: WP Bootstrap

Theme URI: http://teamtreehouse.com/wordpress-bootstrap-theme-tutorial

Description: A demo theme built to accompany the Treehouse blog post <a href="http://teamtreehouse.com/wordpress-bootstrap-theme-tutorial">How to Build a WordPress Theme with Bootstrap</a>.

Author: Zac Gordon

Author URI: http://teamtreehouse.com/

Version: 1.0

Tags: responsive, white, bootstrap

License: Attribution-ShareAlike 3.0 Unported (CC BY-SA 3.0)

License URI: http://creativecommons.org/licenses/by-sa/3.0/

This simple theme was built using the example Bootstrap theme "Basic marketing site" found on the Bootstrap web site http://twitter.github.com/bootstrap/examples/hero.html

*/

在我们安装和开始构建我们新主题前,我们最后需要做的是上传一张将会在WordPress管理区显示我们主题的图片。这张图片需要为300*225像素并且要命名为"screenshot.png",你可以用下面这张图片或做张你自己的。

你的文件夹结构现在看起来和下面的一样:

我们现在准备进入到控制面板安装我们的新主题。登录到控制面板并且到外观>主题。可应该可以看到"WP Bootstrap"做为主题中的一个被列出来。

点击WP Bootstrap主题下面的激活设置它为网站的当前主题。

注意: 如果你正在使用一个线上的网站并且不想让人们看到这个主题正在开发中,确保安装并激活 Theme Test Drive plugin

当它被激活后,访问你的网站你可以看到像下面一样的东西。

它很干净,因为在当前站点没有一个CSS工作,所以下一步我们开始将静态文件转换到正在工作的WordPress主题中。

将Bootstrap文件转换到WordPress模板

多数WordPress主题包含以下文件:

· index.php

· style.css

· header.php

· footer.php

· sidebar.php

你通常看到的要比这些文件多,但我们将要用到这些文件,从这开始并且构建,直接为header.php,footer.php,和sidebar.php创建一个空文件。

我们即将要做的是把通常要在每个页面顶部被包含的所有HTML剪切并且粘贴到header.php文件中。同时我们同样把通常显示在每个页面底部的所有HTML剪切并且粘贴到footer.php文件中。

现在让我们看下这些文件中的每一个是什么样子。这些文件再次链接到文本文件,因为所有的源代码太多了而不能在这列出。你可以从这些文件中拷贝代码并且粘贴到你自己的.php文件中。

· header.php

· index.php

· footer.php

sidebar.php文件仍然是空的。

现在我们将使用我们第一个WordPress标签来引入header和footer到index.php页面。

我们要使用的这两个标签是get_header()和get_footer()。它们定义在WordPress函数中,功能是为了找到 header.php和footer.php文件并且在页面的头部和尾部包含它们。WordPress可以这样做是因为我们命名我们的文件为 header.php和footer.php。如果我们命名这些文件为my-header.php和my-footer.php将不能工作。

现在我们的index.php文件变为:

<?phpget_header(); ?>

<!-- Main hero unit for a primary marketing message or call to action -->

<div>

<h1>Hello, world!</h1>

<p>This is a template for a simple marketing or informational website. It includes a large callout called the hero unit and three supporting pieces of content. Use it as a starting point to create something more unique.</p>

<p><a>Learn more »</a></p>

</div>

<!-- Example row of columns -->

<div>

<div>

<h2>Heading</h2>

<p>Donec id elit non mi porta gravida at eget metus. Fusce dapibus, tellus ac cursus commodo, tortor mauris condimentum nibh, ut fermentum massa justo sit amet risus. Etiam porta sem malesuada magna mollis euismod. Donec sed odio dui. </p>

<p><ahref="#">View details »</a></p>

</div>

<div>

<h2>Heading</h2>

<p>Donec id elit non mi porta gravida at eget metus. Fusce dapibus, tellus ac cursus commodo, tortor mauris condimentum nibh, ut fermentum massa justo sit amet risus. Etiam porta sem malesuada magna mollis euismod. Donec sed odio dui. </p>

<p><ahref="#">View details »</a></p>

</div>

<div>

<h2>Heading</h2>

<p>Donec sed odio dui. Cras justo odio, dapibus ac facilisis in, egestas eget quam. Vestibulum id ligula porta felis euismod semper. Fusce dapibus, tellus ac cursus commodo, tortor mauris condimentum nibh, ut fermentum massa justo sit amet risus.</p>

<p><ahref="#">View details »</a></p>

</div>

</div>

<?phpget_footer(); ?>

你可能会想知道我们为什么那样做?原因是后续我们将要创建多个要引入我们header和footer代码的页面,如果我们只让所有的这些页面保留 header和footer的HTML并且想要在header 或 footer中改变些东西, 我们将不得不更新所有页面的HTML内容。使用"嵌入" 或 "包含" 方法允许我们在一个地方就可修改header和footer代码并且自动会在所有页面生效,这和外链CSS文件而不是在每个页面的顶部包含CSS有点类 似。

现在我们这些已经做完,我们将去修复所有CSS和JavaScript文件的坏链接。

让我们从头部开始。

在头文件中找到CSS文件的链接并修改它们

<!-- Le styles -->

<link href="../assets/css/bootstrap.css"rel="stylesheet">

<style type="text/css">

body {

padding-top:60px;

padding-bottom:40px;

}

</style>

<link href="../assets/css/bootstrap-responsive.css"rel="stylesheet">

变成

<!-- Le styles -->

<link href="<?php bloginfo('stylesheet_url');?>"rel="stylesheet">

然后在你的style.css文件中,添加如下代码:

@importurl('bootstrap/css/bootstrap.css');

@importurl('bootstrap/css/bootstrap-responsive.css');

body {

padding-top:60px;

padding-bottom:40px;

}

我们在此完成的部分中使用了一个特殊的WordPress标签,不管在我们网站的哪个页面它都能自动把bootstrap的CSS链到我们的主题,你会看到这个代码bloginfo()函数将以不同的方式在本教程中使用。然后我们使用@import标签从我们的主style.css文件中引入Bootstrap的CSS文件。现在你的网站变成这样:

好看点了!在我们转移到制作footer之前,我们还有不只一个标签要添加到header中。wp_head()是一个重要的函数,它允许插件开发者向你的站点动态地添加CSS和JavaScript,如果我们不在模板中引入这个,一个插件将不能工作。同时我们也将要在header中去掉一些无关紧要标签。你的header.php变成了这样。

<head>

<metacharset="utf-8">

<title>Bootstrap, from Twitter</title>

<metaname="viewport"content="width=device-width, initial-scale=1.0">

<!-- Le styles -->

<linkhref="<?php bloginfo('stylesheet_url');?>" rel="stylesheet">

<!-- Le HTML5 shim, for IE6-8 support of HTML5 elements -->

<!--[if lt IE 9]>

<script src="http://html5shim.googlecode.com/svn/trunk/html5.js"></script>

<![endif]-->

<?phpwp_enqueue_script("jquery"); ?>

<?phpwp_head(); ?>

</head>

<body>

<div>

<div>

<div>

<adata-toggle="collapse"data-target=".nav-collapse">

<span></span>

<span></span>

<span></span>

</a>

<ahref="<?php echo site_url(); ?>"><?phpbloginfo('name'); ?></a>

<div>

<ul>

<?phpwp_list_pages(array('title_li' => '', 'exclude' => 4)); ?>

</ul>

</div><!--/.nav-collapse -->

</div>

</div>

</div>

<div>

现在,让我们去清理footer。我们下载的示例文件链接了很多的我们网站不需要的JavaScript文件。所以,我们开始删除它们。更新你的footer,变成这样:

<hr>

<footer>

<p>? Company 2012</p>

</footer>

</div><!-- /container -->

<!-- Le javascript

================================================== -->

<scriptsrc="../assets/js/jquery.js"></script>

<scriptsrc="../assets/js/bootstrap.js"></script>

</body>

</html>

接下来我们添加wp_footer()标签,它和wp_head()拥有同样的功能。我们闭合body标签前把这些放好。我们也要改变我们加载JavaScript文件的方法,将它们移至header.php文件,所以更新你的footer.php变成这样:

<hr>

<footer>

<p>? Company 2012</p>

</footer>

</div><!-- /container -->

<?phpwp_footer(); ?>

</body>

</html>

现在我们可以回来通过WordPress推荐的加载JavaScript的方式添加JavaScript,这个方法包括使用wp_enqueue_script()函数。

首先,我们在wp_head()前面使用这个函数来加载jQuery,接下来在你的header.php文件中放置下面代码:

<?phpwp_enqueue_script("jquery"); ?>

<?phpwp_head(); ?>

下面我们将用wp_head()方法加载JavaScript,请记住,wp_head()方法是插件和主题中经常用来向header.php文件中添加CSS和JavaScript的。

为此我们将不得创建一个新文件叫做functions.php并且从这里加载我们的JavaScript,这可能看起来像用很多多余的步骤去加载一个JavaScript 文件,但由于你的主题会变得越来越复杂,这将有助于一切保持清洁和有组织。

在和header.php同样的文件夹中创建并且打开这个functions.php文件,粘贴下面的代码:

<?php

function wpbootstrap_scripts_with_jquery()

{

// Register the script like this for a theme:

wp_register_script( 'custom-script', get_template_directory_uri() . '/bootstrap/js/bootstrap.js', array( 'jquery' ) );

// For either a plugin or a theme, you can then enqueue the script:

wp_enqueue_script( 'custom-script' );

}

add_action( 'wp_enqueue_scripts', 'wpbootstrap_scripts_with_jquery' );

?>

要测试是否奏效,导航至你的网站,调整其为平板电脑或手机的尺寸并且点击下拉菜单,它应该能下拉并且像这样:

如果下拉没有生效,这意味着链接JavaScript文件过程中出现错误。确保你已经正确地将bootstrap > js文件夹上传并且你的代码是正确的。

创建WordPress首页

现在我们已经完成了基本的静态模板设置,让我们通过在WordPress中创建一个首页把它变为动态的并且显示在我们网站中,而不是我们现在的硬编码的HTML。

要做这个,需要到WordPres控制面板并且点击页面>添加新页面。标题为"首页"然后点击内容编辑器上面的HTML标签。现在我们将index.php文件中剩余的标记语言剪切并且粘贴到这个页面并且点击"发布"。你的首页应该像这样:

所有你的index.php文件都应该包含header和footer:

<?phpget_header(); ?>

<?phpget_footer(); ?>

要想让首页引入我们在WordPress控制面板中添加的内容,我们需要回到动态模板中,使用很可能是WordPress中最有名的函数叫做,循环。

WordPress循环,顾名思义,它循环一个页面或文章的标题和内容,同样还有很多其他信息如发布日期,作者,甚至该文章或页面关联的评论等。

基本的循环如下所示:

<?phpif ( have_posts() ) : while ( have_posts() ) : the_post(); ?>

<?phpendwhile; else: ?>

<p><?php_e('Sorry, no posts matched your criteria.'); ?></p>

<?phpendif; ?>

下面是你的带有循环的index.php文件的样子:

<?phpget_header(); ?>

<?phpif ( have_posts() ) : while ( have_posts() ) : the_post(); ?>

<?phpendwhile; else: ?>

<p><?php_e('Sorry, no posts matched your criteria.'); ?></p>

<?phpendif; ?>

<?phpget_footer(); ?>

我们将要做的是在WordPress代码中添加该页面的标题和内容,标题的代码为the_title()内容的代码为the_content()。你可能注意到它们和header和footer的标签非常相似,下面是更新后的代码:

<?phpif ( have_posts() ) : while ( have_posts() ) : the_post(); ?>

<h1><?phpthe_title(); ?></h1>

<?phpthe_content(); ?>

<?phpendwhile; else: ?>

<p><?php_e('Sorry, no posts matched your criteria.'); ?></p>

<?phpendif; ?>

我们在用浏览器测试前,必需在WordPress中更新设置,若要使首页显示为主页而不是最近的博文。到控制面板设置 > 阅读并且在"首页显示"下点击"一个静态页"单选按钮,接下来从"主页"下拉菜单中选择"首页"。

点击保存修改然后重新加载首页,我们可以看到我们在控制面板中添加的首页内容。

WordPress允许我们使用一个特殊的叫做front-page.php的文件做为网站的首页。接下来另存index.php文件为front-page.php并且从模板中去掉get_title(),因为我们不想让"首页"这两个字以h1形式在页面顶部显示出来。

你的front-page.php文件应该是这样:

<?phpif ( have_posts() ) : while ( have_posts() ) : the_post(); ?>

<?phpthe_content(); ?>

<?phpendwhile; else: ?>

<p><?php_e('Sorry, no posts matched your criteria.'); ?></p>

<?phpendif; ?>

你可以让index.php页面保持原样。

要展示这一切都正常工作,让我们尝试在控制面板中编辑首页内容,并且在网站的主页查看是否发生改变。返回并且编辑首页内容并且去掉显示在三个h2标题下面的按钮,修改代码如下所示:

现在,重新访问网站主页,变成了这样:

我们的首页看起来还不错啊,让我们继续添加网站的其他页面。

添加更多内容和导航

在控制面板继续添加一个关于,新闻,和联系页面,我们现在先使用假内容,但你可以后续再回来添加你自己的内容。再继续添加两或三个博文。

导航

下面我们需要做的事情是替换网站中的静态导航菜单为一个显示刚才在控制面板中添加的页面的导航。找到样式名为"nav"的无序列表ul并且删除其列表项, 同样删除登录表单,因为我们将直接通过控制面板登录网站。

在样式为"navbar"的div内部的标记语言应该是这样:

<div>

<div>

<div>

<adata-toggle="collapse"data-target=".nav-collapse">

<span></span>

<span></span>

<span></span>

</a>

<ahref="#">Project name</a>

<div>

<ul>

</ul>

</div><!--/.nav-collapse -->

</div>

</div>

</div>

现在我们要用到WordPress代码wp_list_pages()来列举页面,我们不去深入了解这个标签的选项,但它做了什么呢,它创建一个列表项并且链接到每一个页面。添加下面的代码到ul中。

<ul>

<?phpwp_list_pages(array('title_li' => '')); ?>

</ul>

如果你现在去看你的网站你会看到WordPress页面已经出现在主导航上。

这有两个事情我们必要要修复一下。首先我们要正确排列页面顺序,第二我们要删除示例页面。我们将假定你可以删除(或移至垃圾箱)示例页面,改变页面顺序要到控制面板并点击页面项。

然后滑到关于页面并且点击快速编辑,改变顺序域值为1,点击更新,改变新闻页面的顺序为2并且联系我们页面为3,首页应该保持顺序为0。

当你再访问你的网站的时候,导航应该以正确的顺序显示。

我们现在已经完成导航工作。然而,因为WordPress导航标记和Bootstrap标记略微不同,特别是他们为当前或活动页面使用条目的样式上,所以不得不略微修改下bootstrap.css文件。

在你的主题文件夹下,进入bootstrap > css并且打开bootstrap.css文件,在4595行你可以看到Bootstrap .active类的一些样式。

.navbar-inverse .nav .active > a,

.navbar-inverse .nav .active > a:hover,

.navbar-inverse .nav .active > a:focus,

.navbar-inverse .nav .current_page_item a,

.navbar-inverse .nav .current_page_item a:hover,

.navbar-inverse .nav .current_page_item a:focus,

.navbar-inverse .nav .current_page_parent a,

.navbar-inverse .nav .current_page_parent a:hover,

.navbar-inverse .nav .current_page_parent a:focus {

注意: 当你制作了更多的WordPress主题后,你应该考虑使用WordPress自带的自定义菜单功能。你可以在来阅读了解它们。

在下一章节,我们将创建页面和文章的模板。

创建页面,文章和文章列表模板

页面模板

开始先将index.php文件另存为page.php,它将为我们页面模板服务。首先我们应将"Sorry, no posts matched your criteria."改为"Sorry, this page does not exist."。

接下来,我们将添加一些Bootstrap标记来创建一个两列布局。修改你的page.php模板并引入Bootstrap"row"样式和一个"span8"和"span4" 样式,我们将为内容使用span8,边栏内容为span4。

<?phpget_header(); ?>

<div>

<div>

<?phpif ( have_posts() ) : while ( have_posts() ) : the_post(); ?>

<h1><?phpthe_title(); ?></h1>

<?phpthe_content(); ?>

<?phpendwhile; else: ?>

<p><?php_e('Sorry, this page does not exist.'); ?></p>

<?phpendif; ?>

</div>

<div>

</div>

</div>

<?phpget_footer(); ?>

我们将要在其他一些模板中使用侧边栏,我们要利用Wordpress的get_sidebar()标签的优势,它和get_header()和get_footer()标签工作原理一样。

我们需要创建一个叫slidebar.php的新文件并且粘入下面代码。

<h2>Sidebar</h2>

侧边栏模板

我们一会再回来修改这些代码,但现在应该先做是,回到page.php页面并且在"span4"的div中添加 get_sidebar()代码,像这样:

<?phpget_header(); ?>

<div>

<div>

<?phpif ( have_posts() ) : while ( have_posts() ) : the_post(); ?>

<h1><?phpthe_title(); ?></h1>

<?phpthe_content(); ?>

<?phpendwhile; else: ?>

<p><?php_e('Sorry, this page does not exist.'); ?></p>

<?phpendif; ?>

</div>

<div>

<?phpget_sidebar(); ?>

</div>

</div>

<?phpget_footer(); ?>

如果现在看一下我们的页面你会看到我们有了标题,主要内容,还有侧边栏。

我们的页面模板看起来相当不错,让我们继续制作新闻页面。

文章列表页面

新闻页面将有点困难因为它需要列出我们的文章,而不仅仅是页面内容。有一些方法可以解决,但这里我们要用一个非常简单的方法处理。

另存page.php模板为home.php,在WordPress里,home.php模板是用来列出我们的文章的,在我们的示例中,我们将它为新闻页面使用。

我们下面要做的第一件事是硬编码一个h1标签到显示新闻的主要内容区域,这个标签应该放在循环的上面。

在这个home.php模板,该循环将循环所有博客文章,所以,我们使用h2来代替h1为文章的标题,因为h1将被用于页面的标题。

我们添加一个新标签the_permalink(),我们可以用其作从主新闻页面链接到独立新闻文章的链接锚点,这个标记应该在the_title()外层,如下所示:

<h2><ahref="<?php the_permalink(); ?>"><?phpthe_title(); ?></a></h2>

在转移到另一个前让我们对该模板小改一下,首先让我们改变无结果显示文本为"Sorry, there are no posts.",接下来,我们删除显示的文章内容,仅列出链接到页面的标题,让阅读者在点击标题后阅读内容。

在内容处我们使用一个叫the_time()的标签添加文章发布时间,如果你以前使用过PHP你可能认识这个标签,这个标签能用来美化显示你想要定制的任何格式的日期,我们以下面格式显示日期:

Monday, October 1st, 2012

我们用the_time()方法定制成这样:

the_time('l, F jS, Y')

最后我们将要在日期下面添加一个hr标签来分开每篇文章,最后home.php模板变成这样子:

<?phpget_header(); ?>

<div>

<div>

<h1>News</h1>

<?phpif ( have_posts() ) : while ( have_posts() ) : the_post(); ?>

<h2><ahref="<?php the_permalink(); ?>"><?phpthe_title(); ?></a></h2>

<p><em><?phpthe_time('l, F jS, Y'); ?></em></p>

<hr>

<?phpendwhile; else: ?>

<p><?php_e('Sorry, there are no posts.'); ?></p>

<?phpendif; ?>

</div>

<div>

<?phpget_sidebar(); ?>

</div>

</div>

<?phpget_footer(); ?>

现在,为了使新闻页面显示得更合适,我们要到控制面板回到我们设置首页做为主页显示的地方,导航至设置 > 阅读,从紧挨着"文章页"标签的下拉菜单中选择新闻页面并且点击"保存更改"。

一旦这个完成后你返回新闻页面将会看到列出来的文章。

单文章页模板

现在留给我们剩下要做的一个是显示单独文章的模板,该模板非常类似我们的page.php模板,所以我们将page.php另存为single.php,在WordPress中single.php用来显示单独的文章。

我们要做的第一个改动是在标题下面包含日期,我们使用前面同样的代码。

<p><em><?php the_time('l, F jS, Y'); ?></em></p>

我们对该模板要做的最大改变是添加文章的评论功能。然而要想让评论工作的背后要需要很多复杂的代码,实际上向模板添加评论功能是相当简单的,这要感谢comments_template()标签。

当我们在内容标签下面添加这个标签后我们的文章评论功能就可用了。我们同样在评论上面添加一个hr标签帮忙与内容分开,我们最终的single.php模板应该是这样:

<?phpget_header(); ?>

<div>

<div>

<?phpif ( have_posts() ) : while ( have_posts() ) : the_post(); ?>

<h1><?phpthe_title(); ?></h1>

<p><em><?phpthe_time('l, F jS, Y'); ?></em></p>

<?phpthe_content(); ?>

<hr>

<?phpcomments_template(); ?>

<?phpendwhile; else: ?>

<p><?php_e('Sorry, this page does not exist.'); ?></p>

<?phpendif; ?>

</div>

<div>

<?phpget_sidebar(); ?>

</div>

</div>

<?phpget_footer(); ?>

我们现在已经完成了所有基本模板,在最后的章节,我们再去清理一些散乱的结尾,至此,我们基本完成了响应式Bootstrap WordPress主题。

完成主题

更新Header

我们需要注意的第一个细节是标题标签,标题标签是一个网站的重要部分,搜索引擎优化对尤为关心,理想地我们把页面或文章的标题名称同样做为网站的名称。

我们可以用 wp_title()标签完成,我们再稍微按如下方法对此标签做下定制。

wp_title('|',1,'right');

这给我们想要的页面或文章的标题,但我们同样仍想得到网站的名称,我们可以通过使用bloginfo()方法来得到,我们之前使用过但这次是这样的bloginfo('name'),如果我们一起使用这两个标签代码将为:

<title><?phpwp_title('|',1,'right'); ?> <?phpbloginfo('name'); ?></title>

把这个添加到header.php文件的当前标题标签处,你可以看到标题标签如我们所愿显示在页面的顶部。

接下来我们再把网站标题放在左上角以与我们网站名称相配,并且使其链接到首页,这是我们这样做的原因。我们找到这个:

<ahref="#">Project name</a>

并且把它转变成:

<ahref="<?php echo site_url(); ?>"><?phpbloginfo('name'); ?></a>

你能看到我们在标题标签中使用是bloginfo('name'),而site_url()标签是新的,但见名知意,它创建了一个到网站首页的链接。

现在我们已经创建了首页链接,我们再从页面列表中把"Home"链接去掉,我们可以通过在wp_list_pages()函数中添加一个额外的选项,这个选项是"exclude",使用它我们不得不查找首页的id,为此我们要导航至控制面板的页面处并且查看该页面的URL。

在这个示例中首页的ID为4,它可能和你的网站不同,像这样更新wp_list_pages()函数把4替换为你网站首页的ID):

wp_list_pages(array('title_li' => '', 'exclude' => 4))

注意: 如果你在以后的主题中使用这个,你需要将这个ID更新为新主页的ID。

组件化侧边栏

我们将要采取的最后一个重要步骤是组件化主题,这要做的是允许我们在侧边栏使用WordPress组件。

为此我们需要向我们的functions.php文件中再添加一些代码。

打开functions.php文件添加如下代码:

<?php

function wpbootstrap_scripts_with_jquery()

{

// Register the script like this for a theme:

wp_register_script( 'custom-script', get_template_directory_uri() . '/bootstrap/js/bootstrap.js', array( 'jquery' ) );

// For either a plugin or a theme, you can then enqueue the script:

wp_enqueue_script( 'custom-script' );

}

add_action( 'wp_enqueue_scripts', 'wpbootstrap_scripts_with_jquery' );

if ( function_exists('register_sidebar') )

register_sidebar(array(

'before_widget' => '',

'after_widget' => '',

'before_title' => '<h3>',

'after_title' => '</h3>',

));

?>

完成后,我们再回到sidebar.php,用这方法个允许我们通过在控制面板更新侧边栏的代码来替换掉静态内容。

更新完sidebar.php后像这样子:

<?phpif ( !function_exists('dynamic_sidebar') || !dynamic_sidebar() ) : ?>

<?phpendif; ?>

下载主题

如果你跟随本教程有些困难,你可以在这下载已完成的主题:wpbootstrap.zip。

恭喜!

至此,我们有了一个简单的主题,你可以开始用你的内容和样式来定制了,你可以添加任何你定制的CSS到style.css文件。

你应该也感觉舒服,我们已经创建了这个简单的属于你自己的模板,如果你有兴趣,可以查看你可能会在你网站中用到的所有可能的 WordPress主题标签

如果这是你第一个WordPress主题,那么这是一个良好的开端,因为我们会继续学习关于构建WordPress主题,我们将学习如何从控制面板去制作越来越多的动态的可定制的东西。

E文地址:http://blog.teamtreehouse.com/responsive-wordpress-bootstrap-theme-tutorial

译文地址:http://www.woiweb.net/responsive-wordpress-bootstrap-theme-tutorial.html

7

最棒的10款MySQL_GUI工具

MySQL[1]是一个关系型数据库管理系统,由瑞典MySQL AB公司开发,目前属于Oracle公司。Mysql是最流行的关系型数据库管理系统,在WEB应用方面MySQL是最好的RDBMS(Relational Database Management System:关系数据库管理系统)应用软件之一。MySQL是一种关联数据库管理系统,关联数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性。MySQL所使用的SQL语言是用于访问数据库的最常用标准化语言。MySQL软件采用了双授权政策(本词条"授权政策"),它分为社区版和商业版,由于其体积小、速度快、总体拥有成本低,尤其是开放源码这一特点,一般中小型网站的开发都选择MySQL作为网站数据库。由于其社区版的性能卓越,搭配PHP和Apache可组成良好的开发环境。

相关介绍如下:http://baike.baidu.com/link?url=zRTn5ClhmRb5fVJ67kyFpOdHMvgAcLc4t9EJa7BIT07IuCjpTvCUbjt7w8EHZDj6

专业的管理和操作可以通过mysql自身的管理端和客户端连接上服务器进行, 但是有个图形化的管理界面会让事情更简单更高效,下面从网络上找了几个相关管理工具, 供参考

1. Workbench

制造商:Sun Systems/Oracle
网站:http://dev.mysql.com/downloads/workbench/
价格:免费
许可证:GPL License
支持平台:Microsoft Windows,Mac OS X,Linux

MySQL Workbench是一款图形化的数据库设计工具,它在一个开发环境中集成了SQL的开发,管理,数据库设计,创建以及维护。它是 fabFORCE.net旗下DBDesigner 4的继承者,并替代了MySQL GUI Tools Bundle。当前版本是5.2,最早版本是5.0,这是为了强调MySQL Workbench是作为DBDesigner4的继承者被开发出来的事实。

2. Navicat

制造商:PremiumSoft ™ CyberTech Ltd.
网站:http://www.navicat.com/en/products/navicat_mysql/mysql_overview.html
价格:如下所示:

Windows Edition ( Non-Commercial )

US $209 (disk)

US $199 (download)

Windows Edition

US $379 (disk)

US $369 (download)

Mac OS X Edition ( Non-Commercial )

US $209 (disk)

US $199 (download)

Mac OS X Edition

US $329 (disk)

US $319 (download)

Linux Edition ( Non-Commercial )

US $189 (disk)

US $179 (download)

Linux Edition

US $329 (disk)

US $319 (download)

配有30天试用版。
许可证:Commercial 或 Non-commercial licenses.
支持平台:Microsoft Windows,Mac OS X,Linux

用于MySQL的Navicat既是一个数据库管理器同时还是一个开发工具。它适用于从3.21以上的任何MySQL数据库服务器,并且支持包括触发器,存储过程,函数,事件,预览和用户管理在内的绝大多数最新的MySQL功能。

Navicat的功能非常复杂,足以满足专业开发人员的各种特殊需求,同时对于MySQL新手来说也非常简单易学。

3. Sequel Pro

制造商:The Sequel Pro Project(开源)
网站:http://www.sequelpro.com/
价格:免费(接受通过PayPal的捐赠)
许可证:GNU GPL 2.0
支持平台:Mac OS X Tiger Universal Build

Sequel Pro是一款免费的开源程序。它是CocoaMySQL Mac数据库管理程序的继承者。CocoaMySQL是Lorenz Textor的新构想,他是CocoaMySQL的早期的(2003年)主要开发人员。

Sequel Pro用于管理MySQL数据库(本地或在Internet上)。您可以使用它来添加删除数据库和表,修改字段和索引,预览和过滤表的内容,添加编辑删除行,执行自定义查询,转储表或整个数据库。

它兼容MySQL 3.x,4,5。

4. HeidiSQL

制造商:Ansgar Becker
网站:http://www.heidisql.com/
价格:免费(接受通过PayPal的捐赠)
许可证:GNU General Public License
支持平台:Windows 2000,XP,Vista,7(可通过Wine运行于任何Linux之上)

之前被称为MySQL-Front的HeidiSQL是一款免费的开源客户端,由德国程序员Ansgar Becker开发,同时还得到了一些Delphi贡献者的帮助。用户必须通过许可证书创建一个会话登陆本地或远程MySQL服务器,才可以使用 HeidiSQL管理数据库。通过这个会话,用户可以管理所链接的MySQL服务器的MySQL数据库,并在完成之后断开。它的功能集足够应付绝大多数常见和高级数据库,表,数据记录选项,但是目前还处于积极的开发中,以求能实现MySQL前端的所有功能。

另外还有一款由Java编写的jHeidi,它被设计用于Mac和Linux计算机。遗憾的是,该项目已于2010年3月终止了。

5. phpMyAdmin

制造商:The phpMyAdmin Project (on Sourceforge)
网站:http://www.phpmyadmin.net/home_page/
价格:免费(接受通过PayPal的捐赠)
许可证:GNU General Public License, version 2
支持平台:Microsoft Windows,Mac OS X,Linux,PHP 4 - 5,MySQL 3 - 5

PhpMyAdmin是一款免费的软件工具,采用PHP编写,用于在线处理MySQL管理。PhpMyAdmin支持多种MySQL操作,最常用的操作包括管理数据库,表,字段,关系,索引,用户,权限。同时还允许您直接执行SQL语句。

Tobias Ratschiller曾经是IT顾问,后来创建了Maguma软件公司。由于受到Peter Kuppelwieser开发的MySQL-Webadmin的影响,于1998年开始了基于PHP的MySQL的web前端开发。因时间不足,他与 2000年放弃了该项目(以及同样有他开发的phpAdsNew)。就在那时,phpMyAdmin已成为最受欢迎的PHP程序和MySQL管理工具之一,它拥有广泛的社区用户和贡献者。为了协调越来越多的补丁,Olivier Müller,Marc Delisle以及Loïc Chapeaux三位开发人员在注册 SourceForge.net注册了phpMyAdmin项目,并于2001年接手开发工作。

6. SQL Maestro MySQL Tools Family

制造商:SQL Maestro Group
网站:http://www.sqlmaestro.com/products/mysql/
价格:范围从$99的非商业程序到$1949的MySQL Admin Tools Bundle,其中包括完整的网站商业许可证外加3年升级。捆绑包中包括了SQL Maestro,Data Wizard,Code Factory,Service Center以及PHP Generator Pro。
许可证:全范围支持从单独的非商业到附带3年免费升级的站点商业许可证
支持平台:Windows 2000,XP,Vista,7

SQL Maestro Group提供了完整的数据库管理,开发和管理工具,适用于所有主流DBMS。通过GUI界面,您可以执行查询和SQL脚本,管理用户以及他们的特权,导入,导出到处和数据备份。同时,您还可以为所选定的表以及查询生成PHP脚本,并转移任何ADO兼容数据库到MySQL数据库。

捆绑包中包括:

SQL Maestro for MySQL
专业的MySQL GUI管理工具,支持所有最新的MySQL 5.0和5.1。功能包括预览,过程,触发器和表分区。

Data Wizard for MySQL
MySQL的转储,以及数据导出/导入工具等。

Code Factory for MySQL
用于编辑SQL脚本和创建SQL语句的可视化工具集。

Service Center for MySQL
用于MySQL服务器维护。

PHP Generator for MySQL
生成高性能MySQL PHP脚本。配有免费版本。

7. SQLWave

制造商:Nerocode
网站:http://www.nerocode.com/
价格:$99.00
许可证:shareware。查看http://www.nerocode.com/license.txt以获得更多相关信息。
支持平台:Windows 2000,XP,Vista,7

Nerocode SQLWave是一款MySQL GUI客户端工具,被设计用来自动化和简化数据库的开发进程。它同时还提供了更简便的方法来开拓和维护现有数据库,以及不同方式来设计复杂SQL语句,查询和数据操作。兼容MySQL 4.x - 6.x。

配有30天试用版。

8. dbForge Studio

制造商:devart
网站:http://www.devart.com/dbforge/mysql/studio/
价格:免费的Express版,$49.95(非商业标准版),$99.99(非商业专业版)。
许可证:商业和非商业许可证。提供订阅这一高效快速的方法来实现产品升级和技术支持。
支持平台:Windows 2000,XP,Vista,7

用于MySQL的DbForge Studio提供了图形化的MySQL开发和管理。

有三个版本:Express,Standard,Professional。

Express是免费应用程序,提供用于架构对象,用户账户,SQL脚本和查询的基本功能。

Standard为数据库管理员和开发者提供了附加工具,比如debugger,Query Builder,代码模板,对象检索,各种输出和维护向导。

Professional是全功能版本并添加了以下设计:数据库项目,对数据库结构(架构比较)或数据库内容(数据比较)进行准确的比较和同步,调试已存储的过程和脚本,创建复杂查询。

dbForge的其他工具包括:

Schema Compare for MySQL

Data Compare for MySQL

Query Builder for MySQL

Fusion for MySQL

9. DBTools Manager

制造商:DBTools Software
网站:http://www.dbtools.com.br/EN/dbmanagerpro/
价格:标准版免费。单一授权的企业版为$69.90 USD。Discounts版适用于所中许可证。
许可:标准版授权于标准免费软件条件。企业版授权于销售单位。
支持平台:Windows 2000,XP,Vista,7

标准版
特别为个人使用设计,它配备最低限功能,适用于数据库新手执行基本的数据库管理。您可以在非商业的前提下免费使用它。如果用于商业使用,您可以购买授权,同时还将提供额外功能。

企业版
特别为企业使用设计,它更适用于那些寻找集成化数据库管理程序的DBA和开发人员。购买前,您可以先试用。企业版的试用版是全功能的,您有20天的时间进行所有的尝试,同时基于完整的体验来决定是否购买。

同时支持MySQL 3,4,5。

10. MyDB Studio

制造商:H2LSoft, Inc.
网站:http://www.mydb-studio.com/
价格:免费
授权:免费软件
支持平台:Windows 2000,XP,Vista,7

MyDB Studio包含了用于MySQL服务器管理的完整工具集。它可用于创建/编辑/放弃数据库对象,数据库同步,以及数据导出/导入。数据库管理员还可以用它来执行数据库转移,以及备份和还原。它支持使用SSH隧道来保护您的链接,即便您的主机不允许远程访问链接,用户和权限管理,以及PHP脚本创建,您依然可以进行连接。