我正在我的 Rails 应用程序中实现(或多或少)WordPress 的简码概念。问题是,当我在视图中:yield
定义布局content_for
中的任何内容时,它只是空白。所以额外的 javascript 和 title 标签不会被渲染。
换句话说,content_for? :title
在布局中调用返回 false。
这只会发生在帖子/索引中,并且仅在我登录时 当filter_shortcodes
助手运行时。有没有人遇到过这样的事情?
在视图/帖子/index.html.haml 中:
- content_for :script do
= javascript_include_tag '/assets/autoload.js'
- content_for :title do
Blog
...
= render template: 'article-content',
在views/article-content.html.haml(filter_shortcodes
是Shortcode
模块中定义的辅助函数):
:plain
#{filter_shortcodes instance.content}
我仍然坚信问题出在我的简码模块中,所以它是由不受欢迎的需求支持的:
module Shortcode
def filter_shortcodes content
content.gsub /(?<!\\)\[.+\]/ do |code|
# A shortcode must:
# - be on its own line
# - be [contained within square brackets]
# - be named using only lowercase letters
# If it contains parameters, they must come in the form:
# key="value"
shortcode = /^\s*\[(?<name>[a-z]+) (?<params>.*)\s*\]\s*$/.match code
params_list = shortcode[:params].gsub /"|"/, '"'
param_regexp = /([a-z]+)="([^"]*)"/
shortcode_params = {}
params_list.scan param_regexp do |param|
shortcode_params[param[0].to_sym] = param[1]
end
render_to_string template: "shortcodes/#{shortcode[:name]}",
:locals => shortcode_params, layout: false
end
end
end