<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom"><title type="text">博客园_猫之良品</title><subtitle type="text">专注于PHP、Python与CMS领域</subtitle><id>http://feed.cnblogs.com/blog/u/64979/rss</id><updated>2012-05-21T06:13:56Z</updated><author><name>猫之良品</name><uri>http://www.cnblogs.com/catcat811/</uri></author><generator>feed.cnblogs.com</generator><link rel="alternate" type="text/html" href="http://www.cnblogs.com/catcat811/"/><link rel="self" type="application/atom+xml" href="http://feed.cnblogs.com/blog/u/64979/rss"/><entry><id>http://www.cnblogs.com/catcat811/archive/2012/05/18/2508204.html</id><title type="text">各种share button</title><summary type="text">facebook share&lt;a name="fb_share"&gt;&lt;/a&gt;&lt;a name="fb_share" type="icon" share_url="YOUR_URL"&gt;&lt;/a&gt;&lt;script src="http://static.ak.fbcdn.net/connect.php/js/FB.Share" type="text/javascript"&gt;&lt;/script&gt;Basic Tags(fac</summary><published>2012-05-18T10:21:00Z</published><updated>2012-05-18T10:21:00Z</updated><author><name>猫之良品</name><uri>http://www.cnblogs.com/catcat811/</uri></author><link rel="alternate" href="http://www.cnblogs.com/catcat811/archive/2012/05/18/2508204.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/catcat811/archive/2012/05/18/2508204.html"/><content type="html">&lt;p&gt;&lt;strong&gt;facebook share&lt;/strong&gt;&lt;/p&gt;&lt;div&gt;&amp;lt;a name="fb_share"&amp;gt;&amp;lt;/a&amp;gt;&lt;/div&gt;&lt;div&gt;&amp;lt;a name="fb_share" type="icon" share_url="YOUR_URL"&amp;gt;&amp;lt;/a&amp;gt;&lt;/div&gt;&lt;div&gt;&amp;lt;script src="http://static.ak.fbcdn.net/connect.php/js/FB.Share" type="text/javascript"&amp;gt;&amp;lt;/script&amp;gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;Basic Tags(facebook)&lt;/strong&gt;&lt;/p&gt;&lt;div&gt;&amp;lt;meta property="og:title" content="title" /&amp;gt;&lt;/div&gt;&lt;div&gt;&amp;lt;meta property="og:description" content="description" /&amp;gt;&lt;/div&gt;&lt;div&gt;&amp;lt;meta property="og:image" content="thumbnail_image" /&amp;gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;linkedin share&lt;/strong&gt;&lt;/p&gt;&lt;div&gt;&amp;lt;script src="http://platform.linkedin.com/in.js" type="text/javascript"&amp;gt;&amp;lt;/script&amp;gt;&lt;/div&gt;&lt;div&gt;&amp;lt;script type="IN/Share"&amp;gt;&amp;lt;/script&amp;gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;google +1 button&lt;/strong&gt;&lt;/p&gt;&lt;div&gt;&amp;lt;script type="text/javascript" src="https://apis.google.com/js/plusone.js"&amp;gt;&amp;lt;/script&amp;gt;&lt;/div&gt;&lt;div&gt;&amp;lt;g:plusone&amp;gt;&amp;lt;/g:plusone&amp;gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;google+ share&lt;/strong&gt;&lt;/p&gt;&lt;div&gt;&amp;lt;!-- Place this tag where you want the share button to render. --&amp;gt;&lt;div&gt;&amp;lt;div class="g-plus" data-action="share" data-annotation="none"&amp;gt;&amp;lt;/div&amp;gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp;&lt;/div&gt;&lt;div&gt;&amp;lt;!-- Place this tag after the last share tag. --&amp;gt;&lt;/div&gt;&lt;div&gt;&amp;lt;script type="text/javascript"&amp;gt;&lt;/div&gt;&lt;div&gt;(function() {&lt;/div&gt;&lt;div&gt;var po = document.createElement('script'); po.type = 'text/javascript'; po.async = true;&lt;/div&gt;&lt;div&gt;po.src = 'https://apis.google.com/js/plusone.js';&lt;/div&gt;&lt;div&gt;var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(po, s);&lt;/div&gt;&lt;div&gt;})();&lt;/div&gt;&amp;lt;/script&amp;gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;twitter share&lt;/strong&gt;&lt;/p&gt;&lt;div&gt;&amp;lt;a href="https://twitter.com/share" class="twitter-share-button" data-size="large" data-count="none"&amp;gt;Tweet&amp;lt;/a&amp;gt;&lt;/div&gt;&lt;div&gt;&amp;lt;script&amp;gt;!function(d,s,id){var js,fjs=d.getElementsByTagName(s)[0];if(!d.getElementById(id)){js=d.createElement(s);js.id=id;js.src="//platform.twitter.com/widgets.js";fjs.parentNode.insertBefore(js,fjs);}}(document,"script","twitter-wjs");&amp;lt;/script&amp;gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;Tweet Button(twitter)&lt;/strong&gt;&lt;/p&gt;&lt;div&gt;&amp;lt;a href="https://twitter.com/share" class="twitter-share-button" data-lang="en"&amp;gt;Tweet&amp;lt;/a&amp;gt;&lt;/div&gt;&lt;p&gt;&amp;lt;script&amp;gt;!function(d,s,id){var js,fjs=d.getElementsByTagName(s)[0];if(!d.getElementById(id)){js=d.createElement(s);js.id=id;js.src="//platform.twitter.com/widgets.js";fjs.parentNode.insertBefore(js,fjs);}}(document,"script","twitter-wjs");&amp;lt;/script&amp;gt; &amp;nbsp;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/catcat811/aggbug/2508204.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/catcat811/archive/2012/05/18/2508204.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/catcat811/archive/2012/04/14/2446899.html</id><title type="text">兼容iphone、ipad与PC平台的在线视频</title><summary type="text">HTML5 VIDEO主要的有Ogg与MPEG4两种格式Ogg = 带有 Thedora 视频编码和 Vorbis 音频编码的 Ogg 文件MPEG4 = 带有 H.264 视频编码和 AAC 音频编码的 MPEG 4 文件jwplayerjwplayer是flash播放器插件，可以载入MP4, FLV等格式，而且可以检测浏览器是否支持FLASH，在不支持FLASH的环境下，会自动转换为HTML5 VIDEO。现在PC平台基本都由FLASH来播放视频，但手持设备没有FLASH，可以使用HTML5 VIDEO来播放。如要针对iphone, ipad支持，可以转换为MP4视频，这就可以达到平台兼容</summary><published>2012-04-14T03:17:00Z</published><updated>2012-04-14T03:17:00Z</updated><author><name>猫之良品</name><uri>http://www.cnblogs.com/catcat811/</uri></author><link rel="alternate" href="http://www.cnblogs.com/catcat811/archive/2012/04/14/2446899.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/catcat811/archive/2012/04/14/2446899.html"/><content type="html">&lt;p&gt;&lt;strong&gt;HTML5 VIDEO主要的有Ogg与MPEG4两种格式&lt;/strong&gt;&lt;/p&gt;&lt;div&gt;&amp;nbsp;&lt;/div&gt;&lt;div&gt;Ogg = 带有 Thedora 视频编码和 Vorbis 音频编码的 Ogg 文件&lt;/div&gt;&lt;div&gt;MPEG4 = 带有 H.264 视频编码和 AAC 音频编码的 MPEG 4 文件&lt;/div&gt;&lt;div&gt;&amp;nbsp;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;jwplayer&lt;/strong&gt;&lt;/p&gt;&lt;div&gt;jwplayer是flash播放器插件，可以载入MP4, FLV等格式，而且可以检测浏览器是否支持FLASH，在不支持FLASH的环境下，会自动转换为HTML5 VIDEO。现在PC平台基本都由FLASH来播放视频，但手持设备没有FLASH，可以使用HTML5 VIDEO来播放。如要针对iphone, ipad支持，可以转换为MP4视频，这就可以达到平台兼容的效果。&lt;/div&gt;&lt;div&gt;&amp;nbsp;&lt;/div&gt;&lt;div&gt;并不是所有MP4都可以被FLASH载入，所以要注意转换格式&lt;/div&gt;&lt;p&gt;&lt;strong&gt;Easy HTML5 Video&lt;/strong&gt;&lt;/p&gt;&lt;div&gt;把输出格式的flash（MP4）和HTML5（MP4）选上，之后执行转换即可&lt;/div&gt;&lt;p&gt;&lt;strong&gt;格式工厂&lt;/strong&gt;&lt;/p&gt;&lt;div&gt;视频编码：AVC（H264）&lt;div&gt;音频编码：AAC&lt;/div&gt;文件格式：MP4&lt;/div&gt;&lt;img src="http://www.cnblogs.com/catcat811/aggbug/2446899.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/catcat811/archive/2012/04/14/2446899.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/catcat811/archive/2012/03/19/2406838.html</id><title type="text">joomla组件开发中的时区问题</title><summary type="text">joomla的所有组件的日期数据，都统一使用mysql的datetime，输出格式类型于2004-02-12T15:19:21这种格式好处是在数据库中可以很直观地看到时间，但仅仅只是有这个好处，坏处却一大堆，例如不方便两个日期比较，不方便计算日期之间间隔了多久，总之一切日期运算都很不方便！joomla又是个多语言CMS系统，而datetime这种格式要表达时区概念，必须在mysql的datetime上加上offset，而mysql的datetime则始终是UTC。例如中国的时区是加8小时，那么从数据库中得到的datetime还需要加上8小时，时间才是最准确的。这种换算非常重要，而且也是很容易让</summary><published>2012-03-19T13:11:00Z</published><updated>2012-03-19T13:11:00Z</updated><author><name>猫之良品</name><uri>http://www.cnblogs.com/catcat811/</uri></author><link rel="alternate" href="http://www.cnblogs.com/catcat811/archive/2012/03/19/2406838.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/catcat811/archive/2012/03/19/2406838.html"/><content type="html">&lt;p&gt;joomla的所有组件的日期数据，都统一使用mysql的datetime，输出格式类型于&lt;span&gt;2004-02-12T15:19:21&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span&gt;这种格式好处是在数据库中可以很直观地看到时间，但仅仅只是有这个好处，坏处却一大堆，例如不方便两个日期比较，不方便计算日期之间间隔了多久，总之一切日期运算都很不方便！joomla又是个多语言CMS系统，而datetime这种格式要表达时区概念，必须在mysql的datetime上加上offset，而mysql的datetime则始终是&lt;span&gt;UTC。例如中国的时区是加8小时，那么从数据库中得到的datetime还需要加上8小时，时间才是最准确的。这种换算非常重要，而且也是很容易让人忽略的部分。&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span&gt;&lt;span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;以下介绍如何准确地获取与写入时间：&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;&amp;lt;?php&lt;br/&gt;// 获取从数据库中得到的时间并显示&lt;br/&gt;echo JHTML::_('date',$row-&amp;gt;datetime , JText::_('DATE_FORMAT_LC2'));&lt;br/&gt;&lt;br/&gt;// 录入时间字串，到数据库中查询&lt;br/&gt;$config =&amp;amp; JFactory::getConfig();&lt;br/&gt;&lt;br/&gt;// 得到系统时区&lt;br/&gt;$offset = $config-&amp;gt;getValue('config.offset');&lt;br/&gt;$jdate = JFactory::getDate('2001-1-2', $offset);&lt;br/&gt;$query .= " AND i.created &amp;gt;= '".$jdate-&amp;gt;toMySQL(true)."' ";&lt;br/&gt;&lt;br/&gt;// 用当前时间进行查询&lt;br/&gt;$config = &amp;amp;JFactory::getConfig();&lt;br/&gt;$tzoffset = $config-&amp;gt;getValue('config.offset');&lt;br/&gt;$date = &amp;amp;JFactory::getDate($row-&amp;gt;created, $tzoffset);&lt;br/&gt;&lt;/div&gt;&lt;img src="http://www.cnblogs.com/catcat811/aggbug/2406838.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/catcat811/archive/2012/03/19/2406838.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/catcat811/archive/2012/03/11/2390246.html</id><title type="text">知识组织方法总结</title><summary type="text">在网络时代，知识不再是奢侈品，你很容易可以得到海量的知识文档。而往往很多人硬盘里可能有几十G的电子书，但却没有那一本是看过的，甚至到要使用知识时，你要在庞大的知识库中找到你想要的电子书，还真的不容易。当工作了一段时间后，你会慢慢了解文档管理的重要性。例如你找到一个很好程序片段应该怎么收藏？你跟你的伙伴同样编辑一份报告，怎么协调工作？合理地组织知识，知识才会为你所用，善于组织知识，你会发现你学习能力更高。而组织知识除了是一种习惯，还需要依赖于一些工具，以下把我常用的文档管理工具列出来。Word/Excel：【优点】强大编辑能力，优秀的编辑效率【点评】word可以简单制作出带导航的文档，对于组织与</summary><published>2012-03-11T08:12:00Z</published><updated>2012-03-11T08:12:00Z</updated><author><name>猫之良品</name><uri>http://www.cnblogs.com/catcat811/</uri></author><link rel="alternate" href="http://www.cnblogs.com/catcat811/archive/2012/03/11/2390246.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/catcat811/archive/2012/03/11/2390246.html"/><content type="html">&lt;p&gt;&lt;span lang="zh-CN"&gt;在网络时代，知识不再是&lt;/span&gt;&lt;span lang="zh-CN"&gt;奢侈&lt;/span&gt;&lt;span lang="zh-CN"&gt;品，你很容易可以得到海量的知识文档。而往往很多人硬盘里可能有几十&lt;/span&gt;&lt;span lang="en-US"&gt;G&lt;/span&gt;&lt;span lang="zh-CN"&gt;的电子书，但却没有那一本是看过的，甚至到要使用知识时，你要在庞大的知识库中找到你想要的电子书，还真的不容易。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;当工作了一段时间后，你会慢慢了解文档管理的重要性。例如你找到一个很好程序片段应该怎么收藏？你跟你的伙伴同样编辑一份报告，怎么协调工作？&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;合理地组织知识，知识才会为你所用，善于组织知识，你会发现你学习能力更高。而组织知识除了是一种习惯，还需要依赖于一些工具，以下把我常用的文档管理工具列出来。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;span lang="zh-CN"&gt;Word&lt;/span&gt;&lt;span lang="en-US"&gt;/Excel&lt;/span&gt;&lt;span lang="zh-CN"&gt;：&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;【优点】强大编辑能力，优秀的编辑效率&lt;/p&gt;&lt;p&gt;&amp;nbsp;【点评】word可以简单制作出带导航的文档，对于组织与阅读一个长篇的文档非常方便。word只能对文档的本身进行处理，不能对文档进行&amp;ldquo;管理&amp;rdquo;。例如你硬盘里有几十万个word文档，而你需要找与某个词相关的文档（题目或者内容相关），这时候你需要安装一个本地搜索软件（百度、GOOGLE都有这个东西），就可以像百度、GOOGLE一样搜索你本地的文档。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;span&gt;QQ&lt;/span&gt;&lt;span&gt;邮箱记事本：&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;【优点】内置搜索功能，可以导出数据&lt;/p&gt;&lt;p&gt;&amp;nbsp;【缺点】编辑功能弱，编辑效率不高&lt;/p&gt;&lt;p&gt;&amp;nbsp;【点评】小巧好用的工具，适合用于个人记事与编写草稿，但没有版本功能，要是一不小心把记事删除，就恢复不了。不过幸好有导出功能，用户可以手动进行数据备份，只不过没有导入。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;span&gt;博客：&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;【优点】信息分享、搜索引擎收录&lt;/p&gt;&lt;p&gt;&amp;nbsp;【缺点】编辑功能弱，编辑效率不高&lt;/p&gt;&lt;p&gt;&amp;nbsp;【点评】对于要分享总结与研究结果文档，博客是最好的选择。要是文档够实用，N年以后有人search到，还能记住你的大名。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;span lang="en-US"&gt;Dropbox/&lt;/span&gt;&lt;span lang="zh-CN"&gt;SugarSync&lt;/span&gt;&lt;span lang="zh-CN"&gt;（及其它文件同步软件）：&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;【优点】多种文件格式、无需手动同步、误删文件恢复、多人共享与编辑功能&lt;/p&gt;&lt;p&gt;&amp;nbsp;【缺点】不能对资源进行搜索&lt;/p&gt;&lt;p&gt;&amp;nbsp;【点评】文件同步软件无疑是重要的工具，它可以与word结合使用，实现一个能同步并且编辑能力强大的文档制作环境。不过使用时要注意软件是否会自动把文档分享出去，避免不小心把私隐信息泄漏。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;span lang="zh-CN"&gt;让我印象最深刻的是&lt;/span&gt;&lt;span lang="en-US"&gt;Dropbox&lt;/span&gt;&lt;span lang="zh-CN"&gt;的共享功能，多个帐户可以共享某个目录，允许多用户对目录进行编辑。我公司的技术文档与需求文档都用&lt;/span&gt;&lt;span lang="en-US"&gt;Dropbox&lt;/span&gt;&lt;span lang="zh-CN"&gt;来保存，文档有更新时马上都能见到。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;span&gt;SVN&lt;/span&gt;&lt;span&gt;（&lt;/span&gt;&lt;span&gt;GIT&lt;/span&gt;&lt;span&gt;）：&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;【优点】强大的版本控制、多文件格式支持、多用户编辑&lt;/p&gt;&lt;p&gt;&amp;nbsp;【点评】SVN本来用于代码版本控制，所以对于文档的修改细节与作者信息相当丰富。特别适用团队共同管理的文档。可用于代码与文档的管理与共享，不过最好不要管理太大的文件。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;span lang="zh-CN"&gt;&amp;nbsp;onenote&lt;/span&gt;&lt;span lang="en-US"&gt;/evernote/wiz&lt;/span&gt;&lt;span lang="zh-CN"&gt;：&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;【优点】编辑效率高、多用户编辑、巨大的在线容量&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;span lang="zh-CN"&gt;【点评】&lt;/span&gt;&lt;span lang="en-US"&gt;onenote&lt;/span&gt;&lt;span lang="zh-CN"&gt;与&lt;/span&gt;&lt;span lang="en-US"&gt;evernote&lt;/span&gt;&lt;span lang="zh-CN"&gt;都是很好的网络文档管理工具，其实&lt;/span&gt;&lt;span lang="en-US"&gt;onenote&lt;/span&gt;&lt;span lang="zh-CN"&gt;操作上的确更好，但&lt;/span&gt;&lt;span lang="en-US"&gt;onenote&lt;/span&gt;&lt;span lang="zh-CN"&gt;只用于&lt;/span&gt;&lt;span lang="en-US"&gt;WINDOWS PC&lt;/span&gt;&lt;span lang="zh-CN"&gt;上，&lt;/span&gt;&lt;span lang="en-US"&gt;evernote&lt;/span&gt;&lt;span lang="zh-CN"&gt;是跨平台的，甚至&lt;/span&gt;&lt;span lang="en-US"&gt;iphone&lt;/span&gt;&lt;span lang="zh-CN"&gt;手机都有&lt;/span&gt;&lt;span lang="en-US"&gt;evernode&lt;/span&gt;&lt;span lang="zh-CN"&gt;软件，对于需要在不同设备管理文档的，还是推荐用&lt;/span&gt;&lt;span lang="en-US"&gt;evernote&lt;/span&gt;&lt;span lang="zh-CN"&gt;。两个软件都支持多人编辑，近似于&lt;/span&gt;&lt;span lang="en-US"&gt;Dropbox&lt;/span&gt;&lt;span lang="zh-CN"&gt;，可用于团队文档管理。(补充：wiz近似于evernote，也是跨平台的，国内软件，不过我没用过)&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;span lang="zh-CN"&gt;在线书签&lt;/span&gt;&lt;span lang="en-US"&gt;(&lt;/span&gt;&lt;span lang="zh-CN"&gt;百度搜藏、&lt;/span&gt;&lt;span lang="en-US"&gt;QQ&lt;/span&gt;&lt;span lang="zh-CN"&gt;书签&lt;/span&gt;&lt;span lang="en-US"&gt;)&lt;/span&gt;&lt;span lang="zh-CN"&gt;：&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;【主要功能】收藏与分享网上已有的文档&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;span lang="zh-CN"&gt;【点评】大部分的知识都来源于网络，如果再把内容复制一次无疑增加了多余于工作量，也不利于收藏。对于&lt;/span&gt;&lt;span lang="en-US"&gt;WEB&lt;/span&gt;&lt;span lang="zh-CN"&gt;上的知识文档，推荐用在线书签记下来。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;span&gt;Code Snippets&lt;/span&gt;&lt;span&gt;：&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;【主要功能】程序代码分享与收藏&lt;/p&gt;&lt;p&gt;&amp;nbsp;【优点】代码语法高亮&lt;/p&gt;&lt;p&gt;&amp;nbsp;【点评】对于程序员来说，如果做程序记录却没有语法高亮是件不幸的事，所以对于代码片段的管理推荐使用针对代码片段分享的在线工具。&lt;/p&gt;&lt;img src="http://www.cnblogs.com/catcat811/aggbug/2390246.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/catcat811/archive/2012/03/11/2390246.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/catcat811/archive/2012/03/06/2381325.html</id><title type="text">Joomla 2.5 JA T3白模板的运用</title><summary type="text">T3 framework简介这是一个模板框架，可以扩展joomla模板的功能，优化模板结构。其最大特色是multiple layout system，搞过joomla模板开发的人都知道，joomla的模板只有一个index.php来决定网站整体布局，而T3 framework可以在一个模板的基础上实现多个layout，甚至可以把layout指定在不同的设置上，例如iphone、ipad、PC可以使用不同的layout，达到各平台的最佳显示效果。T3安装以下地址可以下载相应组件：http://www.joomlart.com/forums/downloads.php?do=cat&amp;id=</summary><published>2012-03-06T01:34:00Z</published><updated>2012-03-06T01:34:00Z</updated><author><name>猫之良品</name><uri>http://www.cnblogs.com/catcat811/</uri></author><link rel="alternate" href="http://www.cnblogs.com/catcat811/archive/2012/03/06/2381325.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/catcat811/archive/2012/03/06/2381325.html"/><content type="html">&lt;p&gt;&lt;strong&gt;T3 framework简介&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;这是一个模板框架，可以扩展joomla模板的功能，优化模板结构。其最大特色是multiple layout system，搞过joomla模板开发的人都知道，joomla的模板只有一个index.php来决定网站整体布局，而T3 framework可以在一个模板的基础上实现多个layout，甚至可以把layout指定在不同的设置上，例如iphone、ipad、PC可以使用不同的layout，达到各平台的最佳显示效果。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;T3安装&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;以下地址可以下载相应组件：&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.joomlart.com/forums/downloads.php?do=cat&amp;amp;id=361"&gt;http://www.joomlart.com/forums/downloads.php?do=cat&amp;amp;id=361&lt;/a&gt;&lt;/p&gt;&lt;p&gt;只需要下载安装以下两个：&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&amp;nbsp; JA T3 Blank template for joomla 2.5&lt;/li&gt;&lt;li&gt;&amp;nbsp; JA T3 System plugin for Joomla 2.5&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;JA T3 Blank template是白模板，一个新模板可以在白模板的基础上进行开发，这会省去不少开发时间，而且白模板拥有JA T3的基础结构。白模板的名字叫ja_t3_blank，要把目录名及templateDetails.xml改为自己的模板名称，这和joomla1.5是一样的。&lt;/p&gt;&lt;p&gt;JA T3 System plugin是T3的核心，T3对joomla所扩展的核心都在里面。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;以上两个安装包装好并启用后，在前台就能马上看到白模板的效果。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;layout的调整&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;JA T3的布局修改和默认的不同，不用去修改index.php文件。&lt;/p&gt;&lt;p&gt;主要需要定制的文件结构以下：&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;TEMPLATE/templateDetails.xml # 关于模板的细节，例如定义positions&lt;br/&gt;&lt;br/&gt;TEMPLATE/info.xml # layout的细节，可以指定 T3 layout加载那些css，javascript资源&lt;br/&gt;&lt;br/&gt;TEMPLATE/css/template.css # 模板的主要样式表&lt;br/&gt;&lt;br/&gt;TEMPLATE/html/ # component与module的模板&lt;br/&gt;&lt;br/&gt;TEMPLATE/etc/layouts/ # T3 layout的布局定义，可以在后台进行修改&lt;br/&gt;&lt;br/&gt;TEMPLATE/etc/profiles/ # T3 layout的参数定义，可以在后台进行修改&lt;br/&gt;&lt;/div&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;更详细的说明可以访问：http://wiki.joomlart.com/wiki/JA_T3_Framework_2/Guides&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;开发注意&lt;/strong&gt;&lt;/p&gt;&lt;ol&gt;&lt;li&gt;&amp;nbsp; T3已经集成drop-down, mega, dropline等多种menu效果，所以无需再安装menu module&lt;/li&gt;&lt;li&gt;&amp;nbsp; T3已经内置了css &amp;amp; js压缩优化与模板cache，而且是默认开启，所以对模板修改后需要clean cache才可以看到修改效果。&lt;/li&gt;&lt;li&gt;&amp;nbsp; tp=1是模板调试功能，在2.5上默认关闭，需要到template manage的option里开启&lt;/li&gt;&lt;/ol&gt;&lt;img src="http://www.cnblogs.com/catcat811/aggbug/2381325.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/catcat811/archive/2012/03/06/2381325.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/catcat811/archive/2012/03/06/2381321.html</id><title type="text">Virtuemart2 for joomla2.5</title><summary type="text">由于Virtuemart 1.x只用于joomla1.5，joomla 2.x与1.5结构差异比较大，官方需要重构Virtuemart来支持2.5，所以发布了Virtuemart2能支持joomla1.5到2.5的各个版本。Virtuemart2的特点分析Virtuemart是个单店多用户模式的购物组件，第二版功能基本与第一版相同，但与第一版结构差异很大。第一版以自定义框架为基础，其开发模式与joomla有差异，例如模板、语言包。第二版则完全使用joomla自身的框架结构，成为一个标准的joomla组件。由于使用了joomla的框架，所以第二版的优点如下：与Joomla更无缝的结合模板可以决定</summary><published>2012-03-06T01:31:00Z</published><updated>2012-03-06T01:31:00Z</updated><author><name>猫之良品</name><uri>http://www.cnblogs.com/catcat811/</uri></author><link rel="alternate" href="http://www.cnblogs.com/catcat811/archive/2012/03/06/2381321.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/catcat811/archive/2012/03/06/2381321.html"/><content type="html">&lt;p&gt;由于Virtuemart 1.x只用于joomla1.5，joomla 2.x与1.5结构差异比较大，官方需要重构Virtuemart来支持2.5，所以发布了Virtuemart2能支持joomla1.5到2.5的各个版本。&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Virtuemart2的特点分析&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;Virtuemart是个单店多用户模式的购物组件，第二版功能基本与第一版相同，但与第一版结构差异很大。第一版以自定义框架为基础，其开发模式与joomla有差异，例如模板、语言包。第二版则完全使用joomla自身的框架结构，成为一个标准的joomla组件。&lt;/p&gt;&lt;p&gt;由于使用了joomla的框架，所以第二版的优点如下：&lt;/p&gt;&lt;ol&gt;&lt;li&gt;与Joomla更无缝的结合&lt;/li&gt;&lt;li&gt;模板可以决定Virtuemart的外观，可以为Virtuemart制作模板而不影响Virtuemart日后的升级&lt;/li&gt;&lt;li&gt;可以使用标准的joomla语言包对Virtuemart进行翻译，语言包将会更丰富&lt;/li&gt;&lt;li&gt;定制开发的成本降低&lt;/li&gt;&lt;/ol&gt;&lt;p&gt;&lt;strong&gt;Virtuemart2各功能简介&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;Products&lt;/p&gt;&lt;p&gt;-- &amp;nbsp;Product Categories （产品分类管理）&lt;/p&gt;&lt;p&gt;-- &amp;nbsp;Products （产品管理）&lt;/p&gt;&lt;p&gt;-- &amp;nbsp;Custom Fields （产品字段管理，字段可以添加到任意产品上，例如color, size，都是custom fields）&lt;/p&gt;&lt;p&gt;-- &amp;nbsp;Inventory （库存管理，当缺货时会有明显的提示）&lt;/p&gt;&lt;p&gt;-- &amp;nbsp;Taxes &amp;amp; Calculation Rules （税率计算规则）&lt;/p&gt;&lt;p&gt;-- &amp;nbsp;Reviews &amp;amp; Ratings （评价，每个产品都可以有顾客评价功能，就在产品内页的下方）&lt;/p&gt;&lt;p&gt;Orders &amp;amp; Shoppers&lt;/p&gt;&lt;p&gt;-- &amp;nbsp;Orders （订单管理）&lt;/p&gt;&lt;p&gt;-- &amp;nbsp;Revenue Report （收入统计报告）&lt;/p&gt;&lt;p&gt;-- &amp;nbsp;Shoppers （店员管理，除了管理员外，还可以添加店员，来管理库存或者产品信息）&lt;/p&gt;&lt;p&gt;-- &amp;nbsp;Shopper Groups （店员分组，也可以用于对顾客进行分类，例如高级会员与一般会员）&lt;/p&gt;&lt;p&gt;-- &amp;nbsp;Coupons （优惠卷，以特定的编号，可以给产品进行折扣销售）&lt;/p&gt;&lt;p&gt;Manufacturers&lt;/p&gt;&lt;p&gt;-- &amp;nbsp;Manufacturers （供应商管理）&lt;/p&gt;&lt;p&gt;-- &amp;nbsp;Manufacturer categories （供应商分类管理）&lt;/p&gt;&lt;p&gt;Shop&lt;/p&gt;&lt;p&gt;-- &amp;nbsp;Shop （商店设置，VM是单店系统，所以里面只有店相关的设置，例如店名）&lt;/p&gt;&lt;p&gt;-- &amp;nbsp;Media Files （媒体文件管理，一般情况下，媒体文件由产品引用）&lt;/p&gt;&lt;p&gt;-- &amp;nbsp;Shipment Methods （运货方式）&lt;/p&gt;&lt;p&gt;-- &amp;nbsp;Payment Methods （支持方式）&lt;/p&gt;&lt;p&gt;Configuration&lt;/p&gt;&lt;p&gt;-- &amp;nbsp;Configuration （关于VM的详细设置、模板设置）&lt;/p&gt;&lt;p&gt;-- &amp;nbsp;Shopper Fields （店员字段，用于管理店员相关信息的表现能力）&lt;/p&gt;&lt;p&gt;-- &amp;nbsp;Order Statuses （订单状态）&lt;/p&gt;&lt;p&gt;-- &amp;nbsp;Currencies （货币，VM支持多种货币支付，即一个产品可以以多个国家的货币进行交易）&lt;/p&gt;&lt;p&gt;-- &amp;nbsp;Countries （国家列表，可以调整VM可接受交易的国家）&lt;/p&gt;&lt;img src="http://www.cnblogs.com/catcat811/aggbug/2381321.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/catcat811/archive/2012/03/06/2381321.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/catcat811/archive/2011/11/23/2260412.html</id><title type="text">Drupal的高速缓存配置APC</title><summary type="text">APC安装yum install pcre pcre-develpecl install apcPHP加载APCvi /etc/php.ini加入内容extension = apc.soapc.enabled = 1apc.shm_size = 32apc.include_once_override = 1apc.mmap_file_mask = /tmp/apc.XXXXXXAPC调试APC自带一个PHP调试程序，可以查询APC运行情况（附件为查询界面）搜索apc.php# locate apc.php具体请访问http://www.vpsee.com/2009/07/integrating</summary><published>2011-11-23T07:41:00Z</published><updated>2011-11-23T07:41:00Z</updated><author><name>猫之良品</name><uri>http://www.cnblogs.com/catcat811/</uri></author><link rel="alternate" href="http://www.cnblogs.com/catcat811/archive/2011/11/23/2260412.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/catcat811/archive/2011/11/23/2260412.html"/><content type="html">&lt;div&gt;&lt;strong&gt;APC安装&lt;/strong&gt;&lt;br /&gt;yum install pcre pcre-devel&lt;br /&gt;pecl install apc&lt;/div&gt;&lt;div&gt;&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;strong&gt;PHP加载APC&lt;/strong&gt;&lt;br /&gt;vi /etc/php.ini&lt;br /&gt;加入内容&lt;br /&gt;extension = apc.so&lt;br /&gt;apc.enabled = 1&lt;br /&gt;apc.shm_size = 32&lt;br /&gt;apc.include_once_override = 1&lt;br /&gt;apc.mmap_file_mask = /tmp/apc.XXXXXX&lt;/div&gt;&lt;div&gt;&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;strong&gt;APC调试&lt;br /&gt;&lt;/strong&gt;APC自带一个PHP调试程序，可以查询APC运行情况&lt;/div&gt;&lt;div&gt;（附件为查询界面）&lt;/div&gt;&lt;div&gt;&lt;br /&gt;搜索apc.php&lt;br /&gt;# locate apc.php&lt;/div&gt;&lt;div&gt;具体请访问&lt;br /&gt;&lt;a href="http://www.vpsee.com/2009/07/integrating-apc-with-php-on-vps/" target="_blank"&gt;http://www.vpsee.com/2009/07/integrating-apc-with-php-on-vps/&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;strong&gt;Drupal整合APC&lt;/strong&gt;&lt;br /&gt;drupal6可以用Cache Router来整合APC&lt;br /&gt;&lt;a href="http://drupal.org/project/cacherouter" target="_blank"&gt;http://drupal.org/project/cacherouter&lt;/a&gt;&lt;br /&gt;drupal7可以用APC module&lt;br /&gt;&lt;a href="http://drupal.org/project/apc" target="_blank"&gt;http://drupal.org/project/apc&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp;&lt;/div&gt;&lt;div&gt;安装Cache Router后按照官方文档进行配置，engine有apc, db, file, memcache, xcache可选。&lt;br /&gt;apc, memcache, xcache都是PHP上较主流的高速缓存服务，需要服务器支持。现在我们需要让它使用APC，所以把engine设为apc&lt;br /&gt;然后开启drupal的cache，APC cache就会生效。&lt;/div&gt;&lt;img src="http://www.cnblogs.com/catcat811/aggbug/2260412.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/catcat811/archive/2011/11/23/2260412.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/catcat811/archive/2011/10/29/2228276.html</id><title type="text">zope.component的简单例子</title><summary type="text">from zope.interface import Interface, Attribute, implementsfrom zope.component import adapts, getAdapter, getUtility, getGlobalSiteManager# Interfaceclass IPerson(Interface): name = Attribute("Name") email = Attribute("Email Address") phone = Attribute("Phone Number")cl</summary><published>2011-10-28T16:36:00Z</published><updated>2011-10-28T16:36:00Z</updated><author><name>猫之良品</name><uri>http://www.cnblogs.com/catcat811/</uri></author><link rel="alternate" href="http://www.cnblogs.com/catcat811/archive/2011/10/29/2228276.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/catcat811/archive/2011/10/29/2228276.html"/><content type="html">&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;from zope.interface import Interface, Attribute, implements&lt;br/&gt;from zope.component import adapts, getAdapter, getUtility, getGlobalSiteManager&lt;br/&gt;&lt;br/&gt;# Interface&lt;br/&gt;class IPerson(Interface):&lt;br/&gt;     name = Attribute("Name")&lt;br/&gt;     email = Attribute("Email Address")&lt;br/&gt;     phone = Attribute("Phone Number")&lt;br/&gt;&lt;br/&gt;class IPersonAdapter(Interface):&lt;br/&gt;    def showName():&lt;br/&gt;        """showName"""&lt;br/&gt;    &lt;br/&gt;    def showMail():&lt;br/&gt;        """showMail"""&lt;br/&gt;&lt;br/&gt;class IUtility(Interface):&lt;br/&gt;    def doSomething():&lt;br/&gt;        """doSomething"""&lt;br/&gt;&lt;br/&gt;# Implements&lt;br/&gt;class Person(object):&lt;br/&gt;    implements(IPerson)&lt;br/&gt;&lt;br/&gt;    name = None&lt;br/&gt;    email = None&lt;br/&gt;    phone = None&lt;br/&gt;&lt;br/&gt;class PersonAdapter(object):&lt;br/&gt;    implements(IPersonAdapter)&lt;br/&gt;    adapts(IPerson)&lt;br/&gt;    &lt;br/&gt;    def __init__(self, person):&lt;br/&gt;        self.person = person&lt;br/&gt;    &lt;br/&gt;    def showName(self):&lt;br/&gt;        print(self.person.name)&lt;br/&gt;    &lt;br/&gt;    def showMail(self):&lt;br/&gt;        print(self.person.email)&lt;br/&gt;&lt;br/&gt;class Utility(object):&lt;br/&gt;    implements(IUtility)&lt;br/&gt;    &lt;br/&gt;    def doSomething(self):&lt;br/&gt;        print("doSomething")&lt;br/&gt;    &lt;br/&gt;&lt;br/&gt;if __name__ == '__main__':&lt;br/&gt;    gsm = getGlobalSiteManager()&lt;br/&gt;    &lt;br/&gt;    # use Adapter&lt;br/&gt;    gsm.registerAdapter(PersonAdapter)&lt;br/&gt;    person = Person()&lt;br/&gt;    person.name = "William"&lt;br/&gt;    person.email = "admin@qq.com"&lt;br/&gt;    person.phone = "000000"&lt;br/&gt;    personAd = getAdapter(person, IPersonAdapter)&lt;br/&gt;    personAd.showName()&lt;br/&gt;    &lt;br/&gt;    # use Utility&lt;br/&gt;    utility = Utility()&lt;br/&gt;    gsm.registerUtility(utility, IUtility)&lt;br/&gt;    getUtility(IUtility).doSomething()&lt;br/&gt;&lt;/div&gt;&lt;p&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/catcat811/aggbug/2228276.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/catcat811/archive/2011/10/29/2228276.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/catcat811/archive/2011/10/19/2218201.html</id><title type="text">网上找来经过改良的多级联动下拉菜单</title><summary type="text">&lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"&gt;&lt;html xmlns="http://www.w3.org/1999/xhtml"&gt;&lt;head&gt;&lt;meta http-equiv="Content-Type" content="text/html; charset=gb23</summary><published>2011-10-19T13:18:00Z</published><updated>2011-10-19T13:18:00Z</updated><author><name>猫之良品</name><uri>http://www.cnblogs.com/catcat811/</uri></author><link rel="alternate" href="http://www.cnblogs.com/catcat811/archive/2011/10/19/2218201.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/catcat811/archive/2011/10/19/2218201.html"/><content type="html">&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;&amp;lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"&amp;gt;&lt;br/&gt;&amp;lt;html xmlns="http://www.w3.org/1999/xhtml"&amp;gt;&lt;br/&gt;&amp;lt;head&amp;gt;&lt;br/&gt;&amp;lt;meta http-equiv="Content-Type" content="text/html; charset=gb2312" /&amp;gt;&lt;br/&gt;&amp;lt;title&amp;gt;Selects&amp;lt;/title&amp;gt;&lt;br/&gt;&amp;lt;style type="text/css"&amp;gt;&lt;br/&gt;*{font-size:14px;}&lt;br/&gt;select{height:20px;font-size:12px;}&lt;br/&gt;&amp;lt;/style&amp;gt;&lt;br/&gt;&amp;lt;/head&amp;gt;&lt;br/&gt;&amp;lt;script type="text/javascript"&amp;gt;&lt;br/&gt;var $Sys = (function(ua){&lt;br/&gt;var s = {};&lt;br/&gt;s.IE = ua.match(/msie ([\d.]+)/)?true:false;&lt;br/&gt;s.Firefox = ua.match(/firefox\/([\d.]+)/)?true:false;&lt;br/&gt;s.Chrome = ua.match(/chrome\/([\d.]+)/)?true:false;&lt;br/&gt;s.IE6 = (s.IE&amp;amp;&amp;amp;([/MSIE (\d)\.0/i.exec(navigator.userAgent)][0][1] == 6))?true:false;&lt;br/&gt;s.IE7 = (s.IE&amp;amp;&amp;amp;([/MSIE (\d)\.0/i.exec(navigator.userAgent)][0][1] == 7))?true:false;&lt;br/&gt;s.IE8 = (s.IE&amp;amp;&amp;amp;([/MSIE (\d)\.0/i.exec(navigator.userAgent)][0][1] == 8))?true:false;&lt;br/&gt;return s;&lt;br/&gt;})(navigator.userAgent.toLowerCase());&lt;br/&gt;$Sys.IE6&amp;amp;&amp;amp;document.execCommand("BackgroundImageCache", false, true); &lt;br/&gt;var $EL = function(Id){&lt;br/&gt;return document.getElementById(Id);&lt;br/&gt;};&lt;br/&gt;var $$EL = function(p,e){&lt;br/&gt;return p.getElementsByTagName(e);&lt;br/&gt;};&lt;br/&gt;var $addListener = function(element,e,fn){&lt;br/&gt;element.addEventListener?element.addEventListener(e,fn,false):element.attachEvent("on" + e,fn);&lt;br/&gt;};&lt;br/&gt;var $removeListener = function(element,e,fn){&lt;br/&gt;element.removeEventListener?element.removeEventListener(e,fn,false):element.detachEvent("on" + e,fn);&lt;br/&gt;};&lt;br/&gt;var $Bind = function(object, fun) {&lt;br/&gt;var args = Array.prototype.slice.call(arguments).slice(2);&lt;br/&gt;return function() {&lt;br/&gt;return fun.apply(object, args);&lt;br/&gt;};&lt;br/&gt;};&lt;br/&gt;var $BindAsEventListener = function(object, fun) {&lt;br/&gt;var args = Array.prototype.slice.call(arguments).slice(2);&lt;br/&gt;return function(event) {&lt;br/&gt;return fun.apply(object, [event || window.event].concat(args));&lt;br/&gt;};&lt;br/&gt;};&lt;br/&gt;var $Extend = function(destination, source){&lt;br/&gt;    for (var property in source) {&lt;br/&gt;        destination[property] = source[property];&lt;br/&gt;    };&lt;br/&gt;    return destination;&lt;br/&gt;};&lt;br/&gt;var $Class = function(properties){&lt;br/&gt;var _class = function(){return (arguments[0] !== null &amp;amp;&amp;amp; this.initialize &amp;amp;&amp;amp; typeof(this.initialize) == 'function') ? this.initialize.apply(this, arguments) : this;};&lt;br/&gt;_class.prototype = properties;&lt;br/&gt;return _class;&lt;br/&gt;};&lt;br/&gt;&lt;br/&gt;var Selects = new $Class({&lt;br/&gt;    defaults: {&lt;br/&gt;        label:"- Please choose -",&lt;br/&gt;        default_value:"",&lt;br/&gt;        separator: ""&lt;br/&gt;    },&lt;br/&gt;initialize :function(container, name, data, title){&lt;br/&gt;this.container  = container;&lt;br/&gt;this.num = title.length;&lt;br/&gt;this.Events = new Array(title.length-1);&lt;br/&gt;        this.name = name;&lt;br/&gt;        var opts = typeof arguments[4] !== 'undefined' ? arguments[4] : {};&lt;br/&gt;        this.opts = $Extend(this.defaults, opts);&lt;br/&gt;var i,l,select;&lt;br/&gt;for(i=0; i&amp;lt;this.num; i++)&lt;br/&gt;{&lt;br/&gt;container.innerHTML = container.innerHTML + " &amp;lt;label&amp;gt;" + title[i] + ":&amp;lt;/label&amp;gt;";&lt;br/&gt;container.appendChild(document.createElement('select'));&lt;br/&gt;            container.innerHTML = container.innerHTML + this.opts.separator;&lt;br/&gt;}&lt;br/&gt;        var hiddenInput = document.createElement('input');&lt;br/&gt;        hiddenInput.name = name;&lt;br/&gt;        hiddenInput.type = "hidden";&lt;br/&gt;        container.appendChild(hiddenInput);&lt;br/&gt;        this.hiddenInput = hiddenInput;&lt;br/&gt;select = $$EL(container,'select')[0];&lt;br/&gt;        select.options.add(new Option(this.opts.label, ""));&lt;br/&gt;for(i=0,l=data.length;i&amp;lt;l;i++)&lt;br/&gt;select.options.add(new Option(data[i].text,data[i].value));&lt;br/&gt;$addListener(select,'change',$Bind(this,this.Change,select,data,0));&lt;br/&gt;        if(this.opts.default_value != "") {&lt;br/&gt;            var paths = this.FindPath(data, this.opts.default_value);&lt;br/&gt;            for(var i=0,l=paths.length; i&amp;lt;l; i++) {&lt;br/&gt;                select = $$EL(container, 'select')[i];&lt;br/&gt;                this.setSelectValue(select, paths[i]);&lt;br/&gt;                this.Change(select,data,i);&lt;br/&gt;            }&lt;br/&gt;        } else {&lt;br/&gt;    this.Change(select,data,0);&lt;br/&gt;        }&lt;br/&gt;},&lt;br/&gt;Change : function(obj,data,num){&lt;br/&gt;        this.hiddenInput.value = obj.value;&lt;br/&gt;if(num == this.num-1)return;&lt;br/&gt;var child = this.Find(data, obj.value).child;&lt;br/&gt;select = $$EL(this.container,'select')[num+1];&lt;br/&gt;select.length = 0;&lt;br/&gt;if(!child)return;&lt;br/&gt;if(this.Events[num]!=undefined) $removeListener(select,'change',this.Events[num]);&lt;br/&gt;this.Events[num] = $Bind(this,this.Change,select,child,num+1);&lt;br/&gt;$addListener(select,'change',this.Events[num]);&lt;br/&gt;        select.options.add(new Option(this.opts.label, ""));&lt;br/&gt;for(var i=0,l=child.length;i&amp;lt;l;i++) {&lt;br/&gt;select.options.add(new Option(child[i].text,child[i].value));&lt;br/&gt;        }&lt;br/&gt;this.Change(select,child,num+1);&lt;br/&gt;},&lt;br/&gt;    Find : function(data, value) {&lt;br/&gt;        for(var i=0, l=data.length; i&amp;lt;l; i++) {&lt;br/&gt;            if(data[i].value == value) {&lt;br/&gt;                return data[i];&lt;br/&gt;            }&lt;br/&gt;        }&lt;br/&gt;        return {};&lt;br/&gt;    },&lt;br/&gt;    FindPath : function(data, value) {&lt;br/&gt;        var pathArr = [];&lt;br/&gt;        var result;&lt;br/&gt;        for(var i=0, l=data.length; i&amp;lt;l; i++) {&lt;br/&gt;            if(data[i].child) {&lt;br/&gt;                result = this.FindPath(data[i].child, value);&lt;br/&gt;                if(result) {&lt;br/&gt;                    return [data[i].value].concat(result);&lt;br/&gt;                }&lt;br/&gt;            }&lt;br/&gt;            if(data[i].value == value) {&lt;br/&gt;                return [value];&lt;br/&gt;            }&lt;br/&gt;        }&lt;br/&gt;        return false;&lt;br/&gt;    },&lt;br/&gt;    setSelectValue : function(el, value) {&lt;br/&gt;    for(var i=0; i&amp;lt;el.options.length; i++)&lt;br/&gt;    {&lt;br/&gt;    if(el.options[i].value == value)&lt;br/&gt;    {&lt;br/&gt;    el.options[i].selected = true;&lt;br/&gt;    }&lt;br/&gt;    }&lt;br/&gt;    }&lt;br/&gt;});&lt;br/&gt;&amp;lt;/script&amp;gt;&lt;br/&gt;&amp;lt;body &amp;gt;&lt;br/&gt;&amp;lt;div style='color:red'&amp;gt;2级联动&amp;lt;/div&amp;gt;&lt;br/&gt;&amp;lt;div id='demo1'&amp;gt;&amp;lt;/div&amp;gt;&lt;br/&gt;&amp;lt;script type="text/javascript"&amp;gt;&lt;br/&gt;var data = [&lt;br/&gt;    {value:5, text:"人族", child:[{value:2, text:"法师"}, {value:6, text:"战士"}]},&lt;br/&gt;    {value:3, text:"兽族", child:[{value:4, text:"神鸟凤凰"}]}&lt;br/&gt;];&lt;br/&gt;new Selects($EL('demo1'), "post1", data, ["种族","英雄"], {default_value:6});&lt;br/&gt;&amp;lt;/script&amp;gt;&lt;br/&gt;&amp;lt;/body&amp;gt;&lt;br/&gt;&amp;lt;/html&amp;gt;&lt;br/&gt;&lt;/div&gt;&lt;p&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/catcat811/aggbug/2218201.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/catcat811/archive/2011/10/19/2218201.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/catcat811/archive/2011/10/14/2212234.html</id><title type="text">Drupal6 邮件群发到指定角色</title><summary type="text">开源里有的东西，应该尽量复用，Drupal6要写个群发功能比较花时间，这可以使用action_email_role这个module。它本来是个action，需要trigger来激活。但它里面就有现成的群发功能，只要激活了它，功能就可以用代码调用。以下是群发例子：&lt;?php$context = array( 'subject' =&gt; 'Test - send mail to administrator', 'message' =&gt; 'The content.', 'recipient' =&gt; </summary><published>2011-10-14T06:57:00Z</published><updated>2011-10-14T06:57:00Z</updated><author><name>猫之良品</name><uri>http://www.cnblogs.com/catcat811/</uri></author><link rel="alternate" href="http://www.cnblogs.com/catcat811/archive/2011/10/14/2212234.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/catcat811/archive/2011/10/14/2212234.html"/><content type="html">&lt;p&gt;开源里有的东西，应该尽量复用，Drupal6要写个群发功能比较花时间，这可以使用action_email_role这个module。它本来是个action，需要trigger来激活。但它里面就有现成的群发功能，只要激活了它，功能就可以用代码调用。&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;以下是群发例子：&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;&amp;lt;?php&lt;br/&gt;$context = array(&lt;br/&gt;  'subject' =&amp;gt; 'Test - send mail to administrator',&lt;br/&gt;  'message' =&amp;gt; 'The content.',&lt;br/&gt;  'recipient' =&amp;gt; array(&lt;br/&gt;    3 =&amp;gt; 'administrator',&lt;br/&gt;    5 =&amp;gt; 'super administrator'&lt;br/&gt;  )&lt;br/&gt;);&lt;br/&gt;$object = new stdClass;&lt;br/&gt;action_email_role_send_email_to_roles($object, $context);&lt;br/&gt;&lt;/div&gt;&lt;p&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/catcat811/aggbug/2212234.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/catcat811/archive/2011/10/14/2212234.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry></feed>
