Ruby on rails 让will_paginate使用Ajax的最佳方法
如果你在谷歌上搜索“will_paginate”和“ajax”,最重要的结果是:但是will_paginate的原作者说to(对搜索引擎优化/蜘蛛程序有害) 但是我无法让原始作者的方法工作(他的javascript杀死了我所有的链接)。提出了一种类似于米斯拉夫(原著作者)概念的方法。但我也不能让它起作用Ruby on rails 让will_paginate使用Ajax的最佳方法,ruby-on-rails,ajax,Ruby On Rails,Ajax,如果你在谷歌上搜索“will_paginate”和“ajax”,最重要的结果是:但是will_paginate的原作者说to(对搜索引擎优化/蜘蛛程序有害) 但是我无法让原始作者的方法工作(他的javascript杀死了我所有的链接)。提出了一种类似于米斯拉夫(原著作者)概念的方法。但我也不能让它起作用 所以。。。。使用AJAX分页并保持SEO友好的最佳方法是什么?(对于RAILS>2.1)不幸的是,我认为您不能以您想要的方式使用Ajax,并且就分页内容而言,仍然保持SEO友好。问题是,据我所知
所以。。。。使用AJAX分页并保持SEO友好的最佳方法是什么?(对于RAILS>2.1)不幸的是,我认为您不能以您想要的方式使用Ajax,并且就分页内容而言,仍然保持SEO友好。问题是,据我所知,Google和friends的机器人不会使用XHR请求浏览您的内容,所以他们根本看不到这些内容
也就是说,如果分页的项目都有自己的静态、SEO友好的页面(或者在您的站点上静态可用),那么内容仍然会进入它们的引擎。这是您可能想要的方式。Seo友好和不引人注目的javascript齐头并进。你可以做以下几点
- 对整个站点进行编码,就好像只启用了html一样(包括分页功能)
- 如果请求来自js,则使用respond_并仅提供项目列表
- 从您选择的任何库中使用onDomReady,您都会尝试捕获所有分页链接,并添加onclick事件,该事件会触发对新视图的ajax调用并返回结果。将该结果放入包含正在分页的数据的容器中。然后onclick返回false
- 为了给您的用户提供更好的用户体验,您可以向相同的javascript方法添加一些功能,如活动链接等
使用这种方法,分页将适用于JS和非JS,因为非JS用户(包括Googlebot)将正常遍历您的分页。只有在用户启用了javascript的情况下,才会使用新结果更新包含数据的容器 汤姆的回答是正确的。仅针对shiggles,我原型化了一个快速实现。这表明在启用Javascript时(用户)使用Ajax,而在禁用Javascript时(谷歌)仍然有漂亮的URL。下面是一些代码片段,可以让您继续学习
config/routes.rb:
map.connect 'items/:page', :controller => "items", :action => "index", :page => 1
class ItemsController < ApplicationController
def index
@items = Item.paginate(:all, :page => params[:page])
respond_to do |format|
format.html
format.js do
render :update do |page|
page.replace_html :items, :partial => "items"
page << "ajaxifyPagination();"
end
end
end
end
end
<h1>Listing items</h1>
<div id="items">
<%= render :partial => "items" %>
</div>
<%= will_paginate @items %>
<table>
<% for item in @items %>
<tr>
<td><%= item.id %></td>
</tr>
<% end %>
</table>
app/controllers/items\u controller.rb:
map.connect 'items/:page', :controller => "items", :action => "index", :page => 1
class ItemsController < ApplicationController
def index
@items = Item.paginate(:all, :page => params[:page])
respond_to do |format|
format.html
format.js do
render :update do |page|
page.replace_html :items, :partial => "items"
page << "ajaxifyPagination();"
end
end
end
end
end
<h1>Listing items</h1>
<div id="items">
<%= render :partial => "items" %>
</div>
<%= will_paginate @items %>
<table>
<% for item in @items %>
<tr>
<td><%= item.id %></td>
</tr>
<% end %>
</table>
app/views/items/\u items.html.erb:
map.connect 'items/:page', :controller => "items", :action => "index", :page => 1
class ItemsController < ApplicationController
def index
@items = Item.paginate(:all, :page => params[:page])
respond_to do |format|
format.html
format.js do
render :update do |page|
page.replace_html :items, :partial => "items"
page << "ajaxifyPagination();"
end
end
end
end
end
<h1>Listing items</h1>
<div id="items">
<%= render :partial => "items" %>
</div>
<%= will_paginate @items %>
<table>
<% for item in @items %>
<tr>
<td><%= item.id %></td>
</tr>
<% end %>
</table>
我的示例使用jQuery(with),但使用原型也很简单。有一个railscasts在这个主题上帮助了我 我运行的是rails 3.2,所以我将其中提到的pagination.js添加到app/assets/javascripts文件夹中 pagination.js
$(function() {
$(".pagination a").live("click", function() {
$(".pagination").html("Loading...");
$.getScript(this.href);
return false;
});
});
然后创造
home.js.erb
$('#div_tags_list').html('<%= escape_javascript(render partial: '/customersb2b/user_customer_numbers_list').html_safe %>')
$('#receipts_list').html('<%= escape_javascript(render partial: '/customersb2b/feed').html_safe %>')
$('div#tags_list').html(“”)
$(“#收据列表”).html(“”)
因为我的主页上有两个不同的列表
我要做的就是让will_paginate使用Ajax。
至于SEO方面的问题,我不太了解,但是URL
http://localhost:3000/customers?_=1366372168315&feed_page=1&tags_page=2
仍然有效如果不担心蜘蛛,有一种很好的方法可以轻松做到这一点。花了我5分钟。退房:
如果您收到有关缺少“历史记录”文件的错误,请安装:
但也要注意:
“创建一个视图并将路线映射到它。”应该是:如果请求来自js.+1,则使用respond\u并仅提供项目列表。对于“shiggles”,您可以每天学习新的术语。哦,回答得好,伊恩,我试过实现这个代码。我有两个问题。1.map.connect'items/:page',:controller=>“items”,:action=>“index”,:page=>1向我抛出一个错误,表示“未定义的变量映射”。还有一个错误,我有一个索引视图,它呈现一个部分浏览器,然后呈现一个部分列表,该列表被包装在一个名为“updated_ics_per_table”的div中。所以我使用$(“#update_ics_per_table”.pagination a”)。它不包含在这个函数中。请在这里帮助我。@ramya:Ian的答案是针对Rails 2的,并且其中一些代码在Rails 3+中被弃用。实际上,这个问题是现在的第一个链接;