﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>语源科技BlogJava-笨小孩...................................................................................</title><link>http://www.blogjava.net/fl1429/</link><description>Java,Ruby,Php,Flex,Ajax,UI,Google,Twitter,Firefox,Ubuntu,Opensource,Designer,Blogger,Web2.0</description><language>zh-cn</language><lastBuildDate>Tue, 28 Apr 2026 18:59:09 GMT</lastBuildDate><pubDate>Tue, 28 Apr 2026 18:59:09 GMT</pubDate><ttl>60</ttl><item><title>blog 搬家到 www.wxianfeng.cn</title><link>http://www.blogjava.net/fl1429/archive/2009/10/12/297912.html</link><dc:creator>fl1429</dc:creator><author>fl1429</author><pubDate>Mon, 12 Oct 2009 08:45:00 GMT</pubDate><guid>http://www.blogjava.net/fl1429/archive/2009/10/12/297912.html</guid><wfw:comment>http://www.blogjava.net/fl1429/comments/297912.html</wfw:comment><comments>http://www.blogjava.net/fl1429/archive/2009/10/12/297912.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/fl1429/comments/commentRss/297912.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/fl1429/services/trackbacks/297912.html</trackback:ping><description><![CDATA[<font color="#ff0000" size="36"><br/ /><br/ />终于有了自己的独立域名。。以后blog更新将在那<br /><br/ />
<br />
里。。这里不会再更新。。域名为：<br />
<br />
<br />
www.wxianfeng.cn</font><br />

<img src ="http://www.blogjava.net/fl1429/aggbug/297912.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/fl1429/" target="_blank">fl1429</a> 2009-10-12 16:45 <a href="http://www.blogjava.net/fl1429/archive/2009/10/12/297912.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Jquery pagination like twitter more button</title><link>http://www.blogjava.net/fl1429/archive/2009/09/25/296448.html</link><dc:creator>fl1429</dc:creator><author>fl1429</author><pubDate>Fri, 25 Sep 2009 08:50:00 GMT</pubDate><guid>http://www.blogjava.net/fl1429/archive/2009/09/25/296448.html</guid><wfw:comment>http://www.blogjava.net/fl1429/comments/296448.html</wfw:comment><comments>http://www.blogjava.net/fl1429/archive/2009/09/25/296448.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/fl1429/comments/commentRss/296448.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/fl1429/services/trackbacks/296448.html</trackback:ping><description><![CDATA[环境：ruby 1.8.7 + rails 2.1.0 + jquery + ubuntu 8.10<br /><br />效果和xiaonei的&nbsp; 更多新鲜事&nbsp; 一样：<br /><img style="max-width: 800px;" src="http://www.blogjava.net/images/blogjava_net/fl1429/snapshot29.png" /><br /><br />前面有篇文章也介绍了一个像 twitter more 的方式分页的方法，不过那个是用 protorype 做的。。那个做起来简单一点，因为rails给我们封装了 insert_html 和 link_to_remote 等方法，这样更加便捷，但是解决jquery 和 prototype的confilct是一件很让人头疼的事，索性今天又实现了一个基于 jquery 的方法,环境是在rails中，需要使用 will_paginate 插件：<br />Demo:<br /><br />view:<br /><br />&lt;script&gt;<br />(function($){<br />&nbsp;&nbsp;&nbsp; var settings;<br /><br />&nbsp;&nbsp;&nbsp; $.bottomlessPagination = function(callerSettings) {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; settings = $.extend({<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ajaxLoaderPath:'/images/loading.gif',<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; results:'.results', // results 返回结果外部的class <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; objName:'',<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; callback:null<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; },callerSettings||{});<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; settings.imgLoader = new Image();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; settings.imgLoader.src = settings.ajaxLoaderPath;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; settings.href = $(".current").next().attr("href"); //current 是 will_paginate 默认的当前页 href 的名字<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if ($('div.pagination').size() &gt; 0){ // pagination 是 will_paginate 默认的 class<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $('div.pagination').wrap("&lt;div class='pagination_links'&gt;&lt;/div&gt;").hide();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $('.pagination_links').append(<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "&lt;div class='live_pagination'&gt;" +<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "&lt;a class='more_links' style='cursor:pointer;'&gt; 查看 " + settings.objName + "...&lt;/a&gt;" +<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "&lt;/div&gt;"<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; );<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $(".more_links").click(function(){&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $(".live_pagination").hide();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if ($(".now_loading").size() == 0)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $(".more_links").after("&lt;img class='now_loading' src='"+settings.imgLoader.src+"' /&gt;");&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; else<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $(".now_loading").show();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $.get(<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; settings.href,'',function(data){<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $(settings.results).addrows(data);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $(".now_loading").hide();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $(".live_pagination").show();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ); <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return false;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; });<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $.fn.addrows = function(data) {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //remove live pagination if there are no more results<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // alert(data.length);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (data.length === 1 ){<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // alert(data.length);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $('.live_pagination').remove();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $('.pagination_links').append(<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "&lt;div class='no_pagination'&gt;" +<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "没有" + settings.objName +<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "&lt;/div&gt;"<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; );<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return false;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //change the href<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ind=settings.href.indexOf("page=");<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; page=parseInt(settings.href.charAt(ind+5))+1;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; start=settings.href.slice(0,ind+5);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; stop=settings.href.slice(ind+6);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; settings.href=start.concat(page.toString()).concat(stop);<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //add results to the page<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $(settings.results).append(data);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (settings.callback) settings.callback();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; };<br />&nbsp;&nbsp;&nbsp; };<br />})(jQuery);<br />&lt;/script&gt;<br /><br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;div class="results"&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;%= render :partial =&gt; 'activity' , :collection =&gt; @all_feed&nbsp; %&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/div&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;%= will_paginate @all_feed&nbsp; ,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; :class =&gt; 'pagination',&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; :previous_label =&gt; '&amp;laquo; Previous',<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; :next_label&nbsp;&nbsp;&nbsp;&nbsp; =&gt; 'Next &amp;raquo;',<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; :renderer =&gt; 'WillPaginate::LinkRenderer' %&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;div&gt;<br />&lt;div class="now_loading" style="display:none;"&gt;<br />&nbsp; &lt;img src="http://www.blogjava.net/images/loading.gif"&gt;&lt;/img&gt;<br />&lt;/div&gt;<br />&lt;script&gt; <br />&nbsp; $.bottomlessPagination({objName:'更多更新', callback:function(){<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //highlight current row<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //&nbsp; $("div.results").effect("highlight", {}, 3000);<br />&nbsp;&nbsp;&nbsp; }});<br />&lt;/script&gt;<br /><br /><br /><br />Action:<br />def index<br /><br />&nbsp;&nbsp;&nbsp; if request.xhr?&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; sleep(1) # make request a little bit slower to see loader :-)&nbsp; &nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; render :partial =&gt; 'activity' , :collection =&gt; @all_feed<br />end<br /><br /><br />partial:_activity.html.erb<br />partial 里输出数据即可<br /><br /><br />主要的注意点就是注意对应class 不要写错了，同样，你也可以把class 换位id做，jquery取id就这样： $("#ID")<br /><br />上面js文件下载：<br />http://www.dbank.com/download.action?k=3094283bf64e445f9530ac0554ebc9ce<br /><br />ref:<br />http://github.com/davidwparker/jquery-bottomless-pagination<br /><br /><br /><div class="zemanta-pixie"><img class="zemanta-pixie-img" alt="" src="http://img.zemanta.com/pixy.gif?x-id=b54f0c4a-03a9-8cee-a7fe-ec925f9e6978" /></div><img src ="http://www.blogjava.net/fl1429/aggbug/296448.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/fl1429/" target="_blank">fl1429</a> 2009-09-25 16:50 <a href="http://www.blogjava.net/fl1429/archive/2009/09/25/296448.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Rails sphinx + libmmseg + ultrasphinx 全文检索</title><link>http://www.blogjava.net/fl1429/archive/2009/09/22/296066.html</link><dc:creator>fl1429</dc:creator><author>fl1429</author><pubDate>Tue, 22 Sep 2009 09:46:00 GMT</pubDate><guid>http://www.blogjava.net/fl1429/archive/2009/09/22/296066.html</guid><wfw:comment>http://www.blogjava.net/fl1429/comments/296066.html</wfw:comment><comments>http://www.blogjava.net/fl1429/archive/2009/09/22/296066.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/fl1429/comments/commentRss/296066.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/fl1429/services/trackbacks/296066.html</trackback:ping><description><![CDATA[上一遍介绍了 thinking_sphix 的使用，这次来介绍 ultrasphinx 的使用，二者都是 对sphinx的封装，都是rails的plugin，为了更好的利用rails调用sphinx方法。。。<br /><br />前面的配置一样<br /><br />Demo:<br />1,安装 chronic<br />gem install chronic<br /><br />2,安装插件<br />ruby script/plugin install&nbsp; svn://rubyforge.org/var/svn/fauna/ultrasphinx/trunk <br />这个是网上提供的方法，目前似乎找不到这个源了。。建议直接从github download 下载<br />http://github.com/fauna/ultrasphinx<br /><br />3，安装完Ultrasphinx之后，将： <br />vendor/plugins/ultrasphinx/examples/default.base <br />复制到： <br />config/ultrasphinx/default.base <br />将其中的： <br />charset_type = utf-8 <br />改为： <br />charset_type = zh_cn.utf-8 <br /><br />并且在charset_type设置的下面加入一行： <br />charset_dictpath =&nbsp; /home/feng/RailsProject/Search/lib&nbsp;  ＃ 你uni.lib 字典所在的路径<br />然后删除所有charset_table的设置。 <br /><br />4，Model<br />&nbsp; is_indexed :fields =&gt; ['created_at', 'name']<br />&nbsp; is_indexed :fields =&gt; ['created_at', 'content']<br /><br />5，action<br />&nbsp; def index<br /># thinking_sphinx<br />#&nbsp;&nbsp;&nbsp; @articles = Article.search params[:search], :include =&gt; :author, :match_mode =&gt; :boolean<br />#ultrasphinx<br />&nbsp;&nbsp;&nbsp; @search = Ultrasphinx::Search.new(:query =&gt; params[:search])<br />&nbsp;&nbsp;&nbsp; @search.run<br />&nbsp;&nbsp;&nbsp; @articles = @search.results<br />&nbsp; end<br /><br />6,生成配置文件： <br /><strong>rake ultrasphinx:configure</strong> <br />在config/ultrasphinx下创建了一个development.conf，这个文件就是Sphinx的配置文件。 <br /><br />7,创建索引： <br /><strong>rake ultrasphinx:index</strong> <br />索引创建在了 default.base 中你定义的path 路径下<br /><br />8， 启动Sphinx的searchd服务： <br /><strong>rake ultrasphinx:daemon:start</strong> <br /><br />对应的停止是&nbsp; <strong>rake ultrasphinx:daemon:stop</strong><br /><br />9,启动webrick<br /><br />ok了。。。<br />项目下载：<br />http://www.uushare.com/user/fl1429/file/2043752<br /><br />ref:<br />http://www.javaeye.com/topic/200065?page=1<br />http://github.com/fauna/ultrasphinx<br /><br /><br /><br /><br /><div class="zemanta-pixie"><img class="zemanta-pixie-img" alt="" src="http://img.zemanta.com/pixy.gif?x-id=82f41e76-5bc6-8655-a78f-c09741217728" /></div><img src ="http://www.blogjava.net/fl1429/aggbug/296066.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/fl1429/" target="_blank">fl1429</a> 2009-09-22 17:46 <a href="http://www.blogjava.net/fl1429/archive/2009/09/22/296066.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Rails sphinx + libmmseg + thinking_sphinx 全文检索</title><link>http://www.blogjava.net/fl1429/archive/2009/09/22/296052.html</link><dc:creator>fl1429</dc:creator><author>fl1429</author><pubDate>Tue, 22 Sep 2009 09:15:00 GMT</pubDate><guid>http://www.blogjava.net/fl1429/archive/2009/09/22/296052.html</guid><wfw:comment>http://www.blogjava.net/fl1429/comments/296052.html</wfw:comment><comments>http://www.blogjava.net/fl1429/archive/2009/09/22/296052.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/fl1429/comments/commentRss/296052.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/fl1429/services/trackbacks/296052.html</trackback:ping><description><![CDATA[环境: sphinx 0.9.8 rc2 + libmmseg 0.7.3 + thinking_sphinx 1.2.8 + ubuntu 8.1.0 Desktop version<br />
<br />
效果预览：<br />
1， http://www.zikii.com/ 这个网站 也是基于 sphinx 实现的<br />
2，我的<br />
<img style="max-width: 800px;" src="http://www.blogjava.net/images/blogjava_net/fl1429/snapshot28.png" alt="" /><br />
<br />
<br />
由于项目需要，需要实现站内搜索，全文检索和 中文分词 功能，最后选型了 sphinx + libmmseg + thinking_sphinx ， 折腾了好大一会，最后测试成功<br />
sphinx 是俄国人开发的opensourse 搜索引擎，索引速度很快， libmmseg 是中国人开发的中文分词程序，thinking_sphinx 是封装调用sphinx的rails plugin<br />
<br />
下面用到的所有资源 打包下载：<br />
http://www.uushare.com/user/fl1429/file/2043579<br />
<br />
1，项目的所有的源码编译安装 ， 全部移到 /root 下进行,凡是出现权限不够的， 在命令前加上 sudo <br />
<br />
2，安装 libmmseg<br />
<br />
./configure<br />
make<br />
make install <br />
具体可以参考：<br />
http://www.coreseek.cn/opensource/mmseg/<br />
<br />
3,安装 ruby 扩展，进入 mmseg ruby 目录下 （注意最后面有一个点）<br />
<br />
cd ruby<br />
cp /usr/local/include/mmseg/*.h .   <br />
<pre>cp ../src/*.h .   <br />
<br />
cp ../src/css/*.h .   <br />
ruby extconf.lin.rb<br />
make<br />
sudo make install<br />
成功的话，可以到irb下，测试看看是否成功了<br />
irb&nbsp; <br />
require 'mmseg'<br />
注意:如果在这一步出错,且出错提示为：<br />
<br />
css/UnigramCorpusReader.cpp:89: error: &#8217;strncmp&#8217; was not declared in this scope<br />
<br />
则需手工编辑.src/css目录下UnigramCorpusReader.cpp 文件,在其第一行加上<br />
<br />
#include &lt;string.h&gt;<br />
<br />
然后重新 make,即可通过<br />
<br />
4，创建辞典文件<br />
<br />
进入 mmseg 的 data 目录下<br />
<br />
mmseg -u unigram.txt<br />
<br />
把生成的文件名改为 uni.lib<br />
<br />
5,安装sphinx (把两个补丁放入 解压后 的 sphinx下)<br />
<br />
cd sphinx-0.9.8-rc2<br />
<br />
patch -p1 &lt; sphinx-0.98rc2.zhcn-support.patch  ＃patch中文补丁<br />
<br />
patch -p1 &lt; fix-crash-in-excerpts.patch # patch 防crash 补丁<br />
<br />
Copy mmseg安装文件夹下 src/csr_typedefs.h 和<br />
<br />
src/css/SegmenterManager.h 到Sphinx安装文件夹下的 src<br />
<br />
文件夹下<br />
<br />
./configure<br />
<br />
make<br />
sudo make install<br />
<br />
注意：如果在这一步出现<br />
<br />
/usr/local/include/mmseg/freelist.h:22: error: &#8216;strlen&#8217; was not declared in this scope<br />
<br />
的错误，手工修改 /usr/local/mmseg/include/mmseg/freelist.h<br />
<br />
在上面添加<br />
#include &lt;string.h&gt;<br />
<br />
以上的配置 sphinx 就支持 中文分词 搜索了。。。<br />
<br />
Demo:<br />
<br />
1,依照 Ryan 的例子 配置 好基本的英文搜索 <br />
<br />
http://railscasts.com/episodes/120-thinking-sphinx<br />
<br />
2，重点是 model 里的 定义索引 <br />
<br />
define_index do<br />
<br />
indexes content<br />
indexes :name, :sortable =&gt; true<br />
indexes comments.content, :as =&gt; :comment_content<br />
indexes [author.first_name, author.last_name], :as =&gt; :author_name<br />
has author_id, created_at<br />
end<br />
<br />
3，把上面生成的 uni.lib 辞典文件 拷入 项目的 lib 下 （或者别的地方，看你配置里的charset_dictpath的,不编译的话，可以用别人现成的uni.lib）<br />
<br />
4，在项目的 config 下新建一个 sphinx.yml 文件<br />
development: &amp;my_settings<br />
enable_star: 1<br />
min_prefix_len: 0<br />
min_infix_len: 2<br />
min_word_len: 1<br />
max_results: 70000<br />
morphology: none<br />
listen: localhost:3312<br />
charset_dictpath: /home/feng/RailsProject/Search/lib<br />
test:<br />
&lt;&lt;: *my_settings<br />
production:<br />
&lt;&lt;: *my_settings<br />
<br />
上面的<br />
/home/feng/RailsProject/Search/lib 可以写成  "#{RAILS_ROOT}/lib"<br />
5，生成配置文件<br />
<br />
rake ts:config<br />
<br />
&nbsp;这样config 下会生成一个 development.sphinx.conf 文件<br />
<br />
找到 charset_type = utf-8 把后面 utf-8 修改为 zh_cn.utf-8,并在下面添加如下语句<br />
<br />
charset_dictpath = /home/feng/RailsProject/Search/lib （你工程的lib路径）<br />
<br />
6，建立索引<br />
<br />
rake&nbsp;ts:index INDEX_ONLY=true<br />
注意后面必须添加  INDEX_ONLY=true不然的话，配置文件会被重置,还有不要写成 INDEX_ONLY = true<br />
<br />
<br />
7，启动sphinx服务<br />
<br />
rake ts:start<br />
8,启动webrick <br />
<br />
注意，sphinx 必须在webrick的前面 先启动<br />
我的demo项目，其实就是上面ryan 的，下载后可以看到我的具体配置，或者详细的内容<br />
<br />
http://www.uushare.com/user/fl1429/file/2043752<br />
<br />
<br />
ref:<br />
http://wiki.github.com/cogentsoft/zbs/180787<br />
http://www.javaeye.com/topic/431217?page=1<br />
http://www.javaeye.com/topic/196451<br />
http://blog.sina.com.cn/s/blog_412d58ec010090pq.html<br />
http://freelancing-god.github.com/ts/en/rake_tasks.html<img class="zemanta-pixie-img" alt="" src="http://img.zemanta.com/pixy.gif?x-id=0d347e6f-bad1-84f2-b63e-e0138c655057" /></pre>
<img src ="http://www.blogjava.net/fl1429/aggbug/296052.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/fl1429/" target="_blank">fl1429</a> 2009-09-22 17:15 <a href="http://www.blogjava.net/fl1429/archive/2009/09/22/296052.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Rails Jquery scrolling pagenation</title><link>http://www.blogjava.net/fl1429/archive/2009/09/08/294299.html</link><dc:creator>fl1429</dc:creator><author>fl1429</author><pubDate>Tue, 08 Sep 2009 06:29:00 GMT</pubDate><guid>http://www.blogjava.net/fl1429/archive/2009/09/08/294299.html</guid><wfw:comment>http://www.blogjava.net/fl1429/comments/294299.html</wfw:comment><comments>http://www.blogjava.net/fl1429/archive/2009/09/08/294299.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/fl1429/comments/commentRss/294299.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/fl1429/services/trackbacks/294299.html</trackback:ping><description><![CDATA[环境 ：<br />ruby 1.8.7 + Rails 2.1.0 + ubuntu 8.1.0<br /><br />效果：<br />http://www.dzone.com/links/index.html<br />http://flexidev.co.za/projects/jqpageflow/<br />http://paperc.de/documents<br /><br />像上面的三个网站 的分页效果 就是 scrolling pagination , 或者 叫 pageless pagination , endless pagination 用这些作为关键字， 都会搜到很多的demo， 这里我介绍 一种 demo，开发 环境 是 rails ，of course , 你也可以在其他的平台使用。。<br /><br />最用 一直在用各种 分页的效果，一般都是 ajax的， 例如前面 有介绍了 prototype pagenation like twitter more button, 还有 jquery ajax pagenation,这里又是 jquery scrolling pagination.....<br /><br />Demo:<br /><br />依赖库:<br />will_paginate 插件<br />jquery.js<br />jquery.pageless.js<br /><br />请到 下面的 那个 ref link 里下<br /><br />Action:<br /><br />&nbsp;<font color="#3366ff">def show<br />&nbsp;&nbsp;&nbsp; @client_info = ClientInfo.find(params[:id])<br />&nbsp;&nbsp;&nbsp; @comments = @client_info.comments.paginate(:per_page =&gt; 5 , :page =&gt; params[:page]) <br /><br />&nbsp;&nbsp;&nbsp; if request.xhr?<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; sleep(2) # make request a little bit slower to see loader :-)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; render :partial =&gt; 'comment' , :collection =&gt; @comments #返回 数据的partial<br />&nbsp;&nbsp;&nbsp; end<br />end</font> <br /><br />解释 ： server 端<br /><br />helper method :<br /><br />&nbsp; <font color="#3366ff"># scrolling paginate like greader<br />&nbsp; def pageless(total_pages, url=nil)<br />&nbsp;&nbsp;&nbsp; opts = {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; :totalPages =&gt; total_pages,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; :url&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; =&gt; url<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #:loaderMsg&nbsp; =&gt; '加载中...'<br />&nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp;&nbsp; javascript_tag("$('#ajaxcomments').pageless(#{opts.to_json});")<br />&nbsp; end</font><br /><br />解释; 封装了一个 pageless 方法，即实现 scrolling load 的的方法<br /><br />view: show.html.erb<br /><br /><font color="#3366ff">..............<br />&nbsp;&lt;%= render :partial =&gt; 'wall' %&gt;<br />.........................</font><br /><br />解释 ： 前端 view<br /><br /><br />partial : _wall.html.erb<br /><br />&nbsp; <font color="#3366ff">&lt;div class="wall" id ="ajaxcomments"&gt;<br />&nbsp;&nbsp;&nbsp; &lt;%- unless @client_info.comments.empty? -%&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;%= render :partial =&gt; 'comment', :collection =&gt; @comments %&gt;<br />&nbsp;&nbsp;&nbsp; &lt;%- end -%&gt;<br />&nbsp;&nbsp;&nbsp; &lt;%= will_paginate @comments&nbsp; ,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; :class =&gt; 'pagination',<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; :previous_label =&gt; '&amp;laquo; Previous',<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; :next_label&nbsp;&nbsp;&nbsp;&nbsp; =&gt; 'Next &amp;raquo;',<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; :renderer =&gt; 'WillPaginate::LinkRenderer' %&gt; &lt;%#= pageless must use will_paginate default style %&gt;<br />&nbsp;&nbsp;&nbsp; &lt;%= pageless(@comments.total_pages, client_info_path(@client_info))&nbsp; %&gt;<br />&nbsp; &lt;/div&gt;<br /></font><br />解释 ： 注意这里需要 定义 一个 id， 还有 就是 will_paginate 里的那些 参数 可以 不要 的，这里我加的，是因为 我的 enviroment.rb 中 加了 will_paginate 的 配置，如果 你没有的话， 可以去掉的<br />partial : _comment.html.erb<br /><font color="#3366ff">..............<br />&lt;%= display comment.body %&gt;<br />.........................</font><br />解释 ： 显示的 内容<br /><br />ref :<br />http://github.com/jney/jquery.pageless/tree/master<br /><br /><br /><div class="zemanta-pixie"><img class="zemanta-pixie-img" alt="" src="http://img.zemanta.com/pixy.gif?x-id=420768cb-0a5a-8752-8d30-6851785bc2ec" /></div><img src ="http://www.blogjava.net/fl1429/aggbug/294299.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/fl1429/" target="_blank">fl1429</a> 2009-09-08 14:29 <a href="http://www.blogjava.net/fl1429/archive/2009/09/08/294299.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Rails 很好用的锚(anchor)标记</title><link>http://www.blogjava.net/fl1429/archive/2009/09/04/293927.html</link><dc:creator>fl1429</dc:creator><author>fl1429</author><pubDate>Fri, 04 Sep 2009 10:35:00 GMT</pubDate><guid>http://www.blogjava.net/fl1429/archive/2009/09/04/293927.html</guid><wfw:comment>http://www.blogjava.net/fl1429/comments/293927.html</wfw:comment><comments>http://www.blogjava.net/fl1429/archive/2009/09/04/293927.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/fl1429/comments/commentRss/293927.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/fl1429/services/trackbacks/293927.html</trackback:ping><description><![CDATA[锚(anchor)标记 很好用，虽然现在一般好多都是 ajax 无刷新 更新。。但是如何 你没有 采用 ajax 方法提交数据和更新的话，那么 anchor是你的最佳选择了，看上去有点像ajax的效果<br />
<br />
anchor 说白了 就是 进入 这个 页面的时候， 定位到页面指定的部分，例如一个个人用户的界面，最下面是留言版，如果你采用传统的方式提交留言的话，那么就可以使用anchor定位提交后显示的位置<br />
<br />
使用方法：<br />
<br />
1,url标识<br />
<br />
a href = ............./network#Comment<br />
<br />
network.html.erb<br />
&lt;a name="Comment"&gt;&lt;/a&gt;<br />
<br />
只要在network.erb.html 页面中加入&nbsp; 上面 那句话， 加在哪里 就定位显示在哪了,或者 指定一个 div的id值为 Comment 即可<br />
<br />
2，rails 自带的 :anchor 参数<br />
<br />
url or path :<br />
&nbsp;user_path(@user,:anchor =&gt; 'Comment')<br />
&nbsp;user_url(@user,:anchor =&gt; 'Comment')<br />
<br />
上面在rails RESTful 架构的程序中 经常 可见这种路径写法，那么你可以利用 :anchor 来标识。。。<br />
<br />
<div class="zemanta-pixie"><img class="zemanta-pixie-img" alt="" src="http://img.zemanta.com/pixy.gif?x-id=03da1f1b-1570-8078-91db-bf6b549447b6" /></div>
<img src ="http://www.blogjava.net/fl1429/aggbug/293927.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/fl1429/" target="_blank">fl1429</a> 2009-09-04 18:35 <a href="http://www.blogjava.net/fl1429/archive/2009/09/04/293927.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>rails jquery autocomplete</title><link>http://www.blogjava.net/fl1429/archive/2009/09/04/293880.html</link><dc:creator>fl1429</dc:creator><author>fl1429</author><pubDate>Fri, 04 Sep 2009 06:40:00 GMT</pubDate><guid>http://www.blogjava.net/fl1429/archive/2009/09/04/293880.html</guid><wfw:comment>http://www.blogjava.net/fl1429/comments/293880.html</wfw:comment><comments>http://www.blogjava.net/fl1429/archive/2009/09/04/293880.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.blogjava.net/fl1429/comments/commentRss/293880.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/fl1429/services/trackbacks/293880.html</trackback:ping><description><![CDATA[效果：<br />
<img alt="" src="http://www.blogjava.net/images/blogjava_net/fl1429/snapshot26.png" width="541" height="216" /><br />
<br />
记得以前文章写过 rails autocomplete 插件的使用方法， 那个是基于 prototype 的， 平时Jquery用的最多。。所以必须用jquery 实现 ， 这样的 demo 网上太多。。。。下面介绍在rails 中的一种solution<br />
<br />
需要的：<br />
jquery.js<br />
jquery.complete.js<br />
jquery.autocomplete.css<br />
<br />
demo :<br />
<br />
View:<br />
<br />
<font color="#3366ff">&lt;script&gt;<br />
&nbsp; $(document).ready(function() {<br />
&nbsp;&nbsp;&nbsp; $("#recipient").autocomplete("/myaccount/res_message", {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; delay:10,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; minChar: 1,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; multiple: true,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; parse: function(data) {&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return $.map(eval(data), function(item) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return {&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; data: item,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; value: item.name,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; result: item.name<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; });<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; },<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; formatItem: function(item) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return item.show;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; }).result(function(e, item)<br />
&nbsp;&nbsp;&nbsp; {&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $("#recipient").val(item.name);<br />
&nbsp;&nbsp;&nbsp; });<br />
&nbsp; });<br />
&lt;/script&gt;<br />
&lt;p&gt;&lt;%= text_field_tag :recipient, :id =&gt; 'recipient' %&gt;&lt;/p&gt;<br />
</font><br />
<br />
解释：<br />
#recipient 是对应的 id<br />
/myaccount/res_message 对应请求的 url<br />
item是参数<br />
name 和 show 是 返回的变量<br />
<br />
action:<br />
&nbsp; <font color="#3366ff">def res_message<br />
<br />
&nbsp;&nbsp;&nbsp; key = params[:q] if params[:q]<br />
&nbsp;&nbsp;&nbsp; @result = ClientInfo.get_login_name(key, '' , 'key')<br />
&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; respond_to do |format|<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; format.js # default : res_message.js.erb<br />
&nbsp;&nbsp;&nbsp; end<br />
&nbsp; end</font><br />
<br />
解释 params[:q]&nbsp; q 是默认向后台发送的关键字查询 参数， 并且默认的limit 是10 条数据<br />
<br />
view:res_message.js.erb<br />
<font color="#3366ff"></font><br />
&lt;% if @result -%&gt;<br />
&lt;% i=0 %&gt;[<br />
&nbsp; &lt;% for result in @result %&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp; &lt;% if i==0 %&gt;<br />
&nbsp;&nbsp;&nbsp; {name:"&lt;%= result.login_name %&gt;",show:"&lt;%= result.login_name + " " %&gt;" + "&lt;%= result.sure_name.nil? ? " " : result.sure_name + " " %&gt;"}<br />
&nbsp;&nbsp;&nbsp; &lt;% else %&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ,{name:"&lt;%= result.login_name %&gt;",show:"&lt;%= result.login_name + " " %&gt;" + "&lt;%= result.sure_name.nil? ? " " : result.sure_name + " " %&gt;"}<br />
&nbsp;&nbsp;&nbsp; &lt;% end %&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;% i+=1 -%&gt;<br />
&nbsp; &lt;% end -%&gt;]<br />
&lt;% end -%&gt;<br />
<br />
解释： 该view 是返回的数据，返回的是一个JSON数组<br />
<br />
具体详细的可以参考：<br />
http://docs.jquery.com/Plugins/Autocomplete<br />
http://view.jquery.com/trunk/plugins/autocomplete/demo/<br />
<br />
<br />
&nbsp;<br />
<br />
<div class="zemanta-pixie"><img class="zemanta-pixie-img" alt="" src="http://img.zemanta.com/pixy.gif?x-id=52408855-4311-8ca1-9c8d-3d51b8a3f89c" /></div>
<img src ="http://www.blogjava.net/fl1429/aggbug/293880.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/fl1429/" target="_blank">fl1429</a> 2009-09-04 14:40 <a href="http://www.blogjava.net/fl1429/archive/2009/09/04/293880.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Rails will_paginate ajax pagination with jquery</title><link>http://www.blogjava.net/fl1429/archive/2009/08/25/292522.html</link><dc:creator>fl1429</dc:creator><author>fl1429</author><pubDate>Tue, 25 Aug 2009 07:28:00 GMT</pubDate><guid>http://www.blogjava.net/fl1429/archive/2009/08/25/292522.html</guid><wfw:comment>http://www.blogjava.net/fl1429/comments/292522.html</wfw:comment><comments>http://www.blogjava.net/fl1429/archive/2009/08/25/292522.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/fl1429/comments/commentRss/292522.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/fl1429/services/trackbacks/292522.html</trackback:ping><description><![CDATA[环境: ruby 1.8.7 + rails 2.1.0 + &gt; = jquery 1.3.2<br />
<br />
效果预览：<br />
<img style="max-width: 800px;" src="http://www.blogjava.net/images/blogjava_net/fl1429/snapshot25.png" alt="" /><br />
<br />
一般 我们 在rails 中 分页 will_paginate 是必不可少的插件，但是 一般都是基于 prototype 的，例如 ajax 式的分页， 通过 RemoteLinkRenderer改变 css 样式等等，都是 基于prototype 的，但是 prototype 和 Jquery 在项目中 经常遇到conflict ，这个 很 让人 头疼，rails 封装好的ajax方法，好多 都因为 jquery 不能用，jquery 那么 好 前端 用户体验，又因为 prototype 出现 conflict ， 哎 为什么 相互残杀 呢。。。。。<br />
<br />
上面实现的核心思想 是 前端 通过 jquery的 异步调用数据， 后台 rails 通过 respond_to fotmat.js 的方式 给予 返回数据。。。<br />
<br />
Demo:<br />
<br />
layout 中导入：<br />
<font color="#3366ff">&nbsp;&nbsp;&nbsp; &lt;%= stylesheet_link_tag 'pagination' -%&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;%= javascript_include_tag 'jquery' %&gt;</font><br />
pagination 是改变分页的样式<br />
<br />
<br />
Action:<br />
<br />
<font color="#3366ff">&nbsp; def index<br />
&nbsp;&nbsp;&nbsp; @products = Product.paginate(:per_page =&gt; 10, :page =&gt; params[:page])<br />
&nbsp;&nbsp;&nbsp; respond_to do |format|<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; format.html&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #default : index.html.erb<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; format.js {:layout =&gt; false} # default : index.js.erb<br />
&nbsp;&nbsp;&nbsp; end<br />
&nbsp; end</font><br />
<br />
View:<br />
<br />
index.html.erb<br />
<br />
<font color="#3366ff">&lt;div id="product"&gt;<br />
&nbsp; &lt;%= render :partial =&gt; 'products' %&gt;<br />
&lt;/div&gt;<br />
</font><br />
index.js.erb<br />
<br />
<font color="#3366ff">$("#product").html("&lt;%= escape_javascript(render :partial =&gt; "products") %&gt;");<br />
</font><br />
escape_javascript 是转义的意思 和 &lt;%=h %&gt; 这里的 h 差不多<br />
<br />
partial :<br />
_products.html.erb<br />
<br />
&lt;script&gt;<br />
<br />
<font color="#3366ff">$(function() {<br />
&nbsp; $(".apple_pagination a").live("click", function() {<br />
&nbsp;&nbsp;&nbsp; $(".apple_pagination").html("Page is loading...");<br />
&nbsp;&nbsp;&nbsp; $.get(this.href, null, null, "script");<br />
/* alert(this.href); */<br />
&nbsp;&nbsp;&nbsp; return false;<br />
&nbsp; });<br />
});<br />
<br />
&lt;/script&gt;<br />
<br />
&lt;%= will_paginate @products , :class =&gt; 'apple_pagination' ,:previous_label =&gt; '&lt;&lt;上一页', :next_label =&gt; '下一页&gt;&gt;'&nbsp;&nbsp; :renderer&nbsp; =&gt; 'WillPaginate::LinkRenderer' %&gt;<br />
<br />
&lt;% for product in @products&nbsp; %&gt;<br />
&nbsp; &lt;div class="product"&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;h3&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;%= link_to h(product.name), product %&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;%= number_to_currency(product.price) %&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;/h3&gt;<br />
&nbsp; &lt;/div&gt;<br />
&lt;% end %&gt;</font><br />
<br />
上面的 $(".apple_pagination a")&nbsp; 即是 will_paginate 的 :class ，：renderer 使用的是will_paginate 的default 的，如果 enviroment.rb 中配置了will_paginate的样式，这里不写 :renderer 会出错！，具体默认的参数 可以查看 will_paginate 下的 view_helpers.rb<br />
<br />
全部 源码 下载：<br />
http://www.uushare.com/user/fl1429/file/1941241<br />
<br />
配置方法：<br />
1，进入工程， rake setup<br />
2,ruby script/server <br />
3,okay 成功 了。。。。<br />
<br />
补充 ： 如果 一个 页面 有两处需要 分页，那么 will_paginate 默认 情况下 是同时翻页的。。那么 如何 避免呢。。只需要 给各自的 will_paginate 指定 不同的 class 即可&nbsp; 例如<br />
<br />
will_paginate : <br />
<br />
&lt;%= will_paginate collection ,<br />
&nbsp; :class =&gt; "apple_paginate my_paginate",<br />
&nbsp; :previous_label =&gt; '&lt;&lt;上一页',<br />
&nbsp; :next_label =&gt; '下一页&gt;&gt;' ,<br />
&nbsp; :renderer&nbsp; =&gt; 'WillPaginate::LinkRenderer'&nbsp; %&gt;<br />
<br />
apple_paginate 是 分页的真正的 css，my_paginate 是为了 区别 不同区的 分页 而加的<br />
<br />
<br />
jquery script : <br />
&nbsp; jQuery(function() {<br />
&nbsp;&nbsp;&nbsp; jQuery(".my_paginate a").live("click", function() {&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; jQuery(".my_paginate").html("正在加载...");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; jQuery.get(this.href, {flag : "my" }, null, 'script');<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return false;<br />
&nbsp;&nbsp;&nbsp; });<br />
&nbsp; });<br />
<br />
注意 jquery get 方法的 四个参数 的 意义<br />
<br />
ref:<br />
http://railscasts.com/episodes/174-pagination-with-ajax<br />
http://soylentfoo.jnewland.com/articles/2007/09/17/resource_this-dry-rails-resource-controllers<br />
http://book.csdn.net/bookfiles/375/10037514155.shtml<br />
http://stackoverflow.com/questions/1268383/format-js-with-rails<br />
<br />
<br />
<br />
<div class="zemanta-pixie"><img class="zemanta-pixie-img" alt="" src="http://img.zemanta.com/pixy.gif?x-id=a6746d3c-c1d8-8615-9f87-135874cf4d7f" /></div>
<img src ="http://www.blogjava.net/fl1429/aggbug/292522.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/fl1429/" target="_blank">fl1429</a> 2009-08-25 15:28 <a href="http://www.blogjava.net/fl1429/archive/2009/08/25/292522.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>ruby  p , puts 和 print  的区别</title><link>http://www.blogjava.net/fl1429/archive/2009/08/24/292387.html</link><dc:creator>fl1429</dc:creator><author>fl1429</author><pubDate>Mon, 24 Aug 2009 07:12:00 GMT</pubDate><guid>http://www.blogjava.net/fl1429/archive/2009/08/24/292387.html</guid><wfw:comment>http://www.blogjava.net/fl1429/comments/292387.html</wfw:comment><comments>http://www.blogjava.net/fl1429/archive/2009/08/24/292387.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/fl1429/comments/commentRss/292387.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/fl1429/services/trackbacks/292387.html</trackback:ping><description><![CDATA[在rails 开发中，最基本的检测错误的方法，莫过于 puts 和 p 的输出了。。。。那么 它们有什么区别呢。。。<br /><br />查了下， 说 p 是经过 inspect 的，inspect的字面意思是 检查 ，貌似 是检查 占位符 ，但是还是云里雾里<br /><br />看两个demo<br /><br />one：<br /><br /> <font color="#3366ff">p "a", "\nb" <br />结果：<br />"a"<br />"\nb"</font><br /><br />two:<br /><br /><font color="#3366ff">class SomeClass<br />&nbsp; def initialize (arg_1, arg_2) # called with SomeClass.new<br />&nbsp;&nbsp;&nbsp; @member_1 = arg_1<br />&nbsp;&nbsp;&nbsp; @member_2 = arg_2<br />&nbsp; end<br />&nbsp; def print&nbsp; <br />&nbsp; puts "member_1: " + @member_1<br />&nbsp;&nbsp;&nbsp; puts "member_2: " + @member_2<br />&nbsp; end<br />end<br /><br />sc1 = SomeClass.new('foo', 'bar')<br />puts sc1.inspect<br />p sc1<br />puts sc1</font><br /><br />结果：<br />#&lt;SomeClass:0xb7c091b4 @member_1="foo", @member_2="bar"&gt;<br />#&lt;SomeClass:0xb7c091b4 @member_1="foo", @member_2="bar"&gt;<br />#&lt;SomeClass:0xb7c091b4&gt;<br /><br />还有就是我们 最常用到的。。。查询数据库中一条数据记录集<br /><br /><font color="#3366ff">@post = BlogPost.find(params[:id])<br />&nbsp;&nbsp;&nbsp; p @post<br />&nbsp;&nbsp;&nbsp; puts @post</font><br />结果：<br />#&lt;BlogPost id: 18, blog_id: 30, topic_id: nil, client_info_id: nil, title: "测试", body: "测试测试测试测试测试测试测试测试测...", blog_post_comments_count: 0, type: "BlogPost", created_at: "2009-08-24 03:56:27", updated_at: "2009-08-24 03:56:27"&gt;<br />#&lt;BlogPost:0xb595b8b0&gt;<br /><br />这样 看起来 更一目了然。。。,p 把数据库中的 字段 和值 都输出 了， puts 只输出 一个 对象的标识。。。<br /><br />ref：<br />http://www.adp-gmbh.ch/ruby/language/inspect.html<br />http://stackoverflow.com/questions/1255324/p-vs-puts-in-ruby<br />http://blog.chinaunix.net/u1/37038/showart_489434.html<br /><br /><br /><br /><div class="zemanta-pixie"><img class="zemanta-pixie-img" alt="" src="http://img.zemanta.com/pixy.gif?x-id=718b3570-1a39-8380-a6f8-67230382eb82" /></div><img src ="http://www.blogjava.net/fl1429/aggbug/292387.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/fl1429/" target="_blank">fl1429</a> 2009-08-24 15:12 <a href="http://www.blogjava.net/fl1429/archive/2009/08/24/292387.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>ruby 中英文混合 截取字符串</title><link>http://www.blogjava.net/fl1429/archive/2009/08/24/292371.html</link><dc:creator>fl1429</dc:creator><author>fl1429</author><pubDate>Mon, 24 Aug 2009 06:23:00 GMT</pubDate><guid>http://www.blogjava.net/fl1429/archive/2009/08/24/292371.html</guid><wfw:comment>http://www.blogjava.net/fl1429/comments/292371.html</wfw:comment><comments>http://www.blogjava.net/fl1429/archive/2009/08/24/292371.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/fl1429/comments/commentRss/292371.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/fl1429/services/trackbacks/292371.html</trackback:ping><description><![CDATA[环境 ： ruby 1.8.7 + rails 2.1.0 +&nbsp; ubuntu 8.10<br />
ruby 在截取 中文字符串时 经常出现乱码&nbsp; 。例如：<br />
<br />
<font color="#3366ff">a = "测a试 中文aaa"<br />
b = 'test'<br />
<br />
p a.size # 17 （可以看出一个中文字符在ruby中是3个英文字符）<br />
p b.length # 4<br />
puts a.slice(0,13) # 测a试 中�&nbsp; slice method （0是start下标处，13是length）</font><br />
<br />
最后一个输出最后 是乱码，在java中是unicode编码就没有这个问题，所以我们需要转换下编码来解决。。<br />
<br />
例如在rails的 application_helper.rb 定义一个转换的方法<br />
<br />
&nbsp; <font color="#3366ff">def cut_string(charset,src,start,length)<br />
&nbsp;&nbsp;&nbsp; require "iconv"<br />
&nbsp;&nbsp;&nbsp; @conv=Iconv.new("UTF-16",charset)<br />
&nbsp;&nbsp;&nbsp; @reverse_conv=Iconv.new(charset,"UTF-16")<br />
&nbsp;&nbsp;&nbsp; p_start=start.class==Fixnum&amp;&amp;start&gt;=0<br />
&nbsp;&nbsp;&nbsp; p_length=length.class==Fixnum&amp;&amp;length&gt;=0<br />
&nbsp;&nbsp;&nbsp; return "" unless src&amp;&amp;p_start&amp;&amp;p_length<br />
&nbsp;&nbsp;&nbsp; src_utf16=@conv.iconv(src)<br />
&nbsp;&nbsp;&nbsp; cutted_src_utf_16=src_utf16[2*start+2,2*length]<br />
&nbsp;&nbsp;&nbsp; @reverse_conv.iconv(cutted_src_utf_16)<br />
&nbsp; end</font><br />
<br />
view中使用：<br />
<br />
<font color="#33ccff">&lt;%<br />
&nbsp;&nbsp;&nbsp; a = '测a 试中文'<br />
&nbsp;&nbsp;&nbsp; puts cut_string('UTF-8',a,0,4) # 测a 试<br />
%&gt;</font><br />
<br />
ref:<br />
http://my.opera.com/sawpad/blog/show.dml/235183<br />
http://www.javaeye.com/topic/201531<br />
<br />
补充：<br />
真伤心，之前截取字符串，用上面的方法，还需要自己封装，自己转码解决，没想到rails已经把我们封装好了。。就是 truncate 方法。。看了下源码真简单，只需要输出对应字符串的chars 就解决了，源码：<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; def truncate(text, length = 30, truncate_string = "...")<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if text<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; l = length - truncate_string.chars.length<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; chars = text.chars<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (chars.length &gt; length ? chars[0...l] + truncate_string : text).to_s<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; end<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; end<br />
<br />
使用demo：<br />
<br />
&lt;%<br />
a = 'test'<br />
b = '测试中文'<br />
<br />
p truncate(a,2,'...') # "tes..."<br />
p truncate(b,2,'...') # "测试中..."<br />
<br />
%&gt;<br />
<br />
<br />
如果需要得到汉字的长度 可以使用 jcode 库 里的 jlength<br />
<br />
demo:<br />
<br />
s = "测试140字测试140字测试140字测试140字测试140字测试140字测试140字测试140字测试140字测试140字测试140字测试140字测试140字测试<br />
&nbsp;&nbsp;&nbsp; 140字测试140字测试140字测试140字测试140字测试140字测试140字测试140字测试140字测试1"<br />
<br />
$KCODE='utf8'<br />
<br />
require 'jcode'<br />
<br />
p s.jsize<br />
<br />
p s.jlength<br />
<br />
ref:<br />
http://blog.guoshuang.com/?p=4769<br />
http://lifegoo.pluskid.org/?p=257<br />
<div class="zemanta-pixie"><img class="zemanta-pixie-img" alt="" src="http://img.zemanta.com/pixy.gif?x-id=5716af9f-806e-8b9f-bdc2-771230498c1b" /></div>
<img src ="http://www.blogjava.net/fl1429/aggbug/292371.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/fl1429/" target="_blank">fl1429</a> 2009-08-24 14:23 <a href="http://www.blogjava.net/fl1429/archive/2009/08/24/292371.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>