在Middleman中的整个页面上执行Ruby方法
在我的Middleman构建的网站上,我需要对所有页面(模板)的内容执行特定的Ruby代码。
例如,如果我在config.rb
有以下帮助器:
def myexample(text) text.gsub("dog","cat") end
在我的test.html.haml
:
= myexample("Some text about a dog.")
我的预览和生成的/test.html
会显示:
Some text about a cat.
但是,我使用几种不同的方式来输出需要修改的文本,最明显的是通过HAML的:markdown
filter,所以我不希望将所有内容包装在= myexample("Text")
帮助器中。
我希望能够运行Ruby代码,该代码将所有页面的内容(最好)或生成的HTML输出(如果第一个选项不可能)作为传递给这种帮助器的参数。
理想情况下,此代码将在开发和构建环境中运行,但如果这不可能,则构建就足够了。
有可能这样做吗?
PS。 在我的特定情况下,我使用简写表示法来引用其他页面然后我使用正则表达式和eval()
以便用数据文件中的相对链接替换它们 。
ActionController :: Base具有render_to_string
方法,该方法将以渲染部分或页面的方式为您提供正常的HTML输出,但是采用字符串格式。 这将允许您获取呈现的HTML并在最终将其作为内联模板呈现为真之前进行修改。
在你的控制器中:
rendered_html = render_to_string 'your_template_or_partial' # do stuff to rendered_html render inline: rendered_html.html_safe, layout: 'layouts/application'
html_safe
方法确保Rails知道将其呈现为HTML是安全的。 如果正在呈现用户输入并且您尚未对其进行消毒,则不希望这样做!
如果您不希望它在渲染时使用布局,只需删除:layout参数。