<?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>里克的自习室 &#187; plugin</title>
	<atom:link href="http://railser.cn/blog/tag/plugin/feed" rel="self" type="application/rss+xml" />
	<link>http://railser.cn</link>
	<description>关注Ruby和Rails的学习与开发</description>
	<lastBuildDate>Sun, 26 Feb 2012 12:20:51 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>redmine插件开发心得</title>
		<link>http://railser.cn/blog/redmine-plugin-dev-note</link>
		<comments>http://railser.cn/blog/redmine-plugin-dev-note#comments</comments>
		<pubDate>Tue, 29 Mar 2011 06:13:47 +0000</pubDate>
		<dc:creator>里克</dc:creator>
				<category><![CDATA[Advanced Rails]]></category>
		<category><![CDATA[iPhone]]></category>
		<category><![CDATA[plugin]]></category>
		<category><![CDATA[redmine]]></category>

		<guid isPermaLink="false">http://railser.cn/?p=591</guid>
		<description><![CDATA[上上周经Q友介绍，接了一个redmine插件开发的小项目。我很感兴趣的是可以借此机会把redmine熟悉一下，所以没太考虑价钱就答应了下来。现在想想，这次开发学到的东西很多，也认识了专业的开发团队，很值得。下面把redmine插件开发的经验笔记一下。 先来截图： 地址：http://www.cocos2d-x.org/projects/cocos2d-x/apps 简单介绍下 cocos2d-x is a multi-platform, light weight &#38; developer-friendly C++ 2D mobile game engine, open source and released under MIT License. It is a child branch of the famous "cocos2d-iphone" project, and will keep the primary features sync with it. 更多细节请访问 http://www.cocos2d-x.org/projects/cocos2d-x/wiki 好了，说下这个插件实现的功能。 一是管理发布平台，比如iOS，Android，WoPhone，Windows，Other，未来它还会有其他的平台。 二是在这些平台分类里，上传app，比如时下最火的iOS app，android app等。当上传iOS app时，可自动采集该信息。 一、让我们开始 插件如何开发呢？下载其他插件的代码来研究是关键的第一步。因为之前对redmine插件开发一无所知，所以下面的笔记有点啰唆。 先看一下官方发布的插件开发文档，http://www.redmine.org/projects/redmine/wiki/Plugin_Tutorial，请大概的了解一下。然后，我们去redmine插件列表，下载两个很有代表性的插件，redmine_polls和redmine_bookmarks，把它们放到 vendor/plugins 里。选择这两个插件的原因是它们都是自主上传，填写内容的。 [...]]]></description>
			<content:encoded><![CDATA[<p>上上周经Q友介绍，接了一个redmine插件开发的小项目。我很感兴趣的是可以借此机会把redmine熟悉一下，所以没太考虑价钱就答应了下来。现在想想，这次开发学到的东西很多，也认识了专业的开发团队，很值得。下面把redmine插件开发的经验笔记一下。</p>
<p>先来截图：</p>
<p><a href="http://railser.cn/wp-content/uploads/屏幕快照-2011-03-20-11.08.28.png"><img class="aligncenter size-medium wp-image-592" title="屏幕快照 2011-03-20 11.08.28" src="http://railser.cn/wp-content/uploads/屏幕快照-2011-03-20-11.08.28-300x193.png" alt="" width="300" height="193" /></a></p>
<p>地址：<a href="http://www.cocos2d-x.org/projects/cocos2d-x/apps" target="_blank">http://www.cocos2d-x.org/projects/cocos2d-x/apps</a></p>
<p>简单介绍下</p>
<p>cocos2d-x is a multi-platform, light weight &amp; developer-friendly C++ 2D mobile game engine, open source and released under MIT License. It is a child branch of the famous "cocos2d-iphone" project, and will keep the primary features sync with it.</p>
<p>更多细节请访问 <a href="http://www.cocos2d-x.org/projects/cocos2d-x/wiki" target="_blank">http://www.cocos2d-x.org/projects/cocos2d-x/wiki</a></p>
<p>好了，说下这个插件实现的功能。</p>
<p>一是管理发布平台，比如iOS，Android，WoPhone，Windows，Other，未来它还会有其他的平台。</p>
<p>二是在这些平台分类里，上传app，比如时下最火的iOS app，android app等。当上传iOS app时，可自动采集该信息。</p>
<h3>一、让我们开始</h3>
<p>插件如何开发呢？下载其他插件的代码来研究是关键的第一步。因为之前对redmine插件开发一无所知，所以下面的笔记有点啰唆。</p>
<p>先看一下官方发布的插件开发文档，<a href="http://www.redmine.org/projects/redmine/wiki/Plugin_Tutorial" target="_blank">http://www.redmine.org/projects/redmine/wiki/Plugin_Tutorial</a>，请大概的了解一下。然后，我们去<a href="http://www.redmine.org/plugins" target="_blank">redmine插件列表</a>，下载两个很有代表性的插件，redmine_polls和redmine_bookmarks，把它们放到 vendor/plugins 里。选择这两个插件的原因是它们都是自主上传，填写内容的。</p>
<p>注意：在最新版本的redmine1.1中，polls会引起个异常。</p>
<h3>二、如何管理插件</h3>
<p><a href="http://railser.cn/wp-content/uploads/屏幕快照-2011-03-29-10.10.25.png"><img class="aligncenter size-medium wp-image-595" title="屏幕快照 2011-03-29 10.10.25" src="http://railser.cn/wp-content/uploads/屏幕快照-2011-03-29-10.10.25-300x105.png" alt="" width="300" height="105" /></a>这是插件管理界面，如果你按照上面插件教程开发的话，你会发现缺少了Configure功能。如何加入这个功能，并且它可以做什么？可以完全的参考上面两个插件中的init.rb 和games插件里的写法。</p>
<p>&nbsp;</p>
<pre class="ruby">settings <span style="color:#ff3333; font-weight:bold;">:default</span> =&amp;gt; <span style="color:#006600; font-weight:bold;">&#123;</span><span style="color:#006600; font-weight:bold;">&#125;</span>,
           <span style="color:#ff3333; font-weight:bold;">:partial</span> =&amp;gt; <span style="color:#996600;">'platforms/manage'</span></pre>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>这两行代码的作用，使得我们可以编辑一个页面，这个页面里，实现了games的platform管理。当然，你也可以在configure里增加apps的管理，丰富管理员功能。</p>
<p>这里要注意的是，权限如何分配了。</p>
<h3>三、如何分配权限</h3>
<p>按照文档的描述，我们可以很妥善的分配各个角色的权限。public =&gt; true，即可将所指定的action开放给所有人，如果想屏蔽掉未登录的账号访问，:require =&gt; :loggedin 即可。如果想对登录账号做区别，就需要针对每个action做以分别了。</p>
<p>权限设置的文档不够全，建议大家多参考别人的代码，和看源代码分析一些用法。</p>
<h3>四、设置导航菜单</h3>
<p>在插件的init.rb文件里，需要单独写一遍插件所使用的路由规则，为了是插件地址更没关，我们的做一些代码上的牺牲。</p>
<p>&nbsp;</p>
<pre class="ruby"><span style="color:#6666ff; font-weight:bold;">ActionController::Routing::Routes</span>.<span style="color:#9900CC;">draw</span> <span style="color:#9966CC; font-weight:bold;">do</span> |map|
  map.<span style="color:#9900CC;">connect</span> <span style="color:#996600;">'projects/:project_id/apps'</span>, <span style="color:#ff3333; font-weight:bold;">:controller</span> =&amp;gt; <span style="color:#996600;">&quot;apps&quot;</span>, <span style="color:#ff3333; font-weight:bold;">:action</span> =&amp;gt; <span style="color:#996600;">&quot;index&quot;</span>
  map.<span style="color:#9900CC;">connect</span> <span style="color:#996600;">'projects/:project_id/apps/all'</span>, <span style="color:#ff3333; font-weight:bold;">:controller</span> =&amp;gt; <span style="color:#996600;">&quot;apps&quot;</span>, <span style="color:#ff3333; font-weight:bold;">:action</span> =&amp;gt; <span style="color:#996600;">&quot;all&quot;</span>
  map.<span style="color:#9900CC;">connect</span> <span style="color:#996600;">'projects/:project_id/apps/:id'</span>, <span style="color:#ff3333; font-weight:bold;">:controller</span> =&amp;gt; <span style="color:#996600;">&quot;apps&quot;</span>, <span style="color:#ff3333; font-weight:bold;">:action</span> =&amp;gt; <span style="color:#996600;">&quot;show&quot;</span>
  map.<span style="color:#9900CC;">resources</span> <span style="color:#ff3333; font-weight:bold;">:apps</span>,
    <span style="color:#ff3333; font-weight:bold;">:member</span> =&amp;gt; <span style="color:#006600; font-weight:bold;">&#123;</span>:recommend =&amp;gt; <span style="color:#ff3333; font-weight:bold;">:post</span>, <span style="color:#ff3333; font-weight:bold;">:delete_pic</span> =&amp;gt; <span style="color:#ff3333; font-weight:bold;">:post</span>, <span style="color:#ff3333; font-weight:bold;">:snatching</span> =&amp;gt; <span style="color:#ff3333; font-weight:bold;">:get</span>, <span style="color:#ff3333; font-weight:bold;">:doing</span> =&amp;gt; <span style="color:#ff3333; font-weight:bold;">:post</span><span style="color:#006600; font-weight:bold;">&#125;</span>,
    <span style="color:#ff3333; font-weight:bold;">:collection</span> =&amp;gt; <span style="color:#006600; font-weight:bold;">&#123;</span>:all =&amp;gt; <span style="color:#ff3333; font-weight:bold;">:get</span><span style="color:#006600; font-weight:bold;">&#125;</span>
<span style="color:#9966CC; font-weight:bold;">end</span></pre>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>这是games里的设置，只是将三个方法做了前缀处理，这样可以和其他导航链接类似，都是 /projects/text_proj/apps/9 的形式。否则，按照resource的形式，将会是很难看（客户也不会接受的）/apps/9?project_id=text_proj</p>
<h3>五、开发插件代码</h3>
<p>这是我们最熟悉的部分了，此处省略一万字节。</p>
<h3>六、使用js和css</h3>
<p>这个地方有点麻烦，每次改动都得重启一下服务，因为每次重启才会将js代码和css文件同步到public下，当然我们可以在public下去写，收工前拿回到插件目录下，可是插件用的文件都不大，何况我都是production下开发，改哪个代码都得重启。（development下的执行速度你们是知道的）。</p>
<h3>七、抓取app store</h3>
<p>games插件有一个很重要的功能，就是到app store页面去采集app信息。代码在lib下的app_snatcher.rb，功能比较简单，仅做参考吧。</p>
<h3>八、其他插件和gem</h3>
<p>出于尝试的目的，我使用了will_paginate插件来实现分页，paperclip来保存app采集时候的icon和screenshot，在采集时使用了两个gem，请编辑你的environment.rb，增加</p>
<pre class="ruby">config.<span style="color:#9900CC;">gem</span> <span style="color:#996600;">'hpricot'</span>
config.<span style="color:#9900CC;">gem</span> <span style="color:#996600;">'mechanize'</span></pre>
<p>&nbsp;</p>
<h3>九、总结</h3>
<p>如果你觉得这个代码对你开发redmine插件又帮助，可以在这里下载它：https://github.com/liwei78/redmine-games 。</p>
<p>欢迎和各位交个朋友，我个人的博客：<a href="http://liwei.me" target="_blank">http://liwei.me</a>，目前正在设计新的界面，会把我的介绍，包括工作内容，都整理发布到上面。</p>
<h3>十：广告一下</h3>
<p>目前我还运营这另外两个博客，<a href="http://www.echangchun.net" target="_blank">电子长春</a> 和 <a href="http://top360buy.com" target="_blank">京东购物导航 </a>。</p>
<p>前者关注电子商务动态和IT业内新闻，后者为京东商城点评，购物推介点评。</p>
<p>&nbsp;</p>
<p>Update at 2011-6-15</p>
<p>升级了一下，0.0.1到0.0.2，增加了lightbox显示screenshots</p>
]]></content:encoded>
			<wfw:commentRss>http://railser.cn/blog/redmine-plugin-dev-note/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>sns网站开发经验总结：中国省份城市插件（一）</title>
		<link>http://railser.cn/blog/sns-notes-china-province-and-city-select-plugin</link>
		<comments>http://railser.cn/blog/sns-notes-china-province-and-city-select-plugin#comments</comments>
		<pubDate>Sun, 03 May 2009 14:31:30 +0000</pubDate>
		<dc:creator>里克</dc:creator>
				<category><![CDATA[RailsNote]]></category>
		<category><![CDATA[plugin]]></category>
		<category><![CDATA[sns]]></category>

		<guid isPermaLink="false">http://railser.cn/?p=395</guid>
		<description><![CDATA[写在前面： 经过三个多月的共同努力，sns项目终于完成上线了。感谢众位合作兄弟的持续支持和热情投入。项目走过了开发，完善，再开发，再完善的过程。下面逐步将开发中的经验和大家分享。期待和大家共同交流，提高水平。谢谢！ 今天首先介绍一个优秀的插件，city_helper。 代码：http://github.com/yzhang/city_helper/tree/master 网站：http://www.letrails.cn/archives/city-helper-a-plugin-provide-state-and-city-select 功能：实现国内省份，城市的联动选择。 特点：这个省份城市联动选择功能，是sns网站必备的功能之一。我们不用反复的造轮子啦，感谢作者的分享。 修正：插件中有一点点小错误，已经在作者博客留言。使用的朋友会发现的。 1、CITIES，keys中广西应为广东 2、海南的城市没有加，我添加了两个 ‘海南’ =&#62; [’海口’, ‘三亚’], 还有一个太合适的设置，一是 state_and_city_select 方法初始化时，省份为北京，城市为所有城市，其中包括北京。研究了一下方法，将city_choices改为 def city_choices "北京" end 并且增加 了famous_select 方法，将几个重点城市放置其中，方便选择。 当然应用要根据需求定制，这个插件非常优秀的实现了联动选择，稍加修改，即可实现客户的需求。感谢开源，感谢作者。感谢众多辛苦工作，热心奉献的程序员们。 update:2009-6-3 又修正了一下，编辑所在地时，会列出所有城市的问题。 city_helper 右键另存一下这个文件吧。修改的部分比较下就能看到了。 update:2009-6-30 补充一下页面上的引用。改插件在创建新纪录时，完全没问题。但是当加入到“我的资料”这样的版块，需要修改时，会出现城市列表中，包含全部城市。这里并没有初始化已有选择。下面做了一些改动。 在页面调用上，如下： {:include_blank => true}, :city=>{:include_blank => true}} %> init_city_select('','');]]></description>
			<content:encoded><![CDATA[<p>写在前面：</p>
<p>经过三个多月的共同努力，sns项目终于完成上线了。感谢众位合作兄弟的持续支持和热情投入。项目走过了开发，完善，再开发，再完善的过程。下面逐步将开发中的经验和大家分享。期待和大家共同交流，提高水平。谢谢！</p>
<p>今天首先介绍一个优秀的插件，city_helper。</p>
<p>代码：<a href="http://github.com/yzhang/city_helper/tree/master" target="_blank">http://github.com/yzhang/city_helper/tree/master</a></p>
<p>网站：<a href="http://www.letrails.cn/archives/city-helper-a-plugin-provide-state-and-city-select" target="_blank">http://www.letrails.cn/archives/city-helper-a-plugin-provide-state-and-city-select</a></p>
<p>功能：实现国内省份，城市的联动选择。</p>
<p>特点：这个省份城市联动选择功能，是sns网站必备的功能之一。我们不用反复的造轮子啦，感谢作者的分享。</p>
<p>修正：插件中有一点点小错误，已经在作者博客留言。使用的朋友会发现的。</p>
<p>1、CITIES，keys中广西应为广东<br />
2、海南的城市没有加，我添加了两个 ‘海南’ =&gt; [’海口’, ‘三亚’],</p>
<p>还有一个太合适的设置，一是 state_and_city_select 方法初始化时，省份为北京，城市为所有城市，其中包括北京。研究了一下方法，将city_choices改为</p>
<p>def city_choices<br />
"北京"<br />
end</p>
<p>并且增加 了famous_select 方法，将几个重点城市放置其中，方便选择。</p>
<p>当然应用要根据需求定制，这个插件非常优秀的实现了联动选择，稍加修改，即可实现客户的需求。感谢开源，感谢作者。感谢众多辛苦工作，热心奉献的程序员们。</p>
<p>update:2009-6-3</p>
<p>又修正了一下，编辑所在地时，会列出所有城市的问题。</p>
<p><a href="http://railser.cn/wp-content/uploads/2009/05/city_helper.rb">city_helper</a></p>
<p>右键另存一下这个文件吧。修改的部分比较下就能看到了。</p>
<p>update:2009-6-30</p>
<p>补充一下页面上的引用。改插件在创建新纪录时，完全没问题。但是当加入到“我的资料”这样的版块，需要修改时，会出现城市列表中，包含全部城市。这里并没有初始化已有选择。下面做了一些改动。</p>
<p>在页面调用上，如下：</p>
<p><%= state_and_city_select :user_detail, :province, :city, {:state=>{:include_blank => true}, :city=>{:include_blank => true}} %></p>
<p><script type="text/javascript"></p>
<p>  init_city_select('<%= @user_detail.province %>','<%= @user_detail.city %>');</p>
<p></script></p>
]]></content:encoded>
			<wfw:commentRss>http://railser.cn/blog/sns-notes-china-province-and-city-select-plugin/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>

