基于Rails与Camaleon CMS实现首页专属局部视图的条件渲染设置
解决Camaleon CMS首页局部视图的条件显示问题
嘿,这个需求在Camaleon CMS里其实很好实现,因为CMS本身提供了页面识别的Helper,加上Rails的路由判断,两种方案都能搞定,而且不用新建视图文件,直接修改现有模板就行:
方案一:用Camaleon CMS自带的页面属性判断(推荐)
这个方案更靠谱,因为如果后续在CMS后台修改了首页设置(比如把某个其他页面设为首页),代码依然能正常工作,不会因为路径变化失效。
你只需要把要控制显示的局部视图代码包裹在条件判断里,判断当前页面是否是站点的首页:
<header id="header"> <div class="container"> <div class="logo text-center"> <%= link_to 'welcome' do %> <%= image_tag('kopihub-logo.jpg', class: 'img-responsive') %> <% end %> <div class="spasi"></div> </div> </div> <!-- 仅在首页显示Partial Header --> <% if current_site.the_home_page == current_page %> <%= render 'partials/header' %> <% end %> </header> <!-- 仅在首页显示Partial Section --> <% if current_site.the_home_page == current_page %> <%= render 'partials/main' %> <% end %> <div class="container"> <%= yield %> </div>
解释一下:
current_site是Camaleon CMS提供的Helper,代表当前访问的站点(单站点项目也能正常使用)the_home_page方法会返回站点设置的首页页面对象current_page是当前访问的页面对象,两者对比就能精准判断是否在首页
方案二:用Rails路由路径判断(简单直接)
如果你的首页固定是根路径(localhost:3000),不会在后台修改首页设置,那可以直接用Rails的路径判断,代码更简洁:
<header id="header"> <div class="container"> <div class="logo text-center"> <%= link_to 'welcome' do %> <%= image_tag('kopihub-logo.jpg', class: 'img-responsive') %> <% end %> <div class="spasi"></div> </div> </div> <!-- 仅在根路径显示Partial Header --> <% if request.path == root_path %> <%= render 'partials/header' %> <% end %> </header> <!-- 仅在根路径显示Partial Section --> <% if request.path == root_path %> <%= render 'partials/main' %> <% end %> <div class="container"> <%= yield %> </div>
这个方法的核心是request.path == root_path,判断当前请求的路径是否等于根路径,适合首页固定的场景。
小提示:优化代码结构
如果不想重复写两次条件判断,也可以把两个局部视图放在同一个条件块里,让代码更整洁:
<header id="header"> <div class="container"> <div class="logo text-center"> <%= link_to 'welcome' do %> <%= image_tag('kopihub-logo.jpg', class: 'img-responsive') %> <% end %> <div class="spasi"></div> </div> </div> <% if current_site.the_home_page == current_page %> <!-- Partial Header --> <%= render 'partials/header' %> </header> <!-- Partial Section --> <%= render 'partials/main' %> <% else %> </header> <% end %> <div class="container"> <%= yield %> </div>
这样就把首页特有的视图结构都包裹在条件里,逻辑更清晰。
内容的提问来源于stack exchange,提问作者jack asad
相关产品推荐
相关产品推荐

