<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>ChinaCPU 资讯网</title>
	<atom:link href="http://www.chinacpu.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.chinacpu.com</link>
	<description>ChinaCPU 资讯网</description>
	<lastBuildDate>Fri, 18 May 2012 04:23:29 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.2</generator>
		<item>
		<title>开始使用C++11的9个理由</title>
		<link>http://www.chinacpu.com/2012/05/%e5%bc%80%e5%a7%8b%e4%bd%bf%e7%94%a8c11%e7%9a%849%e4%b8%aa%e7%90%86%e7%94%b1/</link>
		<comments>http://www.chinacpu.com/2012/05/%e5%bc%80%e5%a7%8b%e4%bd%bf%e7%94%a8c11%e7%9a%849%e4%b8%aa%e7%90%86%e7%94%b1/#comments</comments>
		<pubDate>Fri, 18 May 2012 04:23:29 +0000</pubDate>
		<dc:creator>虚网人</dc:creator>
				<category><![CDATA[业界视点]]></category>

		<guid isPermaLink="false">http://www.chinacpu.com/?p=1034</guid>
		<description><![CDATA[<br/>如果你的代码工作正常并且表现良好，你可能会想知道为什么还要使用C++ 11。当然了，使用用最新的技术感觉很好，但是事实上它是否值得呢？ 在我看来，答案毫无疑问是肯定的。我在下面给出了9个理由，它们分为两类：性能优势和开发效率。 获得性能优势 理由1：move语义(move semantics)。简单的说，它是优化复制的一种方式。有时候复制很显然是浪费的。如果你从一个临时的string对象复制内容，简单的复制指针到字符缓冲区将比创建一个新的缓冲区再复制要高效得多。他之所以能工作是因为源对象超出了范围。 然而，在这以前C++并没有判断源对象是不是临时对象的机制。move语义通过除了复制操作外还允许你有一个move构造函数(move constructor)和一个move赋值运算(move assignment)符来提供这个机制。 你知道吗？当你在Visual Studio 2010中使用标准库中的类如string或vector时，它们已经支持move语义了。这可以防止不必要的的复制从而改善性能。 通过在你的类中实现move语义你可以获得额外的性能提升，比如当你把它们存储到STL容器中时。还有，move语义不仅可以应用到构造函数，还可以应用到方法（如vector的push_back方法）。 理由2：通过使用类别属性(type traits,如is_floating_point)和模板元编程(template metaprogramming，如enable_if template)，你可以为某些特定的类型定制模版，这可以实现优化。 理由3：哈希表现在已经是标准实现的了，它提供更快速的插入、删除和查找， 这在处理大量数据时很有用。你现在可以随便使用unordered_map, unordered_multimap, unordered_set 和unordered_multiset这几种数据结构了。 提高效率 提高效率不仅都是在代码性能方面，开发时间也是宝贵的。C++ 11可以让你的代码更短、更清晰、和更易于阅读，这可以让你的效率更高。 理由4：auto关键字可以自动推断类型，所以下面的代码： vector&#60;vector&#60;MyType&#62;&#62;::const_iterator it = v.begin() 现在可以很简单的写成： auto it = v.cbegin() 尽管有些人会说，它隐藏了类型信息，在我看来它利大于弊，因为它减少了视觉混换并展示了代码的行为，还有它可以让你我少打很多字！ 理由5：Lambda表达式提供了一种方法来定义匿名方法对象（实际上是闭包），这是代码更加线性和有规律可循。这在和STL算法结合使用时很方便： bool is_fuel_level_safe() { return all_of(_tanks.begin(), _tanks.end(), [this](Tank&#38; t) { return t.fuel_level() &#62; _min_fuel_level; }); } 理由6：新的智能指针（smart pointer）替换了有问题的auto_ptr，你可以不用担心内存的释放并移除相关释放内存的代码了。这让代码更清晰，并杜绝了内存泄露和查找内存泄露的时间。 理由7：把方法作为first class object是一个非常强大的特性，这让你的代码变得更灵活和通用了。C++的std::function提供了这方面的功能。方法提供一种包装和传递任何可调用的东西-函数指针, 仿函数（functor）, lambda表达式等。 理由8：还有许多其它小的功能，如override、final关键字和nullptr让你的代码意图更明确。对我来说，减少视觉混乱和代码中能够更清楚地表达我的意图意味着更高兴、更高效。 另一个开发效率的方面是错误检测。如果你的错误在运行时发生，这意味着你至少需要运行软件，并可能得通过一系列步骤来重现错误，这需要时间。 C++ [...]]]></description>
			<content:encoded><![CDATA[<p><br/>如果你的代码工作正常并且表现良好，你可能会想知道为什么还要使用C++ 11。当然了，使用用最新的技术感觉很好，但是事实上它是否值得呢？ 在我看来，答案毫无疑问是肯定的。我在下面给出了9个理由，它们分为两类：性能优势和开发效率。</p>
<p><strong>获得性能优势</strong></p>
<p><strong>理由1：</strong>move语义(move semantics)。简单的说，它是优化复制的一种方式。有时候复制很显然是浪费的。如果你从一个临时的string对象复制内容，简单的复制指针到字符缓冲区将比创建一个新的缓冲区再复制要高效得多。他之所以能工作是因为源对象超出了范围。</p>
<p>然而，在这以前C++并没有判断源对象是不是临时对象的机制。move语义通过除了复制操作外还允许你有一个move构造函数(move constructor)和一个move赋值运算(move assignment)符来提供这个机制。</p>
<p>你知道吗？当你在Visual Studio 2010中使用标准库中的类如string或vector时，它们已经支持move语义了。这可以防止不必要的的复制从而改善性能。</p>
<p>通过在你的类中实现move语义你可以获得额外的性能提升，比如当你把它们存储到STL容器中时。还有，move语义不仅可以应用到构造函数，还可以应用到方法（如vector的push_back方法）。</p>
<p><strong>理由2</strong><strong>：</strong>通过使用类别属性(type traits,如is_floating_point)和模板元编程(template metaprogramming，如enable_if template)，你可以为某些特定的类型定制模版，这可以实现优化。</p>
<p><strong>理由3</strong><strong>：</strong>哈希表现在已经是标准实现的了，它提供更快速的插入、删除和查找， 这在处理大量数据时很有用。你现在可以随便使用unordered_map, unordered_multimap, unordered_set 和unordered_multiset这几种数据结构了。</p>
<p><strong>提高效率</strong></p>
<p>提高效率不仅都是在代码性能方面，开发时间也是宝贵的。C++ 11可以让你的代码更短、更清晰、和更易于阅读，这可以让你的效率更高。</p>
<p><strong>理由4：</strong>auto关键字可以自动推断类型，所以下面的代码：</p>
<ol>
<li>vector&lt;vector&lt;MyType&gt;&gt;::const_iterator it = v.begin()</li>
</ol>
<p>现在可以很简单的写成：</p>
<ol>
<li>auto it = v.cbegin()</li>
</ol>
<p>尽管有些人会说，它隐藏了类型信息，在我看来它利大于弊，因为它减少了视觉混换并展示了代码的行为，还有它可以让你我少打很多字！</p>
<p><strong>理由5：</strong>Lambda表达式提供了一种方法来定义匿名方法对象（实际上是闭包），这是代码更加线性和有规律可循。这在和STL算法结合使用时很方便：</p>
<pre>bool is_fuel_level_safe()
{
    return all_of(_tanks.begin(), _tanks.end(),
        [this](Tank&amp; t) { return t.fuel_level() &gt; _min_fuel_level; });
}</pre>
<p><strong>理由6</strong><strong>：</strong>新的智能指针（smart pointer）替换了有问题的auto_ptr，你可以不用担心内存的释放并移除相关释放内存的代码了。这让代码更清晰，并杜绝了内存泄露和查找内存泄露的时间。</p>
<p><strong>理由7</strong><strong>：</strong>把方法作为first class object是一个非常强大的特性，这让你的代码变得更灵活和通用了。C++的std::function提供了这方面的功能。方法提供一种包装和传递任何可调用的东西-函数指针, 仿函数（functor）, lambda表达式等。</p>
<p><strong>理由8</strong><strong>：</strong>还有许多其它小的功能，如override、final关键字和nullptr让你的代码意图更明确。对我来说，减少视觉混乱和代码中能够更清楚地表达我的意图意味着更高兴、更高效。</p>
<p>另一个开发效率的方面是错误检测。如果你的错误在运行时发生，这意味着你至少需要运行软件，并可能得通过一系列步骤来重现错误，这需要时间。</p>
<p>C++ 11提供了一种方法来检查先决条件并尽早的在可能的时机捕获错误-编译过程中，在你运行代码前。这就是<strong>理由</strong><strong>9</strong>。</p>
<p>这是通过静态断言(static_assert)和类别属性模版实现的。这种方法的另一个好处是，它不需要占用任何的运行时开销，没有什么性能损失！</p>
<p><strong>现在开始掌握C++ 11</strong></p>
<p>在C++ 11标准中除了上描述的还有更多的改动和新功能，它需要一整本数来描述。不过，我相信它们是值得你花时间去学习的。你将省去以往花在提高效率上的时间。很多主流的编译器已经开始支持C++ 11的一些标准了。还等什么？开始吧！</p>
<p>英文出自：<a href="http://www.cpprocks.com/2012/05/07/9-reasons-to-start-using-c11/" target="_blank">cpprocks</a></p>
<p>译文出自：<a href="http://www.oschina.net/news/28928/9-reasons-to-start-using-c11" target="_blank">开源中国社区</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.chinacpu.com/2012/05/%e5%bc%80%e5%a7%8b%e4%bd%bf%e7%94%a8c11%e7%9a%849%e4%b8%aa%e7%90%86%e7%94%b1/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>让谷歌感到害怕的12家新创公司：Quora居首</title>
		<link>http://www.chinacpu.com/2012/05/%e8%ae%a9%e8%b0%b7%e6%ad%8c%e6%84%9f%e5%88%b0%e5%ae%b3%e6%80%95%e7%9a%8412%e5%ae%b6%e6%96%b0%e5%88%9b%e5%85%ac%e5%8f%b8%ef%bc%9aquora%e5%b1%85%e9%a6%96/</link>
		<comments>http://www.chinacpu.com/2012/05/%e8%ae%a9%e8%b0%b7%e6%ad%8c%e6%84%9f%e5%88%b0%e5%ae%b3%e6%80%95%e7%9a%8412%e5%ae%b6%e6%96%b0%e5%88%9b%e5%85%ac%e5%8f%b8%ef%bc%9aquora%e5%b1%85%e9%a6%96/#comments</comments>
		<pubDate>Thu, 17 May 2012 13:07:20 +0000</pubDate>
		<dc:creator>虚网人</dc:creator>
				<category><![CDATA[业界视点]]></category>

		<guid isPermaLink="false">http://www.chinacpu.com/?p=1030</guid>
		<description><![CDATA[<br/>北京时间5月17日消息，谷歌现在处于相当不错的位置。一方面在搜索市场上大幅领先，是最好的搜索引擎，另外一方面还进入其他领域，如支付和音乐。 但这些市场被搅动的时机已经成熟，所需的只是新创公司如何将谷歌赶下神坛的想法&#8211;谷歌无法像灵活的新创公司一样行动迅速。当询问一些投资者和业内人士，他们认为谷歌哪些地方可能处于被干扰的危险之中时，他们的回答显示，谷歌比我们想象的要脆弱得多。 甚至搜索也已不再神圣，一些新创公司将在谷歌的软肋下手。 以下为谷歌应该害怕的12家新创公司 1.Quora 谷歌搜索不一定是针对问题优化，而是针对关键词优化。但Quora是针对问题优化，并有庞大的问答知识库。 2.Square 谷歌通过谷歌钱包多次涉足近场通信和支付业务，但Pay With Square不需要特定技术，只用现有的技术，同样不需要钱包。 3.DuckDuckGo 在搜索量上，DuckDuckGo肯定无法与谷歌比，但该网站的增长曲线依然很有吸引力。在不需要存储和分享数据时，DuckDuckGo比谷歌有优势。 4.AppNexus AppNexus是在显示广告市场搞地下工程。虽然谷歌可提供大量的广告，但AppNexus可轻易从侧面攻击谷歌，占领显示广告市场。这属于谷歌的重要市场，因此能打中要害。 5.Spotify 谷歌音乐几乎没有取得什么成果，因为该服务试图想取得与iTunes一样的成功，而Spotify和其他流体音乐服务显示出，时代肯定会改变。在朝音乐订阅经济发展中，Spotify已成为有比较大优势的领先者。 6.Path Google+看起来很像Facebook的竞争者，不过实际上更像Facebook Connect，而不是完整的社交网站。但谷歌也投入大量的时间开发移动版Google+，而Path提供了好得多的移动用户体验。谷歌曾试图收购Path，但遭到拒绝。 7.Pinterest 谷歌不久将面临一个很艰难的抉择，收购Pinterest或让一个竞争者进来，解决其视频发现问题。Pinterest正在成为谷歌发现‌引擎一个明确和重要的组成部分，谷歌需要将该技术整合到自己的技术中，否则将冒失去大量机会的风险。 8.Chartbeat 谷歌分析（Google Analytics）在跟踪网站性能上是非常强大的工具，但依然缺乏实时分析。Chartbeat是最好的实时分析服务之一。谷歌曾试图自己开发实时分析，但还无法与Chartbeat相比。 Chartbeat还在扩大业务，为零售商和其他更大网站提供更强大的分析，因此侵占更多的谷歌市场只是时间问题。 9.OnLive 谷歌试图通过发布轻量级浏览器和以网页形式访问相关内容，开发自己的网页应用。这确实也包括了一些更高质量应用，在Chrome浏览器 上可玩《愤怒的小鸟》。但OnLive采取了不同的方法，并非推出精简版的移动操作系统，而是通过网络提供完整版的Windows，也能玩Xbox 360品质游戏。 10.SayHi 谷歌翻译曾是翻译服务的金牌标准，但这是在SayHi正式登陆应用店以前。SayHi看起来像苹果的Siri，虽然还有一些问题要解决，但可能是现在最好的翻译应用。 11.Sparrow Sparrow简化了收件箱，并使阅读邮件更方便，还可与Gmail帐号同步。对谷歌来说不幸的是，如果用户通过网络浏览器访问Gmail，将失去广告。如果Sparrow继续获得发展，谷歌基本上将无法从Gmail访问中获得广告收入。 12.SocialCam 这可能很难理解，但如果SocialCam走Instagram的道路，也许观看视频将不再需要视频门户网站YouTube。视频将通过社交和有机的方式分享，不需要搜索YouTube等网站的视频。任何相关的内容只在SocialCam推送中显示。 本文来自：腾讯科技]]></description>
			<content:encoded><![CDATA[<p><br/><img src="http://www.chinacpu.com/wp-content/uploads/auto_save_image/2012/05/130721SRW.jpg" alt="" width="500" height="375" border="0" /></p>
<p>北京时间5月17日消息，谷歌现在处于相当不错的位置。一方面在搜索市场上大幅领先，是最好的搜索引擎，另外一方面还进入其他领域，如支付和音乐。</p>
<p>但这些市场被搅动的时机已经成熟，所需的只是新创公司如何将谷歌赶下神坛的想法&#8211;谷歌无法像灵活的新创公司一样行动迅速。当询问一些投资者和业内人士，他们认为谷歌哪些地方可能处于被干扰的危险之中时，他们的回答显示，谷歌比我们想象的要脆弱得多。</p>
<p>甚至搜索也已不再神圣，一些新创公司将在谷歌的软肋下手。</p>
<p><strong>以下为谷歌应该害怕的12家新创公司</strong></p>
<p><strong> 1.Quora</strong></p>
<p><strong> </strong>谷歌搜索不一定是针对问题优化，而是针对关键词优化。但Quora是针对问题优化，并有庞大的问答知识库。</p>
<p><strong>2.Square</strong></p>
<p><strong> </strong>谷歌通过谷歌钱包多次涉足近场通信和支付业务，但Pay With Square不需要特定技术，只用现有的技术，同样不需要钱包。</p>
<p><strong>3.DuckDuckGo</strong></p>
<p><strong> </strong>在搜索量上，DuckDuckGo肯定无法与谷歌比，但该网站的增长曲线依然很有吸引力。在不需要存储和分享数据时，DuckDuckGo比谷歌有优势。</p>
<p><strong>4.AppNexus</strong></p>
<p><strong> </strong>AppNexus是在显示广告市场搞地下工程。虽然谷歌可提供大量的广告，但AppNexus可轻易从侧面攻击谷歌，占领显示广告市场。这属于谷歌的重要市场，因此能打中要害。</p>
<p><strong>5.Spotify</strong></p>
<p><strong> </strong>谷歌音乐几乎没有取得什么成果，因为该服务试图想取得与iTunes一样的成功，而Spotify和其他流体音乐服务显示出，时代肯定会改变。在朝音乐订阅经济发展中，Spotify已成为有比较大优势的领先者。</p>
<p><strong>6.Path</strong></p>
<p><strong> </strong>Google+看起来很像Facebook的竞争者，不过实际上更像Facebook Connect，而不是完整的社交网站。但谷歌也投入大量的时间开发移动版Google+，而Path提供了好得多的移动用户体验。谷歌曾试图收购Path，但遭到拒绝。</p>
<p><strong>7.Pinterest</strong></p>
<p><strong> </strong>谷歌不久将面临一个很艰难的抉择，收购Pinterest或让一个竞争者进来，解决其视频发现问题。Pinterest正在成为谷歌发现‌引擎一个明确和重要的组成部分，谷歌需要将该技术整合到自己的技术中，否则将冒失去大量机会的风险。</p>
<p><strong>8.Chartbeat</strong></p>
<p><strong> </strong>谷歌分析（Google Analytics）在跟踪网站性能上是非常强大的工具，但依然缺乏实时分析。Chartbeat是最好的实时分析服务之一。谷歌曾试图自己开发实时分析，但还无法与Chartbeat相比。</p>
<p>Chartbeat还在扩大业务，为零售商和其他更大网站提供更强大的分析，因此侵占更多的谷歌市场只是时间问题。</p>
<p><strong>9.OnLive</strong></p>
<p><strong> </strong>谷歌试图通过发布轻量级浏览器和以网页形式访问相关内容，开发自己的网页应用。这确实也包括了一些更高质量应用，在Chrome浏览器 上可玩《愤怒的小鸟》。但OnLive采取了不同的方法，并非推出精简版的移动操作系统，而是通过网络提供完整版的Windows，也能玩Xbox 360品质游戏。</p>
<p><strong>10.SayHi</strong></p>
<p><strong> </strong>谷歌翻译曾是翻译服务的金牌标准，但这是在SayHi正式登陆应用店以前。SayHi看起来像苹果的Siri，虽然还有一些问题要解决，但可能是现在最好的翻译应用。</p>
<p><strong>11.Sparrow</strong></p>
<p><strong> </strong>Sparrow简化了收件箱，并使阅读邮件更方便，还可与Gmail帐号同步。对谷歌来说不幸的是，如果用户通过网络浏览器访问Gmail，将失去广告。如果Sparrow继续获得发展，谷歌基本上将无法从Gmail访问中获得广告收入。</p>
<p><strong>12.SocialCam</strong></p>
<p><strong> </strong>这可能很难理解，但如果SocialCam走Instagram的道路，也许观看视频将不再需要视频门户网站YouTube。视频将通过社交和有机的方式分享，不需要搜索YouTube等网站的视频。任何相关的内容只在SocialCam推送中显示。</p>
<p>本文来自：<a href="http://tech.qq.com/a/20120517/000145.htm" target="_blank">腾讯科技</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.chinacpu.com/2012/05/%e8%ae%a9%e8%b0%b7%e6%ad%8c%e6%84%9f%e5%88%b0%e5%ae%b3%e6%80%95%e7%9a%8412%e5%ae%b6%e6%96%b0%e5%88%9b%e5%85%ac%e5%8f%b8%ef%bc%9aquora%e5%b1%85%e9%a6%96/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>腾讯副总裁张小龙谈用户体验</title>
		<link>http://www.chinacpu.com/2012/05/%e8%85%be%e8%ae%af%e5%89%af%e6%80%bb%e8%a3%81%e5%bc%a0%e5%b0%8f%e9%be%99%e8%b0%88%e7%94%a8%e6%88%b7%e4%bd%93%e9%aa%8c/</link>
		<comments>http://www.chinacpu.com/2012/05/%e8%85%be%e8%ae%af%e5%89%af%e6%80%bb%e8%a3%81%e5%bc%a0%e5%b0%8f%e9%be%99%e8%b0%88%e7%94%a8%e6%88%b7%e4%bd%93%e9%aa%8c/#comments</comments>
		<pubDate>Sat, 12 May 2012 03:09:15 +0000</pubDate>
		<dc:creator>虚网人</dc:creator>
				<category><![CDATA[业界视点]]></category>

		<guid isPermaLink="false">http://www.chinacpu.com/?p=1024</guid>
		<description><![CDATA[<br/>导读：从Foxmail到腾讯“七星级产品”QQ邮箱，再到腾讯核武器级产品微信。在外界看来，腾讯副总裁、广州研发部总经理张小龙作风低调，很少接受正式的媒体采访。然而作为当今国内最优秀的产品经理代表的他，其“对人性的把握是最重要”的产品理念却颇受关注。日前张小龙在知乎网上分享了自己对用户体验的看法(这或许是他目前为止公开分享的最长文章)。现CSDN研发频道对内容进行了整理，也欢迎大家分享自己对互联网产品设计开发的看法。 用户体验的目标：做到“自然” 通过例举几个示例证明： 1.需要用文字来解释的交互不是好交互 观察3岁的小孩用iPhone很容易上手。比如，iPhone的开锁，小孩甚至不用学就会用。因为触摸是人的天性，同时iPhone通过箭头图标， 向右滑动的文字条（小孩看不懂文字），来暗示手指触摸向右滑动来解锁。自然和人的天性是一致的。大人因为成年后受污染较多，反而不一定立即学会 iphone解锁，可能需要看文字解释来理解。所以不识字的小孩可能比老年人更快学会使用iPhone。需要用文字来解释的交互不是好交互。 2.更自然的模式才更有生命力 Apple在“自然”体验上做了很多尝试。比如，通常PC下的“文件夹”（甚至“文件”）是不太自然的电脑概念，被从iOS里面取消（文件只有和能 解释它的应用关联才有意义）。MacOS尝试改变触控板的传统滚动方向，将手指滑动改为和内容一致的方向，并称之为“自然”模式，即，以前的触控板的滑动 方向是“不自然”的。这样的改变很需要勇气，但也许Apple觉得长远来看更自然的模式才更有生命力，哪怕暂时会改变用户习惯而让用户不适应。 3.自然往往和人的本性相关 自然往往和人的本性相关的。微信的摇一摇是个以“自然”为目标的设计。“抓握”，“摇晃”，是人在远古时代没有工具时必须具备的本能。手机提供了激 发人类这项远古本能的条件。设计“摇一摇”时，目标是和人的“自然”或者说“本能”动作体验做到一致。摇一摇的体验包括：动作 &#8211; 摇动；视觉 &#8211; 屏幕裂开并合上来响应动作； 听觉：有吸引力（男性是来福枪，女性是铃铛）的声音来响应动作；结果 &#8211; 从屏幕中央滑下的一张名片。整个界面没有菜单和按钮。但几乎没有比它更简单的交互体验了。感谢手机，让远古时代人们通过投掷石头来“连接”到其他人，进化 到摇动手机来虚拟地“连接”人。 摇一摇上线后，很快就达到每天一亿次以上的摇一摇使用次数。“简单而自然”的体验人人都会用，并且因为“自然”，而“自然而然”地去用它。它也没有 高端和低端人群之分。摇一摇给我们的最大启示是，一种通过肢体而非鼠标（甚至触屏）来完成的交互，也许代表了未来移动设备的交互方向（bump在这方面做 得更早）。（顺便说下，经常有人说微信摇一摇是学line的，事实上，我们做摇一摇的时候，还不知道有line这个软件。考据一个应用“抄袭”了谁，除了 获得心理安慰之外，并不能提升自身的能力） Pony（马化腾）三年前曾经送给很多人一本书，《don&#8217;t make me think》，光从字面理解，也是这个意思。自然的体验是不需要用户去思考的。我个人也欣赏原研哉等设计师的设计理念，设计应当挖掘人的本原的体验倾向。 “自然”并不只是在交互等体验上体现，更是一种思维方式。程序员都知道面向对象的方法的核心是更“自然”的对复 杂事物的建模方法，“分类”是其核心之一。同样地，产品经理在面对一个复杂问题时，需要有一种符合“自然”原则的建模方法，来通过产品结构模块以及模块之 间的联系来映射和解决问题。没有开发训练的人同样可以建立“自然”思维方式，事实上，“分类”是人类模式化和识别外部世界的本能方式，如果有意识地对任何 问题都从“分类是否合理”的角度来考察，时间长了，会建立起直觉式的分类感觉，而避免形成“大杂烩”式的结果。而对任何一个界面和交互，同样可以用 “don&#8217;t make me think”或者“是否自然到人人都能自然而然地使用”来反复思考。 比如，我们会鼓励每个界面尽可能且只有一个突出的按钮作为用户不用思考就默认去点的操作点。当思考过一千个界面的交互后，对哪些交互是自然的，哪些 是不自然的就会很容易判断出。即便对于司空见惯的体验点，加以反思也会有发现改进余地，比如，对一个列表，需要显示总的条目数吗（比如通讯录有多少人，用 户需要这个数字吗）？一个进度条，需要显示百分比吗？数字对用户是自然能接受的反馈吗？ “自然”可能容易导致玄学，因此这里想强调的是，“自然”的思维方式一般是需要长期的非常理性的训练才能获得， 而不是突然幻想自己获得了一种使用“自然原则”的能力。记得知乎上有个问题问“乔布斯为什么能凭直觉知道该怎么做”。我认为没有任何人有天生的可重复的直 觉来立即成为一个领域的专业人员。比如，对于复杂事物，如何“抽象”为一个简单模型，是需要大量案例锻炼的。但是，如果经过一万小时的有意识的朝某个方向 的训练（比如对“自然”的反复思考和实际工作练习），并且是极为理性的思维和实践训练，是可以获得一些直觉的。大量的理性训练有助于形成一种对同类事物的 识别模式，这种模式形成直觉。比如大部分中国人其实是没有经受过“简单是美”的训练，表现在现实中，很多人其实是很难接受一套极简主义的装修风格的居室 的。只有当对“极简”有反复体验和思考，才能将“简单是美”变成骨子里的审美观，并体现在设计中。 简单和自然是什么关系？简单为什么就美了？留给你去想。 张小龙发表本篇博文后，业界产品经理对此纷纷发表了自己对用户体验的解读。 有道高级技术总监 邓毅： 我觉得用户体验主要指用户在使用产品的时候的流畅程度与最后对于产品的总体感觉。大致有4个层次的状态，从差到好： 用户被困住：希望完成某个需求，花了很大的代价和耐心还是没有成功，只能处于抓狂的状态 使用不舒服：希望完成某个需求，必须花一些功夫去琢磨和尝试（甚至是乱世），才能够找到最终的使用办法 使用流畅：希望完成某个需求的时候，非常自然的就找到并且按照软件的设计功能进行下去，最终达到自己的目的 [...]]]></description>
			<content:encoded><![CDATA[<p><br/><strong>导读：</strong>从Foxmail到腾讯“七星级产品”QQ邮箱，再到腾讯核武器级产品微信。在外界看来，腾讯副总裁、广州研发部总经理张小龙作风低调，很少接受正式的媒体采访。然而作为当今国内最优秀的产品经理代表的他，其“对人性的把握是最重要”的产品理念却颇受关注。日前张小龙在<a href="http://www.zhihu.com/question/19682869/answer/14398439" target="_blank">知乎网</a>上分享了自己对用户体验的看法(这或许是他目前为止公开分享的最长文章)。现<a href="http://sd.csdn.net/" target="_blank">CSDN研发频道</a>对内容进行了整理，也欢迎大家分享自己对互联网产品设计开发的看法。</p>
<p><img src="http://www.chinacpu.com/wp-content/uploads/auto_save_image/2012/05/030926JcU.jpg" alt="" width="325" height="326" border="0" /></p>
<p><strong>用户体验的目标：做到“自然”</strong></p>
<p><strong>通过例举几个示例证明：</strong></p>
<p><strong>1.需要用文字来解释的交互不是好交互</strong></p>
<p>观察3岁的小孩用iPhone很容易上手。比如，iPhone的开锁，小孩甚至不用学就会用。因为触摸是人的天性，同时iPhone通过箭头图标， 向右滑动的文字条（小孩看不懂文字），来暗示手指触摸向右滑动来解锁。自然和人的天性是一致的。大人因为成年后受污染较多，反而不一定立即学会 iphone解锁，可能需要看文字解释来理解。所以不识字的小孩可能比老年人更快学会使用iPhone。需要用文字来解释的交互不是好交互。</p>
<p><strong>2.更自然的模式才更有生命力</strong></p>
<p>Apple在“自然”体验上做了很多尝试。比如，通常PC下的“文件夹”（甚至“文件”）是不太自然的电脑概念，被从iOS里面取消（文件只有和能 解释它的应用关联才有意义）。MacOS尝试改变触控板的传统滚动方向，将手指滑动改为和内容一致的方向，并称之为“自然”模式，即，以前的触控板的滑动 方向是“不自然”的。这样的改变很需要勇气，但也许Apple觉得长远来看更自然的模式才更有生命力，哪怕暂时会改变用户习惯而让用户不适应。</p>
<p><strong>3.自然往往和人的本性相关</strong></p>
<p>自然往往和人的本性相关的。微信的摇一摇是个以“自然”为目标的设计。“抓握”，“摇晃”，是人在远古时代没有工具时必须具备的本能。手机提供了激 发人类这项远古本能的条件。设计“摇一摇”时，目标是和人的“自然”或者说“本能”动作体验做到一致。摇一摇的体验包括：动作 &#8211; 摇动；视觉 &#8211; 屏幕裂开并合上来响应动作； 听觉：有吸引力（男性是来福枪，女性是铃铛）的声音来响应动作；结果 &#8211; 从屏幕中央滑下的一张名片。整个界面没有菜单和按钮。但几乎没有比它更简单的交互体验了。感谢手机，让远古时代人们通过投掷石头来“连接”到其他人，进化 到摇动手机来虚拟地“连接”人。</p>
<p>摇一摇上线后，很快就达到每天一亿次以上的摇一摇使用次数。“简单而自然”的体验人人都会用，并且因为“自然”，而“自然而然”地去用它。它也没有 高端和低端人群之分。摇一摇给我们的最大启示是，一种通过肢体而非鼠标（甚至触屏）来完成的交互，也许代表了未来移动设备的交互方向（bump在这方面做 得更早）。（顺便说下，经常有人说微信摇一摇是学line的，事实上，我们做摇一摇的时候，还不知道有line这个软件。考据一个应用“抄袭”了谁，除了 获得心理安慰之外，并不能提升自身的能力）</p>
<p>Pony（马化腾）三年前曾经送给很多人一本书，《don&#8217;t make me think》，光从字面理解，也是这个意思。自然的体验是不需要用户去思考的。我个人也欣赏原研哉等设计师的设计理念，设计应当挖掘人的本原的体验倾向。</p>
<p><strong>“自然”并不只是在交互等体验上体现，更是一种思维方式。</strong>程序员都知道面向对象的方法的核心是更“自然”的对复 杂事物的建模方法，“分类”是其核心之一。同样地，产品经理在面对一个复杂问题时，需要有一种符合“自然”原则的建模方法，来通过产品结构模块以及模块之 间的联系来映射和解决问题。没有开发训练的人同样可以建立“自然”思维方式，事实上，“分类”是人类模式化和识别外部世界的本能方式，如果有意识地对任何 问题都从“分类是否合理”的角度来考察，时间长了，会建立起直觉式的分类感觉，而避免形成“大杂烩”式的结果。而对任何一个界面和交互，同样可以用 “don&#8217;t make me think”或者“是否自然到人人都能自然而然地使用”来反复思考。</p>
<p>比如，我们会鼓励每个界面尽可能且只有一个突出的按钮作为用户不用思考就默认去点的操作点。当思考过一千个界面的交互后，对哪些交互是自然的，哪些 是不自然的就会很容易判断出。即便对于司空见惯的体验点，加以反思也会有发现改进余地，比如，对一个列表，需要显示总的条目数吗（比如通讯录有多少人，用 户需要这个数字吗）？一个进度条，需要显示百分比吗？数字对用户是自然能接受的反馈吗？</p>
<p><strong>“自然”可能容易导致玄学，</strong>因此这里想强调的是，“自然”的思维方式一般是需要长期的非常理性的训练才能获得， 而不是突然幻想自己获得了一种使用“自然原则”的能力。记得知乎上有个问题问“乔布斯为什么能凭直觉知道该怎么做”。我认为没有任何人有天生的可重复的直 觉来立即成为一个领域的专业人员。比如，对于复杂事物，如何“抽象”为一个简单模型，是需要大量案例锻炼的。但是，如果经过一万小时的有意识的朝某个方向 的训练（比如对“自然”的反复思考和实际工作练习），并且是极为理性的思维和实践训练，是可以获得一些直觉的。大量的理性训练有助于形成一种对同类事物的 识别模式，这种模式形成直觉。比如大部分中国人其实是没有经受过“简单是美”的训练，表现在现实中，很多人其实是很难接受一套极简主义的装修风格的居室 的。只有当对“极简”有反复体验和思考，才能将“简单是美”变成骨子里的审美观，并体现在设计中。</p>
<p>简单和自然是什么关系？简单为什么就美了？留给你去想。</p>
<p><strong>张小龙发表本篇博文后，业界产品经理对此纷纷发表了自己对用户体验的解读。</strong></p>
<p><strong>有道高级技术总监 </strong><a href="http://www.zhihu.com/people/daviddengcn" target="_blank"><strong>邓毅</strong></a><strong>：</strong></p>
<p>我觉得用户体验主要指用户在使用产品的时候的流畅程度与最后对于产品的总体感觉。大致有4个层次的状态，从差到好：</p>
<ol>
<li>用户被困住：希望完成某个需求，花了很大的代价和耐心还是没有成功，只能处于抓狂的状态</li>
<li>使用不舒服：希望完成某个需求，必须花一些功夫去琢磨和尝试（甚至是乱世），才能够找到最终的使用办法</li>
<li>使用流畅：希望完成某个需求的时候，非常自然的就找到并且按照软件的设计功能进行下去，最终达到自己的目的</li>
<li>超出预期：用户在使用过程中，很自然的发现，软件有一种超出自己想象的方式完成自己的需求，或者所得到的结果比自己想象的好很多</li>
</ol>
<p>我认为，3是一个基本的上线要求；做到4的产品才真正在用户体验上有竞争力；做到2还能继续存在的产品一定有另一些核心功能满足用户的痛点；状态为1的产品应该已经死掉了。</p>
<p><strong>网易杭州研究院设计经理 </strong><a href="http://www.zhihu.com/people/azero" target="_blank"><strong>阿智</strong></a><strong>：</strong></p>
<p>用户体验就是指用户在使用产品或服务时，所产生的主观感受。比如Allen Zhang举的几个例子。他在使用这些产品或服务时，给他的感受是好的，自然的。</p>
<p>不过，以“自然”来评价用户体验，难免有点狭隘。评价用户体验，我想是分不同梯度的：有用、能用、好用，到爱用，直至建立品牌信任。</p>
<p>如何评价？还是要回到用户身上，真正的用户，而不是你自己。量化嘛，是有些方法可以做的。</p>
<p>一句话描述用户体验评价方法的核心：在不同时期使用不同的评价标准。比如在产品初期，组织并实现对目标用户有用的功能/服务就是最基本的体验。如果这点都做不到，后面都是白搭。</p>
<p>我并不赞同大家仅是以设计的角度去理解、评价用户体验。一本《Don&#8217;t make me think》让很多人都认为不让用户思考的设计，体验就是好的。但事实不一定都这样，尤其是放在用户体验这个话题。所以，Allen Zhang的回答我并不认为是这个问题的最佳答案。</p>
<p><a href="http://www.zhihu.com/people/benjaminz" target="_blank"><strong>Benjamin</strong></a><strong>：</strong></p>
<p>用快捷直观的方式，让用户以低学习成本、无挫折感地达到预期操作的目的。这就是最好的用户体验。</p>
<p>作为设计师，不能只是迎合用户需求，而应该引导用户需求。用户既有使用习惯，是科技进步的最大阻力，因为既有习惯或用户喜欢的方式，不一定是最佳方式。要想获得突破与创新，就必须研究如何去引导用户需求，让用户心甘情愿地改变使用习惯。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.chinacpu.com/2012/05/%e8%85%be%e8%ae%af%e5%89%af%e6%80%bb%e8%a3%81%e5%bc%a0%e5%b0%8f%e9%be%99%e8%b0%88%e7%94%a8%e6%88%b7%e4%bd%93%e9%aa%8c/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>HTML5+CSS3+jQuery制作视频播放器完全指南</title>
		<link>http://www.chinacpu.com/2012/05/html5css3jquery%e5%88%b6%e4%bd%9c%e8%a7%86%e9%a2%91%e6%92%ad%e6%94%be%e5%99%a8%e5%ae%8c%e5%85%a8%e6%8c%87%e5%8d%97/</link>
		<comments>http://www.chinacpu.com/2012/05/html5css3jquery%e5%88%b6%e4%bd%9c%e8%a7%86%e9%a2%91%e6%92%ad%e6%94%be%e5%99%a8%e5%ae%8c%e5%85%a8%e6%8c%87%e5%8d%97/#comments</comments>
		<pubDate>Sat, 12 May 2012 02:41:12 +0000</pubDate>
		<dc:creator>虚网人</dc:creator>
				<category><![CDATA[脚本程序]]></category>

		<guid isPermaLink="false">http://www.chinacpu.com/?p=1014</guid>
		<description><![CDATA[<br/>播放器最终效果预览图 导读：毫无疑问HTML5已经是大势所趋，知名视频网站YouTube在两年前就开始推广HTML5播放器来代替Flash。虽然 国内还没有完全普及HTML5浏览器，但在各大本土浏览器厂商的努力下，支持HTML5的浏览器在中国浏览器市场的占有率也在不断增长中。本教程将会手把 手地教你制作一个基于HTML5&#38; CSS3&#38; JavaScript 技术的视频播放器。 1.下载MediaElement.js 首先下载MediaElement.js脚 本文件，这是一个开源的HTML5音、视频插件，解压后你会得到3个文件—— “flashmediaelement.swf”、 “mediaelement-and-player.min.js”和 “silverlightmediaelement.xap” ，分别是使用Flash、 JavaScript和 SilverLight实现视频播放，并且新建一个”js”文件夹并把它们放进去（当然本例中并不需要 “flashmediaelement.swf” 和 “silverlightmediaelement.xap” 两个文件，可以删去。）。 2.HTML标记 首先需要链接(link)一个jQuery库，这里使用的是Google托管的jQuery库。然后我们在链接”mediaelement-and-player.min.js”文件和CSS文件。 &#60;head&#62;     &#60;title&#62;Video Player&#60;/title&#62;     &#60;script src=”https://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js”&#62;&#60;/script&#62;     &#60;script src=”js/mediaelement-and-player.min.js”&#62;&#60;/script&#62;     &#60;link rel=”stylesheet” href=”css/style.css” media=”screen”&#62; &#60;/head&#62; 当然我们还需要添加一个HTML5 video标记来创建一个视频播放器，再添加一些属性将它初始化。（注：poster是指视频的预览图） &#60;video width=”640&#8243; height=”267&#8243; poster=”media/cars.png”&#62;     &#60;source src=”media/cars.mp4&#8243; type=”video/mp4&#8243;&#62; &#60;/video&#62; 接下来我们再加入下面的代码来创建控制面板，需要添加的控制器或功能有： alwaysShowControls – “true”则设置video控制面板永远显示，”false”则在鼠标移走后隐藏。 videoVolume – “horizontal”设置音量滑动控制器为水平 其它功能：暂停播放、前进播放、声音和全屏 &#60;script type=”text/javascript”&#62;// &#60;![CDATA[ $(document).ready(function() {     $('video').mediaelementplayer({         alwaysShowControls: true,         videoVolume: 'horizontal',         features: ['playpause','progress','volume','fullscreen']     }); }); // ]]&#62;&#60;/script&#62; 更多设置请查阅MediaElement.js的设置文档。 3.播放器基本样式设计 先修改一下样式设置： .mejs-inner, .mejs-inner div, [...]]]></description>
			<content:encoded><![CDATA[<p><br/><img src="http://www.chinacpu.com/wp-content/uploads/auto_save_image/2012/05/024112w4l.jpg" alt="" width="576" height="241" border="0" /></p>
<p>播放器最终效果预览图</p>
<p><strong>导读：毫无疑问HTML5已经是大势所趋，知名视频网站YouTube在两年前就开始推广HTML5播放器来代替Flash。虽然 国内还没有完全普及HTML5浏览器，但在各大本土浏览器厂商的努力下，支持HTML5的浏览器在中国浏览器市场的占有率也在不断增长中。本教程将会手把 手地教你制作一个基于HTML5&amp; CSS3&amp; JavaScript 技术的视频播放器。</strong></p>
<p><strong>1.下载MediaElement.js</strong></p>
<p>首先下载<a href="http://mediaelementjs.com/" target="_blank">MediaElement.js</a>脚 本文件，这是一个开源的HTML5音、视频插件，解压后你会得到3个文件—— “flashmediaelement.swf”、 “mediaelement-and-player.min.js”和 “silverlightmediaelement.xap” ，分别是使用Flash、 JavaScript和 SilverLight实现视频播放，并且新建一个”js”文件夹并把它们放进去（当然本例中并不需要 “flashmediaelement.swf” 和 “silverlightmediaelement.xap” 两个文件，可以删去。）。</p>
<p><strong>2.HTML标记</strong></p>
<p>首先需要链接(link)一个jQuery库，这里使用的是Google托管的jQuery库。然后我们在链接”mediaelement-and-player.min.js”文件和CSS文件。</p>
<ol>
<li>&lt;head&gt;</li>
<li>    &lt;title&gt;Video Player&lt;/title&gt;</li>
<li>    &lt;script src=”https://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js”&gt;&lt;/script&gt;</li>
<li>    &lt;script src=”js/mediaelement-and-player.min.js”&gt;&lt;/script&gt;</li>
<li>    &lt;link rel=”stylesheet” href=”css/style.css” media=”screen”&gt;</li>
<li>&lt;/head&gt;</li>
</ol>
<p>当然我们还需要添加一个HTML5 video标记来创建一个视频播放器，再添加一些属性将它初始化。（注：poster是指视频的预览图）</p>
<ol>
<li>&lt;video width=”640&#8243; height=”267&#8243; poster=”media/cars.png”&gt;</li>
<li>    &lt;source src=”media/cars.mp4&#8243; type=”video/mp4&#8243;&gt;</li>
<li>&lt;/video&gt;</li>
</ol>
<p>接下来我们再加入下面的代码来创建控制面板，需要添加的控制器或功能有：</p>
<ul>
<li>alwaysShowControls – “true”则设置video控制面板永远显示，”false”则在鼠标移走后隐藏。</li>
<li>videoVolume – “horizontal”设置音量滑动控制器为水平</li>
<li>其它功能：暂停播放、前进播放、声音和全屏
<ol>
<li>&lt;script type=”text/javascript”&gt;// &lt;![CDATA[</li>
<li>$(document).ready(function() {</li>
<li>    $('video').mediaelementplayer({</li>
<li>        alwaysShowControls: true,</li>
<li>        videoVolume: 'horizontal',</li>
<li>        features: ['playpause','progress','volume','fullscreen']</li>
<li>    });</li>
<li>});</li>
<li>// ]]&gt;&lt;/script&gt;</li>
</ol>
</li>
</ul>
<p>更多设置请查阅MediaElement.js的设置文档。</p>
<p><strong>3.播放器基本样式设计</strong></p>
<p>先修改一下样式设置：</p>
<ol>
<li>.mejs-inner,</li>
<li>.mejs-inner div,</li>
<li>.mejs-inner a,</li>
<li>.mejs-inner span,</li>
<li>.mejs-inner button,</li>
<li>.mejs-inner img {</li>
<li>    margin: 0;</li>
<li>    padding: 0;</li>
<li>    border: none;</li>
<li>    outline: none;</li>
<li>}</li>
</ol>
<p>再给video container添加样式，下面的代码全部都是用来控制布局的，没有对播放器样式做任何修改。</p>
<ol>
<li>.mejs-container {</li>
<li>    position: relative;</li>
<li>    background: #000000;</li>
<li>}</li>
<li></li>
<li>.mejs-inner {</li>
<li>    position: relative;</li>
<li>    width: inherit;</li>
<li>    height: inherit;</li>
<li>}</li>
<li></li>
<li>.me-plugin { position: absolute; }</li>
<li></li>
<li>.mejs-container-fullscreen .mejs-mediaelement,</li>
<li>.mejs-container-fullscreen video,</li>
<li>.mejs-embed,</li>
<li>.mejs-embed body,</li>
<li>.mejs-mediaelement {</li>
<li>    width: 100%;</li>
<li>    height: 100%;</li>
<li>}</li>
<li></li>
<li>.mejs-embed,</li>
<li>.mejs-embed body {</li>
<li>    margin: 0;</li>
<li>    padding: 0;</li>
<li>    overflow: hidden;</li>
<li>}</li>
<li></li>
<li>.mejs-container-fullscreen {</li>
<li>    position: fixed;</li>
<li>    left: 0;</li>
<li>    top: 0;</li>
<li>    right: 0;</li>
<li>    bottom: 0;</li>
<li>    overflow: hidden;</li>
<li>    z-index: 1000;</li>
<li>}</li>
<li></li>
<li>.mejs-background,</li>
<li>.mejs-mediaelement,</li>
<li>.mejs-poster,</li>
<li>.mejs-overlay {</li>
<li>    position: absolute;</li>
<li>    top: 0;</li>
<li>    left: 0;</li>
<li>}</li>
<li></li>
<li>.mejs-poster img { display: block; }</li>
</ol>
<p><img src="http://www.chinacpu.com/wp-content/uploads/auto_save_image/2012/05/0241132qG.jpg" alt="" width="576" height="242" border="0" /></p>
<p><strong>4.控制面板样式设置</strong></p>
<p>让我们先从添加“播放按钮”开始：</p>
<ol>
<li>.mejs-overlay-play { cursor: pointer; }</li>
<li></li>
<li>.mejs-inner .mejs-overlay-button {</li>
<li>    position: absolute;</li>
<li>    top: 50%;</li>
<li>    left: 50%;</li>
<li>    width: 50px;</li>
<li>    height: 50px;</li>
<li>    margin: -25px 0 0 -25px;</li>
<li>    background: url(../img/play.png) no-repeat;</li>
<li>}</li>
</ol>
<p>接下来再添加视频控制器布局：将它放在视频底部，高度为34px，再添加一个背景颜色，配合RGBA来设置透明度。最后给按钮添加基本样式和图元。</p>
<ol>
<li>.mejs-container .mejs-controls {</li>
<li>    position: absolute;</li>
<li>    width: 100%;</li>
<li>    height: 34px;</li>
<li>    left: 0;</li>
<li>    bottom: 0;</li>
<li>    background: rgb(0,0,0);</li>
<li>    background: rgba(0,0,0, .7);</li>
<li>}</li>
<li></li>
<li>.mejs-controls .mejs-button button {</li>
<li>    display: block;</li>
<li>    cursor: pointer;</li>
<li>    width: 16px;</li>
<li>    height: 16px;</li>
<li>    background: transparent url(../img/controls.png);</li>
<li>}</li>
</ol>
<p><img src="http://www.chinacpu.com/wp-content/uploads/auto_save_image/2012/05/024113yLr.jpg" alt="" width="577" height="268" border="0" /></p>
<p><strong>5.视频控制器</strong></p>
<p>这一步我们要做的只是将控制器居右放置。所以首先我们将所有的按钮放到控制面板上，之后再对它们的宽度、位置和背景图片做详细的调整。</p>
<ol>
<li>.mejs-controls div.mejs-playpause-button {</li>
<li>    position: absolute;</li>
<li>    top: 12px;</li>
<li>    left: 15px;</li>
<li>}</li>
<li></li>
<li>.mejs-controls .mejs-play button,</li>
<li>.mejs-controls .mejs-pause button {</li>
<li>    width: 12px;</li>
<li>    height: 12px;</li>
<li>    background-position: 0 0;</li>
<li>}</li>
<li></li>
<li>.mejs-controls .mejs-pause button { background-position: 0 -12px; }</li>
<li></li>
<li>.mejs-controls div.mejs-volume-button {</li>
<li>    position: absolute;</li>
<li>    top: 12px;</li>
<li>    left: 45px;</li>
<li>}</li>
<li></li>
<li>.mejs-controls .mejs-mute button,</li>
<li>.mejs-controls .mejs-unmute button {</li>
<li>    width: 14px;</li>
<li>    height: 12px;</li>
<li>    background-position: -12px 0;</li>
<li>}</li>
<li></li>
<li>.mejs-controls .mejs-unmute button { background-position: -12px -12px; }</li>
<li></li>
<li>.mejs-controls div.mejs-fullscreen-button {</li>
<li>    position: absolute;</li>
<li>    top: 7px;</li>
<li>    right: 7px;</li>
<li>}</li>
<li></li>
<li>.mejs-controls .mejs-fullscreen-button button,</li>
<li>.mejs-controls .mejs-unfullscreen button {</li>
<li>    width: 27px;</li>
<li>    height: 22px;</li>
<li>    background-position: -26px 0;</li>
<li>}</li>
<li></li>
<li>.mejs-controls .mejs-unfullscreen button { background-position: -26px -22px; }</li>
</ol>
<p><img src="http://www.chinacpu.com/wp-content/uploads/auto_save_image/2012/05/024113mRj.jpg" alt="" width="576" height="240" border="0" /></p>
<p><strong>6.音量滑动控制器</strong></p>
<p>音量滑动控制器的设置也一样，设置好位置和大小，再添加一个圆角效果就可以了。</p>
<ol>
<li>.mejs-controls div.mejs-horizontal-volume-slider {</li>
<li>    position: absolute;</li>
<li>    cursor: pointer;</li>
<li>    top: 15px;</li>
<li>    left: 65px;</li>
<li>}</li>
<li></li>
<li>.mejs-controls .mejs-horizontal-volume-slider .mejs-horizontal-volume-total {</li>
<li>    width: 60px;</li>
<li>    background: #d6d6d6;</li>
<li>}</li>
<li></li>
<li>.mejs-controls .mejs-horizontal-volume-slider .mejs-horizontal-volume-current {</li>
<li>    position: absolute;</li>
<li>    width: 0;</li>
<li>    top: 0;</li>
<li>    left: 0;</li>
<li>}</li>
<li></li>
<li>.mejs-controls .mejs-horizontal-volume-slider .mejs-horizontal-volume-total,</li>
<li>.mejs-controls .mejs-horizontal-volume-slider .mejs-horizontal-volume-current {</li>
<li>    height: 4px;</li>
<li></li>
<li>    -webkit-border-radius: 2px;</li>
<li>    -moz-border-radius: 2px;</li>
<li>    border-radius: 2px;</li>
<li>}</li>
</ol>
<p><img src="http://www.chinacpu.com/wp-content/uploads/auto_save_image/2012/05/024113ZR1.jpg" alt="" width="576" height="242" border="0" /></p>
<p><strong>7.进度条</strong></p>
<p>进度条的设置也同样简单，将它紧贴在控制面板上方就可以了，之后就是设置不同状态（all和loaded状态）的背景颜色。现在将它初始化为零就可以在影片播放时自动改变了。（但是你看不出来。）</p>
<ol>
<li>.mejs-controls div.mejs-time-rail {</li>
<li>    position: absolute;</li>
<li>    width: 100%;</li>
<li>    left: 0;</li>
<li>    top: -10px;</li>
<li>}</li>
<li></li>
<li>.mejs-controls .mejs-time-rail span {</li>
<li>    position: absolute;</li>
<li>    display: block;</li>
<li>    cursor: pointer;</li>
<li>    width: 100%;</li>
<li>    height: 10px;</li>
<li>    top: 0;</li>
<li>    left: 0;</li>
<li>}</li>
<li></li>
<li>.mejs-controls .mejs-time-rail .mejs-time-total {</li>
<li>    background: rgb(152,152,152);</li>
<li>    background: rgba(152,152,152, .5);</li>
<li>}</li>
<li></li>
<li>.mejs-controls .mejs-time-rail .mejs-time-loaded {</li>
<li>    background: rgb(0,0,0);</li>
<li>    background: rgba(0,0,0, .3);</li>
<li>}</li>
<li></li>
<li>.mejs-controls .mejs-time-rail .mejs-time-current { width: 0; }</li>
</ol>
<p><img src="http://www.chinacpu.com/wp-content/uploads/auto_save_image/2012/05/024113LCX.jpg" alt="" width="576" height="241" border="0" /></p>
<p><strong>8.进度条控制器和时间提示框</strong></p>
<p>这一步就该给进度条添加一个进度条控制器和一个时间提示框，同样我们还是调整位置，设置宽度、高度和背景图片，再添加一些排版样式。</p>
<ol>
<li>.mejs-controls .mejs-time-rail .mejs-time-handle {</li>
<li>    position: absolute;</li>
<li>    cursor: pointer;</li>
<li>    width: 16px;</li>
<li>    height: 18px;</li>
<li>    top: -3px;</li>
<li>    background: url(../img/handle.png);</li>
<li>}</li>
<li></li>
<li>.mejs-controls .mejs-time-rail .mejs-time-float {</li>
<li>    position: absolute;</li>
<li>    display: none;</li>
<li>    width: 33px;</li>
<li>    height: 23px;</li>
<li>    top: -26px;</li>
<li>    margin-left: -17px;</li>
<li>    background: url(../img/tooltip.png);</li>
<li>}</li>
<li></li>
<li>.mejs-controls .mejs-time-rail .mejs-time-float-current {</li>
<li>    position: absolute;</li>
<li>    display: block;</li>
<li>    left: 0;</li>
<li>    top: 4px;</li>
<li></li>
<li>    font-family: Helvetica, Arial, sans-serif;</li>
<li>    font-size: 10px;</li>
<li>    font-weight: bold;</li>
<li>    color: #666666;</li>
<li>    text-align: center;</li>
<li>}</li>
<li></li>
<li>.mejs-controls .mejs-time-rail .mejs-time-float-corner { display: none; }</li>
</ol>
<p><img src="http://www.chinacpu.com/wp-content/uploads/auto_save_image/2012/05/024113E5A.jpg" alt="" width="576" height="239" border="0" /></p>
<p><strong>9.绿色的已播放进度条</strong></p>
<p>本教程的最后一步就是在进度条和音量滑动条上添加绿色的已播放进度条和音量显示，这个也很简单。</p>
<ol>
<li>.mejs-controls .mejs-time-rail .mejs-time-current,</li>
<li>.mejs-controls .mejs-horizontal-volume-slider .mejs-horizontal-volume-current {</li>
<li>    background: #82d344;</li>
<li>    background: -webkit-linear-gradient(top, #82d344 0%, #51af34 100%);</li>
<li>    background: -moz-linear-gradient(top, #82d344 0%, #51af34 100%);</li>
<li>    background: -o-linear-gradient(top, #82d344 0%, #51af34 100%);</li>
<li>    background: -ms-linear-gradient(top, #82d344 0%, #51af34 100%);</li>
<li>    background: linear-gradient(top, #82d344 0%, #51af34 100%);</li>
<li>}</li>
</ol>
<p><img src="http://www.chinacpu.com/wp-content/uploads/auto_save_image/2012/05/024112w4l.jpg" alt="" width="576" height="241" border="0" /></p>
<p><strong>总结：</strong>虽然很简单，但这确实是一个很不错的开源（<a href="http://creativecommons.org/licenses/by/3.0/" target="_blank">CC许可证3.0</a>）视频播放器！经过设置还可以支持多种视频格式，所以它不仅仅可以被用来做网络视频播放器，如果你还愿意给它增加一些功能，甚至可以把它可以做成跨平台的本地视频播放器。</p>
<p><strong>Demo下载地址：</strong></p>
<ul>
<li><a href="http://articles.csdn.net/uploads/soft/120510/138_1420091691.zip" target="_blank">CSDN本地下载</a></li>
<li><a href="http://designmodo.com/tweet/videoplayer.php" target="_blank">designmodo.com</a></li>
</ul>
<p>原文链接：<a href="http://designmodo.com/video-player/">designmodo.com</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.chinacpu.com/2012/05/html5css3jquery%e5%88%b6%e4%bd%9c%e8%a7%86%e9%a2%91%e6%92%ad%e6%94%be%e5%99%a8%e5%ae%8c%e5%85%a8%e6%8c%87%e5%8d%97/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Twitter 5.5万个账户信息泄露 黑客不明</title>
		<link>http://www.chinacpu.com/2012/05/twitter-5-5%e4%b8%87%e4%b8%aa%e8%b4%a6%e6%88%b7%e4%bf%a1%e6%81%af%e6%b3%84%e9%9c%b2-%e9%bb%91%e5%ae%a2%e4%b8%8d%e6%98%8e/</link>
		<comments>http://www.chinacpu.com/2012/05/twitter-5-5%e4%b8%87%e4%b8%aa%e8%b4%a6%e6%88%b7%e4%bf%a1%e6%81%af%e6%b3%84%e9%9c%b2-%e9%bb%91%e5%ae%a2%e4%b8%8d%e6%98%8e/#comments</comments>
		<pubDate>Sat, 12 May 2012 02:26:28 +0000</pubDate>
		<dc:creator>虚网人</dc:creator>
				<category><![CDATA[安全报告]]></category>

		<guid isPermaLink="false">http://www.chinacpu.com/?p=1010</guid>
		<description><![CDATA[<br/>目前，Twitter正在审理调查数以千计的用户账户密码和邮箱泄露的原因。 据Twitter发言人Robert Weeks 在邮件中称：“我们目前正在调查，与此同时，我们对受影响账户重新设置密码。建议那些担忧账户外泄的用户重新设置密码，我们的帮助中心将提供详细指导。” 本周一， Twitter用户数据被发布在Airdemon.net网站上，受影响账户达5.5万个以上。目前尚不清楚发布被窃Twitter用户信息的黑客身份及动机。Weeks指出，有大量账户和密码都存有重复现象。 她称：“到目前为止，我们已经从泄露的账号密码列表中发现有超过2万的重复记录，许多垃圾邮件账户已被停用。许多注册账户与密码并非属实，这份名单似乎有些古怪。” 原文链接：cnet.com]]></description>
			<content:encoded><![CDATA[<p><br/><img src="http://www.chinacpu.com/wp-content/uploads/auto_save_image/2012/05/022628x0C.png" alt="" width="367" height="367" border="0" /></p>
<p><span style="font-family: 微软雅黑;">目前，Twitter正在审理调查数以千计的用户账户密码和邮箱泄露的原因。</span></p>
<p><span style="font-family: 微软雅黑;">据Twitter发言人Robert Weeks 在邮件中称：“我们目前正在调查，与此同时，我们对受影响账户重新设置密码。建议那些担忧账户外泄的用户重新设置密码，我们的帮助中心将提供详细指导。”</span></p>
<p>本周一， Twitter<span style="font-family: 微软雅黑;">用户数据被发布在Airdemon.net网站上，受影响账户达5.5万个以上。目前尚不清楚发布被窃Twitter用户信息的黑客身份及动机。Weeks指出，有大量账户和密码都存有重复现象。</span></p>
<p>她称：“到目前为止，我们已经从泄露的账号密码列表中发现有超过2万的重复记录，许多垃圾邮件账户已被停用。许多注册账户与密码并非属实，这份名单似乎有些古怪。”</p>
<p>原文链接：<a href="http://news.cnet.com/8301-1009_3-57430475-83/thousands-of-twitter-passwords-exposed/" target="_blank">cnet.com</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.chinacpu.com/2012/05/twitter-5-5%e4%b8%87%e4%b8%aa%e8%b4%a6%e6%88%b7%e4%bf%a1%e6%81%af%e6%b3%84%e9%9c%b2-%e9%bb%91%e5%ae%a2%e4%b8%8d%e6%98%8e/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>最佳Linux服务器发行版</title>
		<link>http://www.chinacpu.com/2012/05/%e6%9c%80%e4%bd%b3linux%e6%9c%8d%e5%8a%a1%e5%99%a8%e5%8f%91%e8%a1%8c%e7%89%88/</link>
		<comments>http://www.chinacpu.com/2012/05/%e6%9c%80%e4%bd%b3linux%e6%9c%8d%e5%8a%a1%e5%99%a8%e5%8f%91%e8%a1%8c%e7%89%88/#comments</comments>
		<pubDate>Fri, 11 May 2012 14:21:37 +0000</pubDate>
		<dc:creator>虚网人</dc:creator>
				<category><![CDATA[Linux]]></category>

		<guid isPermaLink="false">http://www.chinacpu.com/?p=1007</guid>
		<description><![CDATA[<br/>一款Linux发行版就如同一件衣服一样，适合自己的才是最好的选择。 对大型企业而言，当然首选Red Hat Enterprise Linux（RHEL）。Red Hat有完善的技术支持服务，而且在我们周围，非常容易找到持有Red Hat认证的技术人员。RHEL支持多种硬件，不论是x86服务器、刀片服务器还是大型机，RHEL都能很好地运行。可以这样说，RHEL是企业级 Linux的标准。 也许你觉得RHEL太贵，那么我们也可以选择Oracle Linux或SUSE Linux Enterprise Server (SLES)作为替代。 如果我们有强有力技术团队，并且不想为Linux付费，那么可以使用Fedora或OpenSUSE，Debian也是不错的选择。 Ubuntu是非常流行的桌面版本，Ubuntu Server也是非常好的服务器版本。对于中小公司而言，拥有商业公司支持的Linux版本也许是最佳选择，毕竟商业公司有着丰富的数据中心经验可供借鉴。 如果只是针对一个小型办公环境，要满足文件、打印机共享等基本任务，我相信任何现代Linux都足以胜任。 LAMP一直是构建Web服务器的绝佳组合。如果你想寻找一款Linux，以构建低成本的Web服务，CentOS是一个不错的选择，它是RHEL的社区克隆版本。 提到Linux，我总是听到许多抱怨之声。Linux的确难以维护，但从服务器的角度来说，管理难度肯定要比桌面维护大得多。我们需要专家。 Linux在服务器领域的主要竞争对手是Windows Server 2008 R2。但永远不要忘记一点，Linux可以为我们提供低成本、高并发的网络服务，谷歌、Facebook以及华尔街都以事实证明了这一点。（张志平/编译） 原文链接：What&#8217;s the best Linux server for you?]]></description>
			<content:encoded><![CDATA[<p><br/>一款Linux发行版就如同一件衣服一样，适合自己的才是最好的选择。</p>
<p><img src="http://www.chinacpu.com/wp-content/uploads/auto_save_image/2012/05/142138qxr.jpg" alt="" width="400" height="289" border="0" /></p>
<p>对<strong>大型企业</strong>而言，当然首选Red Hat Enterprise Linux（RHEL）。Red Hat有完善的技术支持服务，而且在我们周围，非常容易找到持有Red Hat认证的技术人员。RHEL支持多种硬件，不论是x86服务器、刀片服务器还是大型机，RHEL都能很好地运行。可以这样说，RHEL是企业级 Linux的标准。</p>
<p>也许你觉得RHEL太贵，那么我们也可以选择Oracle Linux或SUSE Linux Enterprise Server (SLES)作为替代。</p>
<p>如果我们有强有力技术团队，并且不想为Linux付费，那么可以使用Fedora或OpenSUSE，Debian也是不错的选择。</p>
<p>Ubuntu是非常流行的桌面版本，Ubuntu Server也是非常好的服务器版本。对于<strong>中小公司</strong>而言，拥有商业公司支持的Linux版本也许是最佳选择，毕竟商业公司有着丰富的数据中心经验可供借鉴。</p>
<p>如果只是针对一个<strong>小型办公环境</strong>，要满足文件、打印机共享等基本任务，我相信任何现代Linux都足以胜任。</p>
<p>LAMP一直是构建<strong>Web服务器</strong>的绝佳组合。如果你想寻找一款Linux，以构建低成本的Web服务，CentOS是一个不错的选择，它是RHEL的社区克隆版本。</p>
<p>提到Linux，我总是听到许多抱怨之声。Linux的确难以维护，但从服务器的角度来说，管理难度肯定要比桌面维护大得多。我们需要专家。</p>
<p>Linux在服务器领域的主要竞争对手是Windows Server 2008 R2。但永远不要忘记一点，Linux可以为我们提供低成本、高并发的网络服务，谷歌、Facebook以及华尔街都以事实证明了这一点。（张志平/编译）</p>
<p><strong>原文链接：</strong><a href="http://www.itworld.com/data-centerservers/256430/linux-servers-which-distro-you">What&#8217;s the best Linux server for you?</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.chinacpu.com/2012/05/%e6%9c%80%e4%bd%b3linux%e6%9c%8d%e5%8a%a1%e5%99%a8%e5%8f%91%e8%a1%8c%e7%89%88/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>四个新的 HTTP 状态码</title>
		<link>http://www.chinacpu.com/2012/05/%e5%9b%9b%e4%b8%aa%e6%96%b0%e7%9a%84-http-%e7%8a%b6%e6%80%81%e7%a0%81/</link>
		<comments>http://www.chinacpu.com/2012/05/%e5%9b%9b%e4%b8%aa%e6%96%b0%e7%9a%84-http-%e7%8a%b6%e6%80%81%e7%a0%81/#comments</comments>
		<pubDate>Sun, 06 May 2012 01:51:13 +0000</pubDate>
		<dc:creator>虚网人</dc:creator>
				<category><![CDATA[业界资讯]]></category>

		<guid isPermaLink="false">http://www.chinacpu.com/?p=1001</guid>
		<description><![CDATA[<br/>RFC 6585 最近刚刚发布，该文档描述了 4 个新的 HTTP 状态码。 HTTP 协议还在变化？是的，HTTP 协议一直在演变，新的状态码对于开发 REST 服务或者说是基于 HTTP 的服务非常有用，下面我们为你详细介绍这四个新的状态码以及是否应该使用。 428 Precondition Required (要求先决条件) 先决条件是客户端发送 HTTP 请求时，如果想要请求能成功必须满足一些预设的条件。 一个好的例子就是 If-None-Match 头，经常在 GET 请求中使用，如果指定了 If-None-Match ，那么客户端只在响应中的 ETag 改变后才会重新接收回应。 先决条件的另外一个例子就是 If-Match 头，这个一般用在 PUT 请求上用于指示只更新没被改变的资源，这在多个客户端使用 HTTP 服务时用来防止彼此间不会覆盖相同内容。 当服务器端使用 428 Precondition Required 状态码时，表示客户端必须发送上述的请求头才能执行请求，这个方法为服务器提供一种有效的方法来阻止 &#8216;lost update&#8217; 问题。 429 Too Many Requests (太多请求) 当你需要限制客户端请求某个服务数量时，该状态码就很有用，也就是请求速度限制。 在此之前，有一些类似的状态码，例如 &#8217;509 Bandwidth Limit [...]]]></description>
			<content:encoded><![CDATA[<p><br/>
<div id="OSChina_News_28660">
<p><a href="http://tools.ietf.org/html/rfc6585">RFC 6585</a> 最近刚刚发布，该文档描述了 4 个新的 HTTP 状态码。</p>
<p>HTTP 协议还在变化？是的，HTTP 协议一直在演变，新的状态码对于开发 REST 服务或者说是基于 HTTP 的服务非常有用，下面我们为你详细介绍这四个新的状态码以及是否应该使用。</p>
<h3>428 Precondition Required (要求先决条件)</h3>
<p>先决条件是客户端发送 HTTP 请求时，如果想要请求能成功必须满足一些预设的条件。</p>
<p>一个好的例子就是 If-None-Match 头，经常在 GET 请求中使用，如果指定了 If-None-Match ，那么客户端只在响应中的 ETag 改变后才会重新接收回应。</p>
<p>先决条件的另外一个例子就是 If-Match 头，这个一般用在 PUT 请求上用于指示只更新没被改变的资源，这在多个客户端使用 HTTP 服务时用来防止彼此间不会覆盖相同内容。</p>
<p>当服务器端使用 <a href="http://tools.ietf.org/html/rfc6585#section-3">428 Precondition Required</a> 状态码时，表示客户端必须发送上述的请求头才能执行请求，这个方法为服务器提供一种有效的方法来阻止 &#8216;lost update&#8217; 问题。</p>
<h3>429 Too Many Requests (太多请求)</h3>
<p>当你需要限制客户端请求某个服务数量时，该状态码就很有用，也就是请求速度限制。</p>
<p>在此之前，有一些类似的状态码，例如 &#8217;509 Bandwidth Limit Exceeded&#8217;. <a href="https://dev.twitter.com/docs/error-codes-responses">Twitter 使用 420</a> （这不是HTTP定义的状态码）</p>
<p>如果你希望限制客户端对服务的请求数，可使用 429 状态码，同时包含一个 Retry-After 响应头用于告诉客户端多长时间后可以再次请求服务。</p>
<h3>431 Request Header Fields Too Large (请求头字段太大)</h3>
<p>某些情况下，客户端发送 HTTP 请求头会变得很大，那么服务器可发送 <a href="http://tools.ietf.org/html/rfc6585#section-5">431 Request Header Fields Too Large</a> 来指明该问题。</p>
<p>我不太清楚为什么没有 430 状态码，而是直接从 429 跳到 431，我尝试搜索但没有结果。唯一的猜测是 430 Forbidden 跟 403 Forbidden 太像了，为了避免混淆才这么做的，天知道！</p>
<h3>511 Network Authentication Required (要求网络认证)</h3>
<p>对我来说这个状态码很有趣，如果你在开发一个 HTTP 服务器，你不一定需要处理该状态码，但如果你在编写 HTTP 客户端，那这个状态码就非常重要。</p>
<p>如果你频繁使用笔记本和智能手机，你可能会注意到大量的公用 WIFI 服务要求你必须接受一些协议或者必须登录后才能使用。</p>
<p>这是通过拦截HTTP流量，当用户试图访问网络返回一个重定向和登录，这很讨厌，但是实际情况就是这样的。</p>
<p>使用这些“拦截”客户端，会有一些讨厌的副作用。在 RFC 中有提到这两个的例子：</p>
<ul>
<li>如果你在登录WIFI前访问某个网站，网络设备将会拦截首个请求，这些设备往往也有自己的网站图标 ‘favicon.ico&#8217;。登录后您会发现，有一段时间内你访问的网站图标一直是WIFI登录网站的图标。</li>
<li>如果客户端使用HTTP请求来查找文档（可能是JSON），网络将会响应一个登录页，这样你的客户端就会解析错误并导致客户端运行异常，在现实中这种问题非常常见。</li>
</ul>
<p>因此 511 状态码的提出就是为了解决这个问题。</p>
<p>如果你正在编写 HTTP 的客户端，你最好还是检查 511 状态码以确认是否需要认证后才能访问。</p>
<p><a href="http://www.rooftopsolutions.nl/blog/new-http-status-codes" target="_blank">英文原文</a>，<a href="http://www.oschina.net/">OSCHINA</a>原创翻译</p>
</div>
]]></content:encoded>
			<wfw:commentRss>http://www.chinacpu.com/2012/05/%e5%9b%9b%e4%b8%aa%e6%96%b0%e7%9a%84-http-%e7%8a%b6%e6%80%81%e7%a0%81/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>19 个代码片段让 WordPress 更易于管理</title>
		<link>http://www.chinacpu.com/2012/05/%e7%ba%a2%e8%96%af-19-%e4%b8%aa%e4%bb%a3%e7%a0%81%e7%89%87%e6%ae%b5%e8%ae%a9-wordpress-%e6%9b%b4%e6%98%93%e4%ba%8e%e7%ae%a1%e7%90%86/</link>
		<comments>http://www.chinacpu.com/2012/05/%e7%ba%a2%e8%96%af-19-%e4%b8%aa%e4%bb%a3%e7%a0%81%e7%89%87%e6%ae%b5%e8%ae%a9-wordpress-%e6%9b%b4%e6%98%93%e4%ba%8e%e7%ae%a1%e7%90%86/#comments</comments>
		<pubDate>Sun, 06 May 2012 01:50:16 +0000</pubDate>
		<dc:creator>虚网人</dc:creator>
				<category><![CDATA[脚本程序]]></category>

		<guid isPermaLink="false">http://www.chinacpu.com/?p=998</guid>
		<description><![CDATA[<br/>1. 根据用户名来限制管理菜单项目的访问 如果你希望你的管理菜单的某些项对某些用户可见，那么这个代码就会帮到你。只需替换 functions.php 中的 clients-username 为如下代码即可： 01 function remove_menus() 02 { 03     global $menu; 04     global $current_user; 05     get_currentuserinfo(); 06 07     if($current_user-&#62;user_login == 'clients-username') 08     { 09         $restricted = array(__('Posts'), 10                             __('Media'), 11                             __('Links'), 12                             __('Pages'), 13                             __('Comments'), 14                             __('Appearance'), 15                             __('Plugins'), 16                             __('Users'), 17                             __('Tools'), 18                             __('Settings') 19         ); 20         end ($menu); 21 [...]]]></description>
			<content:encoded><![CDATA[<p><br/><a href="http://www.chinacpu.com/wp-content/uploads/auto_save_image/2012/05/015017m8K.jpg" target="_blank"><img src="http://www.chinacpu.com/wp-content/uploads/auto_save_image/2012/05/015017m8K.jpg" alt="" /></a></p>
<h2>1. 根据用户名来限制管理菜单项目的访问</h2>
<p>如果你希望你的管理菜单的某些项对某些用户可见，那么这个代码就会帮到你。只需替换 functions.php 中的 clients-username 为如下代码即可：</p>
<div id="highlighter_195473">
<div>
<div>
<table>
<tbody>
<tr>
<td><code>01</code></td>
<td><code>function</code> <code>remove_menus()</code></td>
</tr>
</tbody>
</table>
</div>
<div>
<table>
<tbody>
<tr>
<td><code>02</code></td>
<td><code>{</code></td>
</tr>
</tbody>
</table>
</div>
<div>
<table>
<tbody>
<tr>
<td><code>03</code></td>
<td><code>    </code><code>global</code> <code>$menu</code><code>;</code></td>
</tr>
</tbody>
</table>
</div>
<div>
<table>
<tbody>
<tr>
<td><code>04</code></td>
<td><code>    </code><code>global</code> <code>$current_user</code><code>;</code></td>
</tr>
</tbody>
</table>
</div>
<div>
<table>
<tbody>
<tr>
<td><code>05</code></td>
<td><code>    </code><code>get_currentuserinfo();</code></td>
</tr>
</tbody>
</table>
</div>
<div>
<table>
<tbody>
<tr>
<td><code>06</code></td>
<td></td>
</tr>
</tbody>
</table>
</div>
<div>
<table>
<tbody>
<tr>
<td><code>07</code></td>
<td><code>    </code><code>if</code><code>(</code><code>$current_user</code><code>-&gt;user_login == </code><code>'clients-username'</code><code>)</code></td>
</tr>
</tbody>
</table>
</div>
<div>
<table>
<tbody>
<tr>
<td><code>08</code></td>
<td><code>    </code><code>{</code></td>
</tr>
</tbody>
</table>
</div>
<div>
<table>
<tbody>
<tr>
<td><code>09</code></td>
<td><code>        </code><code>$restricted</code> <code>= </code><code>array</code><code>(__(</code><code>'Posts'</code><code>),</code></td>
</tr>
</tbody>
</table>
</div>
<div>
<table>
<tbody>
<tr>
<td><code>10</code></td>
<td><code>                            </code><code>__(</code><code>'Media'</code><code>),</code></td>
</tr>
</tbody>
</table>
</div>
<div>
<table>
<tbody>
<tr>
<td><code>11</code></td>
<td><code>                            </code><code>__(</code><code>'Links'</code><code>),</code></td>
</tr>
</tbody>
</table>
</div>
<div>
<table>
<tbody>
<tr>
<td><code>12</code></td>
<td><code>                            </code><code>__(</code><code>'Pages'</code><code>),</code></td>
</tr>
</tbody>
</table>
</div>
<div>
<table>
<tbody>
<tr>
<td><code>13</code></td>
<td><code>                            </code><code>__(</code><code>'Comments'</code><code>),</code></td>
</tr>
</tbody>
</table>
</div>
<div>
<table>
<tbody>
<tr>
<td><code>14</code></td>
<td><code>                            </code><code>__(</code><code>'Appearance'</code><code>),</code></td>
</tr>
</tbody>
</table>
</div>
<div>
<table>
<tbody>
<tr>
<td><code>15</code></td>
<td><code>                            </code><code>__(</code><code>'Plugins'</code><code>),</code></td>
</tr>
</tbody>
</table>
</div>
<div>
<table>
<tbody>
<tr>
<td><code>16</code></td>
<td><code>                            </code><code>__(</code><code>'Users'</code><code>),</code></td>
</tr>
</tbody>
</table>
</div>
<div>
<table>
<tbody>
<tr>
<td><code>17</code></td>
<td><code>                            </code><code>__(</code><code>'Tools'</code><code>),</code></td>
</tr>
</tbody>
</table>
</div>
<div>
<table>
<tbody>
<tr>
<td><code>18</code></td>
<td><code>                            </code><code>__(</code><code>'Settings'</code><code>)</code></td>
</tr>
</tbody>
</table>
</div>
<div>
<table>
<tbody>
<tr>
<td><code>19</code></td>
<td><code>        </code><code>);</code></td>
</tr>
</tbody>
</table>
</div>
<div>
<table>
<tbody>
<tr>
<td><code>20</code></td>
<td><code>        </code><code>end</code> <code>(</code><code>$menu</code><code>);</code></td>
</tr>
</tbody>
</table>
</div>
<div>
<table>
<tbody>
<tr>
<td><code>21</code></td>
<td><code>        </code><code>while</code> <code>(prev(</code><code>$menu</code><code>)){</code></td>
</tr>
</tbody>
</table>
</div>
<div>
<table>
<tbody>
<tr>
<td><code>22</code></td>
<td><code>            </code><code>$value</code> <code>= </code><code>explode</code><code>(</code><code>' '</code><code>,</code><code>$menu</code><code>[key(</code><code>$menu</code><code>)][0]);</code></td>
</tr>
</tbody>
</table>
</div>
<div>
<table>
<tbody>
<tr>
<td><code>23</code></td>
<td><code>            </code><code>if</code><code>(in_array(</code><code>$value</code><code>[0] != NULL?</code><code>$value</code><code>[0]:</code><code>""</code> <code>, </code><code>$restricted</code><code>)){unset(</code><code>$menu</code><code>[key(</code><code>$menu</code><code>)]);}</code></td>
</tr>
</tbody>
</table>
</div>
<div>
<table>
<tbody>
<tr>
<td><code>24</code></td>
<td><code>        </code><code>}</code><code>// end while</code></td>
</tr>
</tbody>
</table>
</div>
<div>
<table>
<tbody>
<tr>
<td><code>25</code></td>
<td></td>
</tr>
</tbody>
</table>
</div>
<div>
<table>
<tbody>
<tr>
<td><code>26</code></td>
<td><code>    </code><code>}</code><code>// end if</code></td>
</tr>
</tbody>
</table>
</div>
<div>
<table>
<tbody>
<tr>
<td><code>27</code></td>
<td><code>}</code></td>
</tr>
</tbody>
</table>
</div>
<div>
<table>
<tbody>
<tr>
<td><code>28</code></td>
<td><code>add_action(</code><code>'admin_menu'</code><code>, </code><code>'remove_menus'</code><code>);</code></td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
<p><a href="http://wordpress.stackexchange.com/questions/1567/best-collection-of-code-for-your-functions-php-file" rel="nofollow" target="_blank"> Source </a></p>
<p>&nbsp;</p>
<h2>2. 从面板中删除默认的Widget部件</h2>
<div id="highlighter_757531">
<div>
<div>
<table>
<tbody>
<tr>
<td><code>01</code></td>
<td><code>// Create the function to use in the action hook</code></td>
</tr>
</tbody>
</table>
</div>
<div>
<table>
<tbody>
<tr>
<td><code>02</code></td>
<td><code>function</code> <code>example_remove_dashboard_widgets() {</code></td>
</tr>
</tbody>
</table>
</div>
<div>
<table>
<tbody>
<tr>
<td><code>03</code></td>
<td><code>    </code><code>// Globalize the metaboxes array, this holds all the widgets for wp-admin</code></td>
</tr>
</tbody>
</table>
</div>
<div>
<table>
<tbody>
<tr>
<td><code>04</code></td>
<td></td>
</tr>
</tbody>
</table>
</div>
<div>
<table>
<tbody>
<tr>
<td><code>05</code></td>
<td><code>    </code><code>global</code> <code>$wp_meta_boxes</code><code>;</code></td>
</tr>
</tbody>
</table>
</div>
<div>
<table>
<tbody>
<tr>
<td><code>06</code></td>
<td></td>
</tr>
</tbody>
</table>
</div>
<div>
<table>
<tbody>
<tr>
<td><code>07</code></td>
<td><code>    </code><code>// Remove the incomming links widget</code></td>
</tr>
</tbody>
</table>
</div>
<div>
<table>
<tbody>
<tr>
<td><code>08</code></td>
<td><code>    </code><code>unset(</code><code>$wp_meta_boxes</code><code>[</code><code>'dashboard'</code><code>][</code><code>'normal'</code><code>][</code><code>'core'</code><code>][</code><code>'dashboard_incoming_links'</code><code>]);   </code></td>
</tr>
</tbody>
</table>
</div>
<div>
<table>
<tbody>
<tr>
<td><code>09</code></td>
<td></td>
</tr>
</tbody>
</table>
</div>
<div>
<table>
<tbody>
<tr>
<td><code>10</code></td>
<td><code>    </code><code>// Remove right now</code></td>
</tr>
</tbody>
</table>
</div>
<div>
<table>
<tbody>
<tr>
<td><code>11</code></td>
<td><code>    </code><code>unset(</code><code>$wp_meta_boxes</code><code>[</code><code>'dashboard'</code><code>][</code><code>'normal'</code><code>][</code><code>'core'</code><code>][</code><code>'dashboard_right_now'</code><code>]);</code></td>
</tr>
</tbody>
</table>
</div>
<div>
<table>
<tbody>
<tr>
<td><code>12</code></td>
<td><code>    </code><code>unset(</code><code>$wp_meta_boxes</code><code>[</code><code>'dashboard'</code><code>][</code><code>'side'</code><code>][</code><code>'core'</code><code>][</code><code>'dashboard_primary'</code><code>]);</code></td>
</tr>
</tbody>
</table>
</div>
<div>
<table>
<tbody>
<tr>
<td><code>13</code></td>
<td><code>    </code><code>unset(</code><code>$wp_meta_boxes</code><code>[</code><code>'dashboard'</code><code>][</code><code>'side'</code><code>][</code><code>'core'</code><code>][</code><code>'dashboard_secondary'</code><code>]);</code></td>
</tr>
</tbody>
</table>
</div>
<div>
<table>
<tbody>
<tr>
<td><code>14</code></td>
<td><code>}</code></td>
</tr>
</tbody>
</table>
</div>
<div>
<table>
<tbody>
<tr>
<td><code>15</code></td>
<td></td>
</tr>
</tbody>
</table>
</div>
<div>
<table>
<tbody>
<tr>
<td><code>16</code></td>
<td><code>// Hoook into the 'wp_dashboard_setup' action to register our function</code></td>
</tr>
</tbody>
</table>
</div>
<div>
<table>
<tbody>
<tr>
<td><code>17</code></td>
<td><code>add_action(</code><code>'wp_dashboard_setup'</code><code>, </code><code>'example_remove_dashboard_widgets'</code> <code>);</code></td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
<p><a href="http://www.oschina.net/question" rel="nofollow" target="_blank"> Source </a></p>
<p>&nbsp;</p>
<h2>3. 在 WP Admin 中显示紧急信息</h2>
<p>该代码将任何登录的用户显示定制的消息</p>
<div id="highlighter_818813">
<div>
<div>
<table>
<tbody>
<tr>
<td><code>01</code></td>
<td><code>/**</code></td>
</tr>
</tbody>
</table>
</div>
<div>
<table>
<tbody>
<tr>
<td><code>02</code></td>
<td><code> </code><code>* Generic function to show a message to the user using WP's</code></td>
</tr>
</tbody>
</table>
</div>
<div>
<table>
<tbody>
<tr>
<td><code>03</code></td>
<td><code> </code><code>* standard CSS classes to make use of the already-defined</code></td>
</tr>
</tbody>
</table>
</div>
<div>
<table>
<tbody>
<tr>
<td><code>04</code></td>
<td><code> </code><code>* message colour scheme.</code></td>
</tr>
</tbody>
</table>
</div>
<div>
<table>
<tbody>
<tr>
<td><code>05</code></td>
<td><code> </code><code>*</code></td>
</tr>
</tbody>
</table>
</div>
<div>
<table>
<tbody>
<tr>
<td><code>06</code></td>
<td><code> </code><code>* @param $message The message you want to tell the user.</code></td>
</tr>
</tbody>
</table>
</div>
<div>
<table>
<tbody>
<tr>
<td><code>07</code></td>
<td><code> </code><code>* @param $errormsg If true, the message is an error, so use</code></td>
</tr>
</tbody>
</table>
</div>
<div>
<table>
<tbody>
<tr>
<td><code>08</code></td>
<td><code> </code><code>* the red message style. If false, the message is a status</code></td>
</tr>
</tbody>
</table>
</div>
<div>
<table>
<tbody>
<tr>
<td><code>09</code></td>
<td><code>  </code><code>* message, so use the yellow information message style.</code></td>
</tr>
</tbody>
</table>
</div>
<div>
<table>
<tbody>
<tr>
<td><code>10</code></td>
<td><code> </code><code>*/</code></td>
</tr>
</tbody>
</table>
</div>
<div>
<table>
<tbody>
<tr>
<td><code>11</code></td>
<td><code>function</code> <code>showMessage(</code><code>$message</code><code>, </code><code>$errormsg</code> <code>= false)</code></td>
</tr>
</tbody>
</table>
</div>
<div>
<table>
<tbody>
<tr>
<td><code>12</code></td>
<td><code>{</code></td>
</tr>
</tbody>
</table>
</div>
<div>
<table>
<tbody>
<tr>
<td><code>13</code></td>
<td><code>    </code><code>if</code> <code>(</code><code>$errormsg</code><code>) {</code></td>
</tr>
</tbody>
</table>
</div>
<div>
<table>
<tbody>
<tr>
<td><code>14</code></td>
<td><code>        </code><code>echo</code> <code>'&lt;div id="message"&gt;'</code><code>;</code></td>
</tr>
</tbody>
</table>
</div>
<div>
<table>
<tbody>
<tr>
<td><code>15</code></td>
<td><code>    </code><code>}</code></td>
</tr>
</tbody>
</table>
</div>
<div>
<table>
<tbody>
<tr>
<td><code>16</code></td>
<td><code>    </code><code>else</code> <code>{</code></td>
</tr>
</tbody>
</table>
</div>
<div>
<table>
<tbody>
<tr>
<td><code>17</code></td>
<td><code>        </code><code>echo</code> <code>'&lt;div id="message"&gt;'</code><code>;</code></td>
</tr>
</tbody>
</table>
</div>
<div>
<table>
<tbody>
<tr>
<td><code>18</code></td>
<td><code>    </code><code>}</code></td>
</tr>
</tbody>
</table>
</div>
<div>
<table>
<tbody>
<tr>
<td><code>19</code></td>
<td></td>
</tr>
</tbody>
</table>
</div>
<div>
<table>
<tbody>
<tr>
<td><code>20</code></td>
<td><code>    </code><code>echo</code> <code>"&lt;p&gt;&lt;strong&gt;$message&lt;/strong&gt;&lt;/p&gt;&lt;/div&gt;"</code><code>;</code></td>
</tr>
</tbody>
</table>
</div>
<div>
<table>
<tbody>
<tr>
<td><code>21</code></td>
<td><code>}</code></td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
<p>然后，为管理提醒函数增加钩子用来显示定制消息：</p>
<div id="highlighter_601374">
<div>
<div>
<table>
<tbody>
<tr>
<td><code>01</code></td>
<td><code>/**</code></td>
</tr>
</tbody>
</table>
</div>
<div>
<table>
<tbody>
<tr>
<td><code>02</code></td>
<td><code> </code><code>* Just show our message (with possible checking if we only want</code></td>
</tr>
</tbody>
</table>
</div>
<div>
<table>
<tbody>
<tr>
<td><code>03</code></td>
<td><code> </code><code>* to show message to certain users.</code></td>
</tr>
</tbody>
</table>
</div>
<div>
<table>
<tbody>
<tr>
<td><code>04</code></td>
<td><code> </code><code>*/</code></td>
</tr>
</tbody>
</table>
</div>
<div>
<table>
<tbody>
<tr>
<td><code>05</code></td>
<td><code>function</code> <code>showAdminMessages()</code></td>
</tr>
</tbody>
</table>
</div>
<div>
<table>
<tbody>
<tr>
<td><code>06</code></td>
<td><code>{</code></td>
</tr>
</tbody>
</table>
</div>
<div>
<table>
<tbody>
<tr>
<td><code>07</code></td>
<td><code>    </code><code>// Shows as an error message. You could add a link to the right page if you wanted.</code></td>
</tr>
</tbody>
</table>
</div>
<div>
<table>
<tbody>
<tr>
<td><code>08</code></td>
<td><code>    </code><code>showMessage(</code><code>"You need to upgrade your database as soon as possible..."</code><code>, true);</code></td>
</tr>
</tbody>
</table>
</div>
<div>
<table>
<tbody>
<tr>
<td><code>09</code></td>
<td></td>
</tr>
</tbody>
</table>
</div>
<div>
<table>
<tbody>
<tr>
<td><code>10</code></td>
<td><code>    </code><code>// Only show to admins</code></td>
</tr>
</tbody>
</table>
</div>
<div>
<table>
<tbody>
<tr>
<td><code>11</code></td>
<td><code>    </code><code>if</code> <code>(user_can(</code><code>'manage_options'</code><code>) {</code></td>
</tr>
</tbody>
</table>
</div>
<div>
<table>
<tbody>
<tr>
<td><code>12</code></td>
<td><code>       </code><code>showMessage(</code><code>"Hello admins!"</code><code>);</code></td>
</tr>
</tbody>
</table>
</div>
<div>
<table>
<tbody>
<tr>
<td><code>13</code></td>
<td><code>    </code><code>}</code></td>
</tr>
</tbody>
</table>
</div>
<div>
<table>
<tbody>
<tr>
<td><code>14</code></td>
<td><code>}</code></td>
</tr>
</tbody>
</table>
</div>
<div>
<table>
<tbody>
<tr>
<td><code>15</code></td>
<td></td>
</tr>
</tbody>
</table>
</div>
<div>
<table>
<tbody>
<tr>
<td><code>16</code></td>
<td><code>/**</code></td>
</tr>
</tbody>
</table>
</div>
<div>
<table>
<tbody>
<tr>
<td><code>17</code></td>
<td><code>  </code><code>* Call showAdminMessages() when showing other admin</code></td>
</tr>
</tbody>
</table>
</div>
<div>
<table>
<tbody>
<tr>
<td><code>18</code></td>
<td><code>  </code><code>* messages. The message only gets shown in the admin</code></td>
</tr>
</tbody>
</table>
</div>
<div>
<table>
<tbody>
<tr>
<td><code>19</code></td>
<td><code>  </code><code>* area, but not on the frontend of your WordPress site.</code></td>
</tr>
</tbody>
</table>
</div>
<div>
<table>
<tbody>
<tr>
<td><code>20</code></td>
<td><code>  </code><code>*/</code></td>
</tr>
</tbody>
</table>
</div>
<div>
<table>
<tbody>
<tr>
<td><code>21</code></td>
<td><code>add_action(</code><code>'admin_notices'</code><code>, </code><code>'showAdminMessages'</code><code>);</code></td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
<p><a href="http://www.wprecipes.com/how-to-show-an-urgent-message-in-the-wordpress-admin-area" rel="nofollow" target="_blank"> Source </a></p>
<p>&nbsp;</p>
<h2>4. 隐藏 WordPress 更新提醒</h2>
<div id="highlighter_898294">
<div>
<div>
<table>
<tbody>
<tr>
<td><code>1</code></td>
<td><code>add_action(</code><code>'admin_menu'</code><code>,</code><code>'wphidenag'</code><code>);</code></td>
</tr>
</tbody>
</table>
</div>
<div>
<table>
<tbody>
<tr>
<td><code>2</code></td>
<td><code>function</code> <code>wphidenag() {</code></td>
</tr>
</tbody>
</table>
</div>
<div>
<table>
<tbody>
<tr>
<td><code>3</code></td>
<td><code>remove_action( </code><code>'admin_notices'</code><code>, </code><code>'update_nag'</code><code>, 3 );</code></td>
</tr>
</tbody>
</table>
</div>
<div>
<table>
<tbody>
<tr>
<td><code>4</code></td>
<td><code>}</code></td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
<p><a href="http://www.wpbeginner.com/wp-tutorials/how-to-hide-the-wordpress-upgrade-message-in-the-dashboard/" rel="nofollow" target="_blank"> Source </a></p>
<p>&nbsp;</p>
<h2>5. 从文章、页面编辑器中移除 Meta-Boxes</h2>
<div id="highlighter_612326">
<div>
<div>
<table>
<tbody>
<tr>
<td><code>01</code></td>
<td><code>function</code> <code>remove_extra_meta_boxes() {</code></td>
</tr>
</tbody>
</table>
</div>
<div>
<table>
<tbody>
<tr>
<td><code>02</code></td>
<td><code>remove_meta_box( </code><code>'postcustom'</code> <code>, </code><code>'post'</code> <code>, </code><code>'normal'</code> <code>); </code><code>// custom fields for posts</code></td>
</tr>
</tbody>
</table>
</div>
<div>
<table>
<tbody>
<tr>
<td><code>03</code></td>
<td><code>remove_meta_box( </code><code>'postcustom'</code> <code>, </code><code>'page'</code> <code>, </code><code>'normal'</code> <code>); </code><code>// custom fields for pages</code></td>
</tr>
</tbody>
</table>
</div>
<div>
<table>
<tbody>
<tr>
<td><code>04</code></td>
<td><code>remove_meta_box( </code><code>'postexcerpt'</code> <code>, </code><code>'post'</code> <code>, </code><code>'normal'</code> <code>); </code><code>// post excerpts</code></td>
</tr>
</tbody>
</table>
</div>
<div>
<table>
<tbody>
<tr>
<td><code>05</code></td>
<td><code>remove_meta_box( </code><code>'postexcerpt'</code> <code>, </code><code>'page'</code> <code>, </code><code>'normal'</code> <code>); </code><code>// page excerpts</code></td>
</tr>
</tbody>
</table>
</div>
<div>
<table>
<tbody>
<tr>
<td><code>06</code></td>
<td><code>remove_meta_box( </code><code>'commentsdiv'</code> <code>, </code><code>'post'</code> <code>, </code><code>'normal'</code> <code>); </code><code>// recent comments for posts</code></td>
</tr>
</tbody>
</table>
</div>
<div>
<table>
<tbody>
<tr>
<td><code>07</code></td>
<td><code>remove_meta_box( </code><code>'commentsdiv'</code> <code>, </code><code>'page'</code> <code>, </code><code>'normal'</code> <code>); </code><code>// recent comments for pages</code></td>
</tr>
</tbody>
</table>
</div>
<div>
<table>
<tbody>
<tr>
<td><code>08</code></td>
<td><code>remove_meta_box( </code><code>'tagsdiv-post_tag'</code> <code>, </code><code>'post'</code> <code>, </code><code>'side'</code> <code>); </code><code>// post tags</code></td>
</tr>
</tbody>
</table>
</div>
<div>
<table>
<tbody>
<tr>
<td><code>09</code></td>
<td><code>remove_meta_box( </code><code>'tagsdiv-post_tag'</code> <code>, </code><code>'page'</code> <code>, </code><code>'side'</code> <code>); </code><code>// page tags</code></td>
</tr>
</tbody>
</table>
</div>
<div>
<table>
<tbody>
<tr>
<td><code>10</code></td>
<td><code>remove_meta_box( </code><code>'trackbacksdiv'</code> <code>, </code><code>'post'</code> <code>, </code><code>'normal'</code> <code>); </code><code>// post trackbacks</code></td>
</tr>
</tbody>
</table>
</div>
<div>
<table>
<tbody>
<tr>
<td><code>11</code></td>
<td><code>remove_meta_box( </code><code>'trackbacksdiv'</code> <code>, </code><code>'page'</code> <code>, </code><code>'normal'</code> <code>); </code><code>// page trackbacks</code></td>
</tr>
</tbody>
</table>
</div>
<div>
<table>
<tbody>
<tr>
<td><code>12</code></td>
<td><code>remove_meta_box( </code><code>'commentstatusdiv'</code> <code>, </code><code>'post'</code> <code>, </code><code>'normal'</code> <code>); </code><code>// allow comments for posts</code></td>
</tr>
</tbody>
</table>
</div>
<div>
<table>
<tbody>
<tr>
<td><code>13</code></td>
<td><code>remove_meta_box( </code><code>'commentstatusdiv'</code> <code>, </code><code>'page'</code> <code>, </code><code>'normal'</code> <code>); </code><code>// allow comments for pages</code></td>
</tr>
</tbody>
</table>
</div>
<div>
<table>
<tbody>
<tr>
<td><code>14</code></td>
<td><code>remove_meta_box(</code><code>'slugdiv'</code><code>,</code><code>'post'</code><code>,</code><code>'normal'</code><code>); </code><code>// post slug</code></td>
</tr>
</tbody>
</table>
</div>
<div>
<table>
<tbody>
<tr>
<td><code>15</code></td>
<td><code>remove_meta_box(</code><code>'slugdiv'</code><code>,</code><code>'page'</code><code>,</code><code>'normal'</code><code>); </code><code>// page slug</code></td>
</tr>
</tbody>
</table>
</div>
<div>
<table>
<tbody>
<tr>
<td><code>16</code></td>
<td><code>remove_meta_box(</code><code>'pageparentdiv'</code><code>,</code><code>'page'</code><code>,</code><code>'side'</code><code>); </code><code>// Page Parent</code></td>
</tr>
</tbody>
</table>
</div>
<div>
<table>
<tbody>
<tr>
<td><code>17</code></td>
<td><code>}</code></td>
</tr>
</tbody>
</table>
</div>
<div>
<table>
<tbody>
<tr>
<td><code>18</code></td>
<td><code>add_action( </code><code>'admin_menu'</code> <code>, </code><code>'remove_extra_meta_boxes'</code> <code>);</code></td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
<p><a href="http://webdesignfan.com/customizing-the-wordpress-admin-area/" rel="nofollow" target="_blank"> Source </a></p>
<p>&nbsp;</p>
<h2>6. 创建个性化的面板</h2>
<p>可轻松编辑自己的应用</p>
<div id="highlighter_603533">
<div>
<div>
<table>
<tbody>
<tr>
<td><code>01</code></td>
<td><code>// Create the function to output the contents of our Dashboard Widget</code></td>
</tr>
</tbody>
</table>
</div>
<div>
<table>
<tbody>
<tr>
<td><code>02</code></td>
<td><code>function</code> <code>example_dashboard_widget_function() {</code></td>
</tr>
</tbody>
</table>
</div>
<div>
<table>
<tbody>
<tr>
<td><code>03</code></td>
<td><code>    </code><code>// Display whatever it is you want to show</code></td>
</tr>
</tbody>
</table>
</div>
<div>
<table>
<tbody>
<tr>
<td><code>04</code></td>
<td><code>    </code><code>echo</code> <code>"Hello World, I'm a great Dashboard Widget"</code><code>;</code></td>
</tr>
</tbody>
</table>
</div>
<div>
<table>
<tbody>
<tr>
<td><code>05</code></td>
<td><code>} </code></td>
</tr>
</tbody>
</table>
</div>
<div>
<table>
<tbody>
<tr>
<td><code>06</code></td>
<td></td>
</tr>
</tbody>
</table>
</div>
<div>
<table>
<tbody>
<tr>
<td><code>07</code></td>
<td><code>// Create the function use in the action hook</code></td>
</tr>
</tbody>
</table>
</div>
<div>
<table>
<tbody>
<tr>
<td><code>08</code></td>
<td><code>function</code> <code>example_add_dashboard_widgets() {</code></td>
</tr>
</tbody>
</table>
</div>
<div>
<table>
<tbody>
<tr>
<td><code>09</code></td>
<td><code>    </code><code>wp_add_dashboard_widget(</code><code>'example_dashboard_widget'</code><code>, </code><code>'Example Dashboard Widget'</code><code>, </code><code>'example_dashboard_widget_function'</code><code>);</code></td>
</tr>
</tbody>
</table>
</div>
<div>
<table>
<tbody>
<tr>
<td><code>10</code></td>
<td><code>}</code></td>
</tr>
</tbody>
</table>
</div>
<div>
<table>
<tbody>
<tr>
<td><code>11</code></td>
<td><code>// Hoook into the 'wp_dashboard_setup' action to register our other functions</code></td>
</tr>
</tbody>
</table>
</div>
<div>
<table>
<tbody>
<tr>
<td><code>12</code></td>
<td><code>add_action(</code><code>'wp_dashboard_setup'</code><code>, </code><code>'example_add_dashboard_widgets'</code> <code>);</code></td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
<p><a href="http://hankis.me/modifying-the-wordpress-dashboard" rel="nofollow" target="_blank"> Source </a></p>
<p>&nbsp;</p>
<h2>7. 禁用插件停用的功能</h2>
<p>该代码将移除插件中的 Deactivate 链接，将下面代码保存到 functions.php 并保存。</p>
<div id="highlighter_942199">
<div>
<div>
<table>
<tbody>
<tr>
<td><code>01</code></td>
<td><code>add_filter( </code><code>'plugin_action_links'</code><code>, </code><code>'slt_lock_plugins'</code><code>, 10, 4 );</code></td>
</tr>
</tbody>
</table>
</div>
<div>
<table>
<tbody>
<tr>
<td><code>02</code></td>
<td><code>function</code> <code>slt_lock_plugins( </code><code>$actions</code><code>, </code><code>$plugin_file</code><code>, </code><code>$plugin_data</code><code>, </code><code>$context</code> <code>) {</code></td>
</tr>
</tbody>
</table>
</div>
<div>
<table>
<tbody>
<tr>
<td><code>03</code></td>
<td><code>    </code><code>// Remove edit link for all</code></td>
</tr>
</tbody>
</table>
</div>
<div>
<table>
<tbody>
<tr>
<td><code>04</code></td>
<td><code>    </code><code>if</code> <code>( </code><code>array_key_exists</code><code>( </code><code>'edit'</code><code>, </code><code>$actions</code> <code>) )</code></td>
</tr>
</tbody>
</table>
</div>
<div>
<table>
<tbody>
<tr>
<td><code>05</code></td>
<td><code>        </code><code>unset( </code><code>$actions</code><code>[</code><code>'edit'</code><code>] );</code></td>
</tr>
</tbody>
</table>
</div>
<div>
<table>
<tbody>
<tr>
<td><code>06</code></td>
<td><code>    </code><code>// Remove deactivate link for crucial plugins</code></td>
</tr>
</tbody>
</table>
</div>
<div>
<table>
<tbody>
<tr>
<td><code>07</code></td>
<td><code>    </code><code>if</code> <code>( </code><code>array_key_exists</code><code>( </code><code>'deactivate'</code><code>, </code><code>$actions</code> <code>) &amp;&amp; in_array( </code><code>$plugin_file</code><code>, </code><code>array</code><code>(</code></td>
</tr>
</tbody>
</table>
</div>
<div>
<table>
<tbody>
<tr>
<td><code>08</code></td>
<td><code>        </code><code>'slt-custom-fields/slt-custom-fields.php'</code><code>,</code></td>
</tr>
</tbody>
</table>
</div>
<div>
<table>
<tbody>
<tr>
<td><code>09</code></td>
<td><code>        </code><code>'slt-file-select/slt-file-select.php'</code><code>,</code></td>
</tr>
</tbody>
</table>
</div>
<div>
<table>
<tbody>
<tr>
<td><code>10</code></td>
<td><code>        </code><code>'slt-simple-events/slt-simple-events.php'</code><code>,</code></td>
</tr>
</tbody>
</table>
</div>
<div>
<table>
<tbody>
<tr>
<td><code>11</code></td>
<td><code>        </code><code>'slt-widgets/slt-widgets.php'</code></td>
</tr>
</tbody>
</table>
</div>
<div>
<table>
<tbody>
<tr>
<td><code>12</code></td>
<td><code>    </code><code>)))</code></td>
</tr>
</tbody>
</table>
</div>
<div>
<table>
<tbody>
<tr>
<td><code>13</code></td>
<td><code>        </code><code>unset( </code><code>$actions</code><code>[</code><code>'deactivate'</code><code>] );</code></td>
</tr>
</tbody>
</table>
</div>
<div>
<table>
<tbody>
<tr>
<td><code>14</code></td>
<td><code>    </code><code>return</code> <code>$actions</code><code>;</code></td>
</tr>
</tbody>
</table>
</div>
<div>
<table>
<tbody>
<tr>
<td><code>15</code></td>
<td><code>}</code></td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
<p><a href="http://sltaylor.co.uk/blog/disabling-wordpress-plugin-deactivation-theme-changing/" rel="nofollow" target="_blank"> Source </a></p>
<p>&nbsp;</p>
<h2>8. 根据角色添加、删除和记录面板部件</h2>
<div id="highlighter_153905">
<div>
<div>
<table>
<tbody>
<tr>
<td><code>01</code></td>
<td><code>function</code> <code>tidy_dashboard()</code></td>
</tr>
</tbody>
</table>
</div>
<div>
<table>
<tbody>
<tr>
<td><code>02</code></td>
<td><code>{</code></td>
</tr>
</tbody>
</table>
</div>
<div>
<table>
<tbody>
<tr>
<td><code>03</code></td>
<td><code>  </code><code>global</code> <code>$wp_meta_boxes</code><code>, </code><code>$current_user</code><code>;</code></td>
</tr>
</tbody>
</table>
</div>
<div>
<table>
<tbody>
<tr>
<td><code>04</code></td>
<td></td>
</tr>
</tbody>
</table>
</div>
<div>
<table>
<tbody>
<tr>
<td><code>05</code></td>
<td><code>  </code><code>// remove incoming links info for authors or editors</code></td>
</tr>
</tbody>
</table>
</div>
<div>
<table>
<tbody>
<tr>
<td><code>06</code></td>
<td><code>  </code><code>if</code><code>(in_array(</code><code>'author'</code><code>, </code><code>$current_user</code><code>-&gt;roles) || in_array(</code><code>'editor'</code><code>, </code><code>$current_user</code><code>-&gt;roles))</code></td>
</tr>
</tbody>
</table>
</div>
<div>
<table>
<tbody>
<tr>
<td><code>07</code></td>
<td><code>  </code><code>{</code></td>
</tr>
</tbody>
</table>
</div>
<div>
<table>
<tbody>
<tr>
<td><code>08</code></td>
<td><code>    </code><code>unset(</code><code>$wp_meta_boxes</code><code>[</code><code>'dashboard'</code><code>][</code><code>'normal '</code><code>][</code><code>'core'</code><code>][</code><code>'dashboard_incoming_links'</code><code>]);</code></td>
</tr>
</tbody>
</table>
</div>
<div>
<table>
<tbody>
<tr>
<td><code>09</code></td>
<td><code>  </code><code>}</code></td>
</tr>
</tbody>
</table>
</div>
<div>
<table>
<tbody>
<tr>
<td><code>10</code></td>
<td></td>
</tr>
</tbody>
</table>
</div>
<div>
<table>
<tbody>
<tr>
<td><code>11</code></td>
<td><code>  </code><code>// remove the plugins info and news feeds for everyone</code></td>
</tr>
</tbody>
</table>
</div>
<div>
<table>
<tbody>
<tr>
<td><code>12</code></td>
<td><code>  </code><code>unset(</code><code>$wp_meta_boxes</code><code>[</code><code>'dashboard'</code><code>][</code><code>'normal'</code><code>][</code><code>'core'</code><code>][</code><code>'dashboard_plugins'</code><code>]);</code></td>
</tr>
</tbody>
</table>
</div>
<div>
<table>
<tbody>
<tr>
<td><code>13</code></td>
<td><code>  </code><code>unset(</code><code>$wp_meta_boxes</code><code>[</code><code>'dashboard'</code><code>][</code><code>'side'</code><code>][</code><code>'core'</code><code>][</code><code>'dashboard_primary'</code><code>]);</code></td>
</tr>
</tbody>
</table>
</div>
<div>
<table>
<tbody>
<tr>
<td><code>14</code></td>
<td><code>  </code><code>unset(</code><code>$wp_meta_boxes</code><code>[</code><code>'dashboard'</code><code>][</code><code>'side'</code><code>][</code><code>'core'</code><code>][</code><code>'dashboard_secondary'</code><code>]);</code></td>
</tr>
</tbody>
</table>
</div>
<div>
<table>
<tbody>
<tr>
<td><code>15</code></td>
<td></td>
</tr>
</tbody>
</table>
</div>
<div>
<table>
<tbody>
<tr>
<td><code>16</code></td>
<td><code>}</code></td>
</tr>
</tbody>
</table>
</div>
<div>
<table>
<tbody>
<tr>
<td><code>17</code></td>
<td><code>//add our function to the dashboard setup hook</code></td>
</tr>
</tbody>
</table>
</div>
<div>
<table>
<tbody>
<tr>
<td><code>18</code></td>
<td><code>add_action(</code><code>'wp_dashboard_setup'</code><code>, </code><code>'tidy_dashboard'</code><code>);</code></td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
<p>下面是用来取消默认面板部件的代码列表：</p>
<div id="highlighter_793574">
<div>
<div>
<table>
<tbody>
<tr>
<td><code>01</code></td>
<td><code>//Right Now - Comments, Posts, Pages at a glance</code></td>
</tr>
</tbody>
</table>
</div>
<div>
<table>
<tbody>
<tr>
<td><code>02</code></td>
<td><code>unset(</code><code>$wp_meta_boxes</code><code>[</code><code>'dashboard'</code><code>][</code><code>'normal'</code><code>][</code><code>'core'</code><code>][</code><code>'dashboard_right_now'</code><code>]);</code></td>
</tr>
</tbody>
</table>
</div>
<div>
<table>
<tbody>
<tr>
<td><code>03</code></td>
<td><code>//Recent Comments</code></td>
</tr>
</tbody>
</table>
</div>
<div>
<table>
<tbody>
<tr>
<td><code>04</code></td>
<td><code>unset(</code><code>$wp_meta_boxes</code><code>[</code><code>'dashboard'</code><code>][</code><code>'normal'</code><code>][</code><code>'core'</code><code>][</code><code>'dashboard_recent_comments'</code><code>]);</code></td>
</tr>
</tbody>
</table>
</div>
<div>
<table>
<tbody>
<tr>
<td><code>05</code></td>
<td><code>//Incoming Links</code></td>
</tr>
</tbody>
</table>
</div>
<div>
<table>
<tbody>
<tr>
<td><code>06</code></td>
<td><code>unset(</code><code>$wp_meta_boxes</code><code>[</code><code>'dashboard'</code><code>][</code><code>'normal'</code><code>][</code><code>'core'</code><code>][</code><code>'dashboard_incoming_links'</code><code>]);</code></td>
</tr>
</tbody>
</table>
</div>
<div>
<table>
<tbody>
<tr>
<td><code>07</code></td>
<td><code>//Plugins - Popular, New and Recently updated WordPress Plugins</code></td>
</tr>
</tbody>
</table>
</div>
<div>
<table>
<tbody>
<tr>
<td><code>08</code></td>
<td><code>unset(</code><code>$wp_meta_boxes</code><code>[</code><code>'dashboard'</code><code>][</code><code>'normal'</code><code>][</code><code>'core'</code><code>][</code><code>'dashboard_plugins'</code><code>]);</code></td>
</tr>
</tbody>
</table>
</div>
<div>
<table>
<tbody>
<tr>
<td><code>09</code></td>
<td></td>
</tr>
</tbody>
</table>
</div>
<div>
<table>
<tbody>
<tr>
<td><code>10</code></td>
<td><code>//Wordpress Development Blog Feed</code></td>
</tr>
</tbody>
</table>
</div>
<div>
<table>
<tbody>
<tr>
<td><code>11</code></td>
<td><code>unset(</code><code>$wp_meta_boxes</code><code>[</code><code>'dashboard'</code><code>][</code><code>'side'</code><code>][</code><code>'core'</code><code>][</code><code>'dashboard_primary'</code><code>]);</code></td>
</tr>
</tbody>
</table>
</div>
<div>
<table>
<tbody>
<tr>
<td><code>12</code></td>
<td><code>//Other WordPress News Feed</code></td>
</tr>
</tbody>
</table>
</div>
<div>
<table>
<tbody>
<tr>
<td><code>13</code></td>
<td><code>unset(</code><code>$wp_meta_boxes</code><code>[</code><code>'dashboard'</code><code>][</code><code>'side'</code><code>][</code><code>'core'</code><code>][</code><code>'dashboard_secondary'</code><code>]);</code></td>
</tr>
</tbody>
</table>
</div>
<div>
<table>
<tbody>
<tr>
<td><code>14</code></td>
<td><code>//Quick Press Form</code></td>
</tr>
</tbody>
</table>
</div>
<div>
<table>
<tbody>
<tr>
<td><code>15</code></td>
<td><code>unset(</code><code>$wp_meta_boxes</code><code>[</code><code>'dashboard'</code><code>][</code><code>'side'</code><code>][</code><code>'core'</code><code>][</code><code>'dashboard_quick_press'</code><code>]);</code></td>
</tr>
</tbody>
</table>
</div>
<div>
<table>
<tbody>
<tr>
<td><code>16</code></td>
<td><code>//Recent Drafts List</code></td>
</tr>
</tbody>
</table>
</div>
<div>
<table>
<tbody>
<tr>
<td><code>17</code></td>
<td><code>unset(</code><code>$wp_meta_boxes</code><code>[</code><code>'dashboard'</code><code>][</code><code>'side'</code><code>][</code><code>'core'</code><code>][</code><code>'dashboard_recent_drafts'</code><code>]);</code></td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
<p><a href="http://erisds.co.uk/wordpress/snippet-wordpress-admin-tidy-dashboard-widgets-by-role" rel="nofollow" target="_blank"> Source </a></p>
<p>&nbsp;</p>
<h2>9. 更简单的登录 URL</h2>
<p>将下面代码粘贴到 .htaccess 文件，放在 WordPress rewrite 规则之前</p>
<div id="highlighter_101152">
<div>
<div>
<table>
<tbody>
<tr>
<td><code>1</code></td>
<td><code>RewriteRule ^login$ http:</code><code>//yoursite.com/wp-login.php [NC,L]</code></td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
<p><a href="http://digwp.com/2011/01/simpler-login-url/" rel="nofollow" target="_blank"> Source </a></p>
<p>&nbsp;</p>
<h2>10. Remove Pages Columns</h2>
<p>下面代码允许你移除 ‘Pages’ 页中的你不再需要的列</p>
<div id="highlighter_502986">
<div>
<div>
<table>
<tbody>
<tr>
<td><code>1</code></td>
<td><code>function</code> <code>remove_pages_columns(</code><code>$defaults</code><code>) {</code></td>
</tr>
</tbody>
</table>
</div>
<div>
<table>
<tbody>
<tr>
<td><code>2</code></td>
<td><code>  </code><code>unset(</code><code>$defaults</code><code>[</code><code>'comments'</code><code>]);</code></td>
</tr>
</tbody>
</table>
</div>
<div>
<table>
<tbody>
<tr>
<td><code>3</code></td>
<td><code>  </code><code>return</code> <code>$defaults</code><code>;</code></td>
</tr>
</tbody>
</table>
</div>
<div>
<table>
<tbody>
<tr>
<td><code>4</code></td>
<td><code>}</code></td>
</tr>
</tbody>
</table>
</div>
<div>
<table>
<tbody>
<tr>
<td><code>5</code></td>
<td><code>add_filter(</code><code>'manage_pages_columns'</code><code>, </code><code>'remove_pages_columns'</code><code>);</code></td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
<p><a href="http://wp-snippets.com/remove-pages-columns/" rel="nofollow" target="_blank"> Source </a></p>
<p>&nbsp;</p>
<h2>11. 禁止修改主题</h2>
<p>该代码将面板中的 ‘Appearance’ 菜单项移除</p>
<div id="highlighter_614197">
<div>
<div>
<table>
<tbody>
<tr>
<td><code>1</code></td>
<td><code>add_action( </code><code>'admin_init'</code><code>, </code><code>'slt_lock_theme'</code> <code>);</code></td>
</tr>
</tbody>
</table>
</div>
<div>
<table>
<tbody>
<tr>
<td><code>2</code></td>
<td><code>function</code> <code>slt_lock_theme() {</code></td>
</tr>
</tbody>
</table>
</div>
<div>
<table>
<tbody>
<tr>
<td><code>3</code></td>
<td><code>    </code><code>global</code> <code>$submenu</code><code>, </code><code>$userdata</code><code>;</code></td>
</tr>
</tbody>
</table>
</div>
<div>
<table>
<tbody>
<tr>
<td><code>4</code></td>
<td><code>    </code><code>get_currentuserinfo();</code></td>
</tr>
</tbody>
</table>
</div>
<div>
<table>
<tbody>
<tr>
<td><code>5</code></td>
<td><code>    </code><code>if</code> <code>( </code><code>$userdata</code><code>-&gt;ID != 1 ) {</code></td>
</tr>
</tbody>
</table>
</div>
<div>
<table>
<tbody>
<tr>
<td><code>6</code></td>
<td><code>        </code><code>unset( </code><code>$submenu</code><code>[</code><code>'themes.php'</code><code>][5] );</code></td>
</tr>
</tbody>
</table>
</div>
<div>
<table>
<tbody>
<tr>
<td><code>7</code></td>
<td><code>        </code><code>unset( </code><code>$submenu</code><code>[</code><code>'themes.php'</code><code>][15] );</code></td>
</tr>
</tbody>
</table>
</div>
<div>
<table>
<tbody>
<tr>
<td><code>8</code></td>
<td><code>    </code><code>}</code></td>
</tr>
</tbody>
</table>
</div>
<div>
<table>
<tbody>
<tr>
<td><code>9</code></td>
<td><code>}</code></td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
<p><a href="http://sltaylor.co.uk/blog/disabling-wordpress-plugin-deactivation-theme-changing/" rel="nofollow" target="_blank"> Source </a></p>
<p>&nbsp;</p>
<h2>12. 修改面板底部的文本</h2>
<div id="highlighter_682570">
<div>
<div>
<table>
<tbody>
<tr>
<td><code>1</code></td>
<td><code>function</code> <code>remove_footer_admin () {</code></td>
</tr>
</tbody>
</table>
</div>
<div>
<table>
<tbody>
<tr>
<td><code>2</code></td>
<td><code>    </code><code>echo</code> <code>"Your own text"</code><code>;</code></td>
</tr>
</tbody>
</table>
</div>
<div>
<table>
<tbody>
<tr>
<td><code>3</code></td>
<td><code>} </code></td>
</tr>
</tbody>
</table>
</div>
<div>
<table>
<tbody>
<tr>
<td><code>4</code></td>
<td></td>
</tr>
</tbody>
</table>
</div>
<div>
<table>
<tbody>
<tr>
<td><code>5</code></td>
<td><code>add_filter(</code><code>'admin_footer_text'</code><code>, </code><code>'remove_footer_admin'</code><code>);</code></td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
<p><a href="http://www.wprecipes.com/wordpress-tip-how-to-change-the-dashboard-footer-text" rel="nofollow" target="_blank"> Source </a></p>
<p>&nbsp;</p>
<h2>13. Remove Author Metabox/Options &amp; Move to Publish MetaBox</h2>
<div id="highlighter_526235">
<div>
<div>
<table>
<tbody>
<tr>
<td><code>01</code></td>
<td><code>// MOVE THE AUTHOR METABOX INTO THE PUBLISH METABOX</code></td>
</tr>
</tbody>
</table>
</div>
<div>
<table>
<tbody>
<tr>
<td><code>02</code></td>
<td><code>add_action( </code><code>'admin_menu'</code><code>, </code><code>'remove_author_metabox'</code> <code>);</code></td>
</tr>
</tbody>
</table>
</div>
<div>
<table>
<tbody>
<tr>
<td><code>03</code></td>
<td><code>add_action( </code><code>'post_submitbox_misc_actions'</code><code>, </code><code>'move_author_to_publish_metabox'</code> <code>);</code></td>
</tr>
</tbody>
</table>
</div>
<div>
<table>
<tbody>
<tr>
<td><code>04</code></td>
<td><code>function</code> <code>remove_author_metabox() {</code></td>
</tr>
</tbody>
</table>
</div>
<div>
<table>
<tbody>
<tr>
<td><code>05</code></td>
<td><code>    </code><code>remove_meta_box( </code><code>'authordiv'</code><code>, </code><code>'post'</code><code>, </code><code>'normal'</code> <code>);</code></td>
</tr>
</tbody>
</table>
</div>
<div>
<table>
<tbody>
<tr>
<td><code>06</code></td>
<td><code>}</code></td>
</tr>
</tbody>
</table>
</div>
<div>
<table>
<tbody>
<tr>
<td><code>07</code></td>
<td><code>function</code> <code>move_author_to_publish_metabox() {</code></td>
</tr>
</tbody>
</table>
</div>
<div>
<table>
<tbody>
<tr>
<td><code>08</code></td>
<td><code>    </code><code>global</code> <code>$post_ID</code><code>;</code></td>
</tr>
</tbody>
</table>
</div>
<div>
<table>
<tbody>
<tr>
<td><code>09</code></td>
<td><code>    </code><code>$post</code> <code>= get_post( </code><code>$post_ID</code> <code>);</code></td>
</tr>
</tbody>
</table>
</div>
<div>
<table>
<tbody>
<tr>
<td><code>10</code></td>
<td><code>    </code><code>echo</code> <code>'&lt;div id="author" style="border-top-style:solid; border-top-width:1px; border-top-color:#EEEEEE; border-bottom-width:0px;"&gt;Author: '</code><code>;</code></td>
</tr>
</tbody>
</table>
</div>
<div>
<table>
<tbody>
<tr>
<td><code>11</code></td>
<td><code>    </code><code>post_author_meta_box( </code><code>$post</code> <code>);</code></td>
</tr>
</tbody>
</table>
</div>
<div>
<table>
<tbody>
<tr>
<td><code>12</code></td>
<td><code>    </code><code>echo</code> <code>'&lt;/div&gt;'</code><code>;</code></td>
</tr>
</tbody>
</table>
</div>
<div>
<table>
<tbody>
<tr>
<td><code>13</code></td>
<td><code>}</code></td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
<p><a href="http://wordpress.stackexchange.com/questions/1567/best-collection-of-code-for-your-functions-php-file?page=2&amp;tab=votes#tab-top" rel="nofollow" target="_blank"> Source </a></p>
<p>&nbsp;</p>
<h2>14. 修改登录的 Logo</h2>
<p>新的 logo 尺寸是 326 x 82 ，把图片放到主题的 images 目录，然后修改下面代码的 ‘companylogo.png’ 并将代码粘贴到 functions.php</p>
<div id="highlighter_608610">
<div>
<div>
<table>
<tbody>
<tr>
<td><code>1</code></td>
<td><code>// login page logo</code></td>
</tr>
</tbody>
</table>
</div>
<div>
<table>
<tbody>
<tr>
<td><code>2</code></td>
<td><code>function</code> <code>custom_login_logo() {</code></td>
</tr>
</tbody>
</table>
</div>
<div>
<table>
<tbody>
<tr>
<td><code>3</code></td>
<td><code>    </code><code>echo</code> <code>'&lt;style type="text/css"&gt;h1 a { background: url('</code><code>.get_bloginfo(</code><code>'template_directory'</code><code>).</code><code>'/companylogo.png) 50% 50% no-repeat !important; }&lt;/style&gt;'</code><code>;</code></td>
</tr>
</tbody>
</table>
</div>
<div>
<table>
<tbody>
<tr>
<td><code>4</code></td>
<td><code>}</code></td>
</tr>
</tbody>
</table>
</div>
<div>
<table>
<tbody>
<tr>
<td><code>5</code></td>
<td><code>add_action(</code><code>'login_head'</code><code>, </code><code>'custom_login_logo'</code><code>);</code></td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
<p><a href="http://blogs.sitepoint.com/make-wordpress-easier-for-clients-branding/" rel="nofollow" target="_blank"> Source </a></p>
<p>&nbsp;</p>
<h2>15. 移除文章 Columns</h2>
<p>该代码将移除 posts 页面的列</p>
<div id="highlighter_835702">
<div>
<div>
<table>
<tbody>
<tr>
<td><code>1</code></td>
<td><code>function</code> <code>remove_post_columns(</code><code>$defaults</code><code>) {</code></td>
</tr>
</tbody>
</table>
</div>
<div>
<table>
<tbody>
<tr>
<td><code>2</code></td>
<td><code>  </code><code>unset(</code><code>$defaults</code><code>[</code><code>'comments'</code><code>]);</code></td>
</tr>
</tbody>
</table>
</div>
<div>
<table>
<tbody>
<tr>
<td><code>3</code></td>
<td><code>  </code><code>return</code> <code>$defaults</code><code>;</code></td>
</tr>
</tbody>
</table>
</div>
<div>
<table>
<tbody>
<tr>
<td><code>4</code></td>
<td><code>}</code></td>
</tr>
</tbody>
</table>
</div>
<div>
<table>
<tbody>
<tr>
<td><code>5</code></td>
<td><code>add_filter(</code><code>'manage_posts_columns'</code><code>, </code><code>'remove_post_columns'</code><code>);</code></td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
<p><a href="http://www.oschina.net/question" rel="nofollow" target="_blank"> Source </a></p>
<p>&nbsp;</p>
<h2>16. 禁用管理面板的顶级菜单</h2>
<div id="highlighter_349206">
<div>
<div>
<table>
<tbody>
<tr>
<td><code>01</code></td>
<td><code>function</code> <code>remove_menus () {</code></td>
</tr>
</tbody>
</table>
</div>
<div>
<table>
<tbody>
<tr>
<td><code>02</code></td>
<td><code>global</code> <code>$menu</code><code>;</code></td>
</tr>
</tbody>
</table>
</div>
<div>
<table>
<tbody>
<tr>
<td><code>03</code></td>
<td><code>    </code><code>$restricted</code> <code>= </code><code>array</code><code>(__(</code><code>'Dashboard'</code><code>), __(</code><code>'Posts'</code><code>), __(</code><code>'Media'</code><code>), __(</code><code>'Links'</code><code>), __(</code><code>'Pages'</code><code>), __(</code><code>'Appearance'</code><code>), __(</code><code>'Tools'</code><code>), __(</code><code>'Users'</code><code>), __(</code><code>'Settings'</code><code>), __(</code><code>'Comments'</code><code>), __(</code><code>'Plugins'</code><code>));</code></td>
</tr>
</tbody>
</table>
</div>
<div>
<table>
<tbody>
<tr>
<td><code>04</code></td>
<td><code>    </code><code>end</code> <code>(</code><code>$menu</code><code>);</code></td>
</tr>
</tbody>
</table>
</div>
<div>
<table>
<tbody>
<tr>
<td><code>05</code></td>
<td><code>    </code><code>while</code> <code>(prev(</code><code>$menu</code><code>)){</code></td>
</tr>
</tbody>
</table>
</div>
<div>
<table>
<tbody>
<tr>
<td><code>06</code></td>
<td><code>        </code><code>$value</code> <code>= </code><code>explode</code><code>(</code><code>' '</code><code>,</code><code>$menu</code><code>[key(</code><code>$menu</code><code>)][0]);</code></td>
</tr>
</tbody>
</table>
</div>
<div>
<table>
<tbody>
<tr>
<td><code>07</code></td>
<td><code>        </code><code>if</code><code>(in_array(</code><code>$value</code><code>[0] != NULL?</code><code>$value</code><code>[0]:</code><code>""</code> <code>, </code><code>$restricted</code><code>)){unset(</code><code>$menu</code><code>[key(</code><code>$menu</code><code>)]);}</code></td>
</tr>
</tbody>
</table>
</div>
<div>
<table>
<tbody>
<tr>
<td><code>08</code></td>
<td><code>    </code><code>}</code></td>
</tr>
</tbody>
</table>
</div>
<div>
<table>
<tbody>
<tr>
<td><code>09</code></td>
<td><code>}</code></td>
</tr>
</tbody>
</table>
</div>
<div>
<table>
<tbody>
<tr>
<td><code>10</code></td>
<td><code>add_action(</code><code>'admin_menu'</code><code>, </code><code>'remove_menus'</code><code>);</code></td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
<p><a href="http://www.wprecipes.com/how-to-remove-menus-in-wordpress-dashboard" rel="nofollow" target="_blank"> Source </a></p>
<p>&nbsp;</p>
<h2>17. 禁用管理面板的子菜单</h2>
<div id="highlighter_955770">
<div>
<div>
<table>
<tbody>
<tr>
<td><code>1</code></td>
<td><code>function</code> <code>remove_submenus() {</code></td>
</tr>
</tbody>
</table>
</div>
<div>
<table>
<tbody>
<tr>
<td><code>2</code></td>
<td><code>  </code><code>global</code> <code>$submenu</code><code>;</code></td>
</tr>
</tbody>
</table>
</div>
<div>
<table>
<tbody>
<tr>
<td><code>3</code></td>
<td><code>    </code><code>unset(</code><code>$submenu</code><code>[</code><code>'index.php'</code><code>][10]); </code><code>// Removes 'Updates'.</code></td>
</tr>
</tbody>
</table>
</div>
<div>
<table>
<tbody>
<tr>
<td><code>4</code></td>
<td><code>    </code><code>unset(</code><code>$submenu</code><code>[</code><code>'themes.php'</code><code>][5]); </code><code>// Removes 'Themes'.</code></td>
</tr>
</tbody>
</table>
</div>
<div>
<table>
<tbody>
<tr>
<td><code>5</code></td>
<td><code>    </code><code>unset(</code><code>$submenu</code><code>[</code><code>'options-general.php'</code><code>][15]); </code><code>// Removes 'Writing'.</code></td>
</tr>
</tbody>
</table>
</div>
<div>
<table>
<tbody>
<tr>
<td><code>6</code></td>
<td><code>    </code><code>unset(</code><code>$submenu</code><code>[</code><code>'options-general.php'</code><code>][25]); </code><code>// Removes 'Discussion'.</code></td>
</tr>
</tbody>
</table>
</div>
<div>
<table>
<tbody>
<tr>
<td><code>7</code></td>
<td><code>}</code></td>
</tr>
</tbody>
</table>
</div>
<div>
<table>
<tbody>
<tr>
<td><code>8</code></td>
<td><code>add_action(</code><code>'admin_menu'</code><code>, </code><code>'remove_submenus'</code><code>);</code></td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
<p><a href="http://wp-snippets.com/disable-submenus-from-admin-panel/" rel="nofollow" target="_blank"> Source </a></p>
<p>&nbsp;</p>
<h2>18. 增加自定义的面板 Logo</h2>
<p>首先需要创建透明的图片，尺寸为 30x31px (.gif or .png) 然后保存到主题的 images 目录 (/wp-content/themes/theme-name/images) ，名字任意</p>
<div id="highlighter_486005">
<div>
<div>
<table>
<tbody>
<tr>
<td><code>01</code></td>
<td><code>//hook the administrative header output</code></td>
</tr>
</tbody>
</table>
</div>
<div>
<table>
<tbody>
<tr>
<td><code>02</code></td>
<td><code>add_action(</code><code>'admin_head'</code><code>, </code><code>'my_custom_logo'</code><code>);</code></td>
</tr>
</tbody>
</table>
</div>
<div>
<table>
<tbody>
<tr>
<td><code>03</code></td>
<td></td>
</tr>
</tbody>
</table>
</div>
<div>
<table>
<tbody>
<tr>
<td><code>04</code></td>
<td><code>function</code> <code>my_custom_logo() {</code></td>
</tr>
</tbody>
</table>
</div>
<div>
<table>
<tbody>
<tr>
<td><code>05</code></td>
<td><code>echo</code> <code>'</code></td>
</tr>
</tbody>
</table>
</div>
<div>
<table>
<tbody>
<tr>
<td><code>06</code></td>
<td><code>&lt;style type=</code><code>"text/css"</code><code>&gt;</code></td>
</tr>
</tbody>
</table>
</div>
<div>
<table>
<tbody>
<tr>
<td><code>07</code></td>
<td><code>#header-logo { background-image: url(</code><code>'.get_bloginfo('</code><code>template_directory</code><code>').'</code><code>/images/custom-logo.gif) !important; }</code></td>
</tr>
</tbody>
</table>
</div>
<div>
<table>
<tbody>
<tr>
<td><code>08</code></td>
<td><code>&lt;/style&gt;</code></td>
</tr>
</tbody>
</table>
</div>
<div>
<table>
<tbody>
<tr>
<td><code>09</code></td>
<td><code>';</code></td>
</tr>
</tbody>
</table>
</div>
<div>
<table>
<tbody>
<tr>
<td><code>10</code></td>
<td><code>}</code></td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
<p><a href="http://www.wpbeginner.com/wp-themes/adding-a-custom-dashboard-logo-in-wordpress-for-branding/" rel="nofollow" target="_blank"> Source </a></p>
<p>&nbsp;</p>
<h2>19. 为新的管理条添加和删除链接</h2>
<div id="highlighter_575868">
<div>
<div>
<table>
<tbody>
<tr>
<td><code>01</code></td>
<td><code>function</code> <code>my_admin_bar_link() {</code></td>
</tr>
</tbody>
</table>
</div>
<div>
<table>
<tbody>
<tr>
<td><code>02</code></td>
<td><code>    </code><code>global</code> <code>$wp_admin_bar</code><code>;</code></td>
</tr>
</tbody>
</table>
</div>
<div>
<table>
<tbody>
<tr>
<td><code>03</code></td>
<td><code>    </code><code>if</code> <code>( !is_super_admin() || !is_admin_bar_showing() )</code></td>
</tr>
</tbody>
</table>
</div>
<div>
<table>
<tbody>
<tr>
<td><code>04</code></td>
<td><code>        </code><code>return</code><code>;</code></td>
</tr>
</tbody>
</table>
</div>
<div>
<table>
<tbody>
<tr>
<td><code>05</code></td>
<td><code>    </code><code>$wp_admin_bar</code><code>-&gt;add_menu( </code><code>array</code><code>(</code></td>
</tr>
</tbody>
</table>
</div>
<div>
<table>
<tbody>
<tr>
<td><code>06</code></td>
<td><code>    </code><code>'id'</code> <code>=&gt; </code><code>'diww'</code><code>,</code></td>
</tr>
</tbody>
</table>
</div>
<div>
<table>
<tbody>
<tr>
<td><code>07</code></td>
<td><code>    </code><code>'parent'</code> <code>=&gt; </code><code>'my-blogs'</code><code>,</code></td>
</tr>
</tbody>
</table>
</div>
<div>
<table>
<tbody>
<tr>
<td><code>08</code></td>
<td><code>    </code><code>'title'</code> <code>=&gt; __( </code><code>'Title of the link you want to add'</code><code>),</code></td>
</tr>
</tbody>
</table>
</div>
<div>
<table>
<tbody>
<tr>
<td><code>09</code></td>
<td><code>    </code><code>'href'</code> <code>=&gt; admin_url( </code><code>'<a href="http://mysitesurl.com/wp-admin.php">http://mysitesurl.com/wp-admin.php</a>'</code> <code>)</code></td>
</tr>
</tbody>
</table>
</div>
<div>
<table>
<tbody>
<tr>
<td><code>10</code></td>
<td><code>    </code><code>) );</code></td>
</tr>
</tbody>
</table>
</div>
<div>
<table>
<tbody>
<tr>
<td><code>11</code></td>
<td><code>}</code></td>
</tr>
</tbody>
</table>
</div>
<div>
<table>
<tbody>
<tr>
<td><code>12</code></td>
<td><code>add_action(</code><code>'admin_bar_menu'</code><code>, </code><code>'my_admin_bar_link'</code><code>);</code></td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
<div id="highlighter_70739">
<div>
<div>
<table>
<tbody>
<tr>
<td><code>1</code></td>
<td><code>function</code> <code>remove_admin_bar_links() {</code></td>
</tr>
</tbody>
</table>
</div>
<div>
<table>
<tbody>
<tr>
<td><code>2</code></td>
<td><code>    </code><code>global</code> <code>$wp_admin_bar</code><code>;</code></td>
</tr>
</tbody>
</table>
</div>
<div>
<table>
<tbody>
<tr>
<td><code>3</code></td>
<td><code>    </code><code>$wp_admin_bar</code><code>-&gt;remove_menu(</code><code>'my-blogs'</code><code>);</code></td>
</tr>
</tbody>
</table>
</div>
<div>
<table>
<tbody>
<tr>
<td><code>4</code></td>
<td><code>    </code><code>$wp_admin_bar</code><code>-&gt;remove_menu(</code><code>'my-account-with-avatar'</code><code>);</code></td>
</tr>
</tbody>
</table>
</div>
<div>
<table>
<tbody>
<tr>
<td><code>5</code></td>
<td><code>}</code></td>
</tr>
</tbody>
</table>
</div>
<div>
<table>
<tbody>
<tr>
<td><code>6</code></td>
<td><code>add_action( </code><code>'wp_before_admin_bar_render'</code><code>, </code><code>'remove_admin_bar_links'</code> <code>);</code></td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
<p><a href="http://www.doitwithwordpress.com/customize-wordpress-admin-bar/" rel="nofollow" target="_blank"> Source </a></p>
<p>via <a href="http://skytechgeek.com/2012/04/19-code-snippets-to-make-wordpress-more-manageable/" rel="nofollow" target="_blank">skytechgeek</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.chinacpu.com/2012/05/%e7%ba%a2%e8%96%af-19-%e4%b8%aa%e4%bb%a3%e7%a0%81%e7%89%87%e6%ae%b5%e8%ae%a9-wordpress-%e6%9b%b4%e6%98%93%e4%ba%8e%e7%ae%a1%e7%90%86/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>12 个很棒的 PHP 资源和工具</title>
		<link>http://www.chinacpu.com/2012/05/12-%e4%b8%aa%e5%be%88%e6%a3%92%e7%9a%84-php-%e8%b5%84%e6%ba%90%e5%92%8c%e5%b7%a5%e5%85%b7/</link>
		<comments>http://www.chinacpu.com/2012/05/12-%e4%b8%aa%e5%be%88%e6%a3%92%e7%9a%84-php-%e8%b5%84%e6%ba%90%e5%92%8c%e5%b7%a5%e5%85%b7/#comments</comments>
		<pubDate>Sat, 05 May 2012 13:23:31 +0000</pubDate>
		<dc:creator>虚网人</dc:creator>
				<category><![CDATA[脚本程序]]></category>

		<guid isPermaLink="false">http://www.chinacpu.com/?p=985</guid>
		<description><![CDATA[<br/>本文介绍 12 款很棒的 PHP 资源和工具，包括开发框架、开发工具、调试器等。 1. CakePHP CakePHP是一个运用了诸如ActiveRecord、Association Data Mapping、Front Controller和MVC等著名设计模式的快速开发框架。该项目主要目标是提供一个可以让各种层次的PHP开发人员快速地开发出健壮的Web应用，而 又不失灵活性。 2. Zend Studio Zend Studio 是专业开发人员在使用PHP整个开发周期中唯一的集成开发环境 (IDE)，它包括了PHP所有必须的开发部件。通过一整套编辑、调试、分析、优化和数据库工具，Zend Studio 加速开发周期，并简化复杂的应用方案。 3. PHP Object Generator PHP Object Generator, (POG) 是一个开源的 PHP 代码生成器，可自动生成清晰、经过测试的面向对象代码，支持 PHP4/5. 4. Fire PHP Fire PHP 是Firefox 的扩充套件，但它可以帮你debug 后端PHP 的程式，听起来很神奇是吧？其实用的技术跟某些IDE 一样，要求你在写程式时加入一些追踪用的代码。通过使用Firephp你可以在Firebug的Console栏中看到要调试的数据，而不影响php程序 的正常执行，所以说，这东西对于Ajax开发是很有帮助的！ 5. PHP Open Biz PHPOpenbiz是一个基于PHP语言的商业Web应用开发框架。其特点包括： Metadata驱动的设计原则。开发人员用metadata来描述业务逻辑，而不是用代码。 模型-视图-控制器(MVC) 对象/关系映射(ORM) 浏览器端AJAX通信 与Eclipse集成的开发工具 简单而功能强大 [...]]]></description>
			<content:encoded><![CDATA[<p><br/>
<div id="OSChina_News_28641">
<p>本文介绍 12 款很棒的 PHP 资源和工具，包括开发框架、开发工具、调试器等。</p>
<p>1. <a href="http://www.oschina.net/p/cakephp" target="_blank">CakePHP</a></p>
<p>CakePHP是一个运用了诸如ActiveRecord、Association Data Mapping、Front Controller和MVC等著名设计模式的快速开发框架。该项目主要目标是提供一个可以让各种层次的PHP开发人员快速地开发出健壮的Web应用，而 又不失灵活性。</p>
<p><img src="http://www.chinacpu.com/wp-content/uploads/auto_save_image/2012/05/132332vys.png" alt="" /></p>
<p>2. <a href="http://www.oschina.net/p/zend+studio" target="_blank">Zend Studio</a></p>
<p>Zend Studio 是专业开发人员在使用PHP整个开发周期中唯一的集成开发环境 (IDE)，它包括了PHP所有必须的开发部件。通过一整套编辑、调试、分析、优化和数据库工具，Zend Studio 加速开发周期，并简化复杂的应用方案。</p>
<p><img src="http://www.chinacpu.com/wp-content/uploads/auto_save_image/2012/05/132333dNl.png" alt="" /></p>
<p>3. <a href="http://www.oschina.net/p/pog" target="_blank">PHP Object Generator</a></p>
<p>PHP Object Generator, (POG) 是一个开源的 PHP 代码生成器，可自动生成清晰、经过测试的面向对象代码，支持 PHP4/5.</p>
<p><img title="php-obeject-generator" src="http://www.chinacpu.com/wp-content/uploads/auto_save_image/2012/05/132333bGh.png" alt="" /></p>
<p>4. <a href="http://www.oschina.net/p/firephp" target="_blank">Fire PHP</a></p>
<p><em>Fire PHP</em> 是Firefox 的扩充套件，但它可以帮你debug 后端PHP 的程式，听起来很神奇是吧？其实用的技术跟某些IDE 一样，要求你在写程式时加入一些追踪用的代码。通过使用Firephp你可以在Firebug的Console栏中看到要调试的数据，而不影响php程序 的正常执行，所以说，这东西对于Ajax开发是很有帮助的！</p>
<p><img src="http://www.chinacpu.com/wp-content/uploads/auto_save_image/2012/05/13233479e.png" alt="" /></p>
<p>5. <a href="http://www.oschina.net/p/phpopenbiz" target="_blank">PHP Open Biz</a></p>
<p>PHPOpenbiz是一个基于PHP语言的商业Web应用开发框架。其特点包括：</p>
<ul>
<li>Metadata驱动的设计原则。开发人员用metadata来描述业务逻辑，而不是用代码。</li>
<li>模型-视图-控制器(MVC) 对象/关系映射(ORM)</li>
<li>浏览器端AJAX通信</li>
<li>与Eclipse集成的开发工具</li>
</ul>
<p><strong>简单而功能强大</strong></p>
<ul>
<li>编辑XML metadata而非代码</li>
<li>丰富的功能 – AJAX, MVC, ORM, 安全机制 …</li>
<li>建于Zend Framework之上, 更注重于应用层的逻辑</li>
</ul>
<p><strong>快速开发</strong></p>
<ul>
<li>框架的核心模块提供了常用的功能和服务，节省了大量开发时间</li>
<li>客户可以扩展核心类库来实现自己的逻辑</li>
<li>管理metadata闭管理代码要容易得多</li>
</ul>
<p><strong>低维护成本</strong></p>
<p><strong><img src="http://www.chinacpu.com/wp-content/uploads/auto_save_image/2012/05/132334ZBg.png" alt="" /></strong></p>
<p>6. <a href="http://www.oschina.net/p/zoop" target="_blank">Zoop Framework</a></p>
<p>Zoop是一个面向对象，快速，高效，易于使用的PHP开发框架。它的特性包括：GuiControl(类似于.net中webcontrol)， 集成 AJAX支持，实现form的自动校验与创建(包括所需的db操作),使用Smarty做为模板引擎，此外还包括PDF创建，ession处理，基于模板 的email发送(利用SMTP协议)等功能。</p>
<p><img src="http://www.chinacpu.com/wp-content/uploads/auto_save_image/2012/05/132335HKn.png" alt="" /></p>
<p>7. <a href="http://www.oschina.net/p/dbg" target="_blank">PHP Debugger</a></p>
<p>DBG 是一个全功能的 PHP 调试器，提供一个交互工具帮助调试 PHP 脚本。</p>
<p>下面截图是基于商业PHP开发环境 <a href="http://www.oschina.net/p/phped" target="_blank">PhpED</a></p>
<p><img src="http://www.chinacpu.com/wp-content/uploads/auto_save_image/2012/05/132335Oue.png" alt="PHPEd PHP IDE, Main view" border="0" /></p>
<p>8. <a href="http://www.blueshoes.org/" target="_blank">Blue Shoes</a></p>
<p>BlueShoes 是一个完整的应用框架和内容管理系统，后端数据库支持 MySQL、Oracle 和 MSSQL。</p>
<p><img src="http://www.chinacpu.com/wp-content/uploads/auto_save_image/2012/05/1323369lG.png" alt="" /></p>
<p>9. <a href="http://www.oschina.net/p/modx" target="_blank">MODx</a></p>
<p>MODx 是一个开源的 PHP 应用框架，可以帮助使用者控制自己的网上内容。它是开发人员和高级用户理想的控制系统，任何人都可以使用 MODx 发布、更新、维护动态网站，或 html 静态页面的网站内容。</p>
<p><img src="http://www.chinacpu.com/wp-content/uploads/auto_save_image/2012/05/132336kuk.png" alt="" /></p>
<p>10. <a href="http://www.oschina.net/p/qcodo" target="_blank">Qcodo</a></p>
<p>Qcodo是一个适用于敏捷开发基于PHP5采用MVC架构与CRUD代码生成功能的框架。完全面向对象，采用事件驱动处理方式。完全分离代码与HTML页面。QForms与QControl 包提供底层AJAX支持。</p>
<p><img src="http://www.chinacpu.com/wp-content/uploads/auto_save_image/2012/05/132337wVX.png" alt="" width="684" height="194" /></p>
<p>11. <a href="http://www.oschina.net/p/seagull" target="_blank">Seagull</a></p>
<p>Seagull是个纯OOP(面向对象程序设计)框架,可用于创建web,command line(命令行)和GUI的应用程序.它采用了BSD授权,让PHP开发者可以更容易地整合并管理代码源,更快速地建立复杂的应用程序。目前Seagull设计中已集成了许多比较受欢迎的PHP应用程序,例如:各式各样的模板引擎,测试工具,管理代码库工具等.如果您是个初学者,您可以将Seagull提供的许多样本应用程序自定义或扩展成适合您所需的.如果您是中高级开发者,您可以充分利用seagull中的best practices(最优方案),标准和模块的代码核心在有规定的时间内建立您的应用程序.</p>
<p>12. <a href="http://www.oschina.net/p/xaraya" target="_blank">Xaraya</a></p>
<p>Xaraya是一个开源的内容管理解决方案与开发框架，它包含了创建一个动态的跨平台内容管理系统所需要的基础模块和工具。Xaraya具有易于安 装，易 于使用，平台独立(可运行在所有支持PHP的平台上包括Linux,Windows,Mac OSX与多种数据库比如MySQL，PostgreSQL)，模块化(利用身份验证与事件系统可以向系统的核心加入所需要的模块附着新的身份验证方法)， 可扩展性(利用它自己的动态数据模型，可以让你轻松注册新模块的数据结构) ，多国语言支持，安全(基于角色权限控制)，快速(利用一个可配置的输出缓存系统实现)。</p>
<p><img src="http://www.chinacpu.com/wp-content/uploads/auto_save_image/2012/05/1323370Bb.png" alt="" /></p>
<p>via <a href="http://zoomzum.com/12-best-php-resources-and-tools/" target="_blank">zoomzum</a></p>
</div>
]]></content:encoded>
			<wfw:commentRss>http://www.chinacpu.com/2012/05/12-%e4%b8%aa%e5%be%88%e6%a3%92%e7%9a%84-php-%e8%b5%84%e6%ba%90%e5%92%8c%e5%b7%a5%e5%85%b7/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>欧洲法院裁定编程语言不受版权法保护</title>
		<link>http://www.chinacpu.com/2012/05/%e6%ac%a7%e6%b4%b2%e6%b3%95%e9%99%a2%e8%a3%81%e5%ae%9a%e7%bc%96%e7%a8%8b%e8%af%ad%e8%a8%80%e4%b8%8d%e5%8f%97%e7%89%88%e6%9d%83%e6%b3%95%e4%bf%9d%e6%8a%a4/</link>
		<comments>http://www.chinacpu.com/2012/05/%e6%ac%a7%e6%b4%b2%e6%b3%95%e9%99%a2%e8%a3%81%e5%ae%9a%e7%bc%96%e7%a8%8b%e8%af%ad%e8%a8%80%e4%b8%8d%e5%8f%97%e7%89%88%e6%9d%83%e6%b3%95%e4%bf%9d%e6%8a%a4/#comments</comments>
		<pubDate>Fri, 04 May 2012 10:51:56 +0000</pubDate>
		<dc:creator>虚网人</dc:creator>
				<category><![CDATA[业界资讯]]></category>

		<guid isPermaLink="false">http://www.chinacpu.com/?p=979</guid>
		<description><![CDATA[<br/>北京时间5月3日消息，欧洲法院（European Court of Justice）当地时间周三裁定，计算机软件的功能以及实现它所用的编程语言不受到版权法保护。 欧洲法院是在SAS Institute(以下简称“SAS”)起诉World Programming Limited（以下简称“WPL”）的诉讼中作出这一裁定的。SAS开发数据处理和统计分析软件。SAS系统的核心组件允许用户编写和运行利用SAS编 程语言编写的软件。通过访问SAS系统学习版，WPL开发了一款模拟SAS组件大多数功能的产品，因此，客户的应用软件能像在SAS系统上那样在WPL的 平台上运行。WPL获得了SAS系统学习版的授权。 欧洲法院表示，尽管WPL以了解其功能为目的使用和研究了SAS的软件，但“没有证据表明WPL曾接触或复制SAS产品的源代码”。欧洲法院裁定，“根据相关法律，获得软件授权的客户有权观察、研究或测试软件的功能，以确定软件的原理等”。 欧洲法院裁定，如果计算机软件的功能受到版权法保护，将使垄断创意成为可能，不利于技术进步和产业发展。欧洲法院认为，计算机软件的创意和原理不受版权法保护，只有创意和原理的表达受版权法保护。 这一裁定将使其他软件公司大胆“逆向工程”计算机软件，而无需担心会侵犯版权。 文章转载自：腾讯科技]]></description>
			<content:encoded><![CDATA[<p><br/>北京时间5月3日消息，欧洲法院（European Court of Justice）当地时间周三裁定，计算机软件的功能以及实现它所用的编程语言不受到版权法保护。</p>
<p>欧洲法院是在SAS Institute(以下简称“SAS”)起诉World Programming Limited（以下简称“WPL”）的诉讼中作出这一裁定的。SAS开发数据处理和统计分析软件。SAS系统的核心组件允许用户编写和运行利用SAS编 程语言编写的软件。通过访问SAS系统学习版，WPL开发了一款模拟SAS组件大多数功能的产品，因此，客户的应用软件能像在SAS系统上那样在WPL的 平台上运行。WPL获得了SAS系统学习版的授权。</p>
<p>欧洲法院表示，尽管WPL以了解其功能为目的使用和研究了SAS的软件，但“没有证据表明WPL曾接触或复制SAS产品的源代码”。欧洲法院裁定，“根据相关法律，获得软件授权的客户有权观察、研究或测试软件的功能，以确定软件的原理等”。</p>
<p>欧洲法院裁定，如果计算机软件的功能受到版权法保护，将使垄断创意成为可能，不利于技术进步和产业发展。欧洲法院认为，计算机软件的创意和原理不受版权法保护，只有创意和原理的表达受版权法保护。</p>
<p>这一裁定将使其他软件公司大胆“逆向工程”计算机软件，而无需担心会侵犯版权。</p>
<p>文章转载自：<a href="http://tech.qq.com/a/20120503/000044.htm" target="_blank">腾讯科技</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.chinacpu.com/2012/05/%e6%ac%a7%e6%b4%b2%e6%b3%95%e9%99%a2%e8%a3%81%e5%ae%9a%e7%bc%96%e7%a8%8b%e8%af%ad%e8%a8%80%e4%b8%8d%e5%8f%97%e7%89%88%e6%9d%83%e6%b3%95%e4%bf%9d%e6%8a%a4/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

