【问题标题】:Slim templates, custom DOCTYPESlim 模板,自定义 DOCTYPE
【发布时间】:2012-11-30 05:16:31
【问题描述】:

我有一个具有此文档类型的页面:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML+RDFa 1.0//EN" "http://www.w3.org/MarkUp/DTD/xhtml-rdfa-1.dtd">

现在将其转换为苗条模板格式,bu slim 在预设中没有这样的doctype,我怀疑应该有办法指定自定义一个。现在我使用|:

|<!DOCTYPE html PUBLIC "...skip...>
html
 ....

但它在doctype 行之后呈现时没有换行符:

<!DOCTYPE html PUBLIC "...skip...><html ...

哪些是不受欢迎的,有什么方法可以将它们放在不同的行上?

【问题讨论】:

    标签: ruby doctype slim-lang


    【解决方案1】:

    要在模板中的任意位置插入换行符,只需添加以下行:

    = "\n"
    

    Slim 中的“=”命令执行给定的 Ruby 代码并将其附加到缓冲区。在这种情况下,Ruby 代码只是一个换行符。

    【讨论】:

      【解决方案2】:

      你不需要 | 字符,Slim 允许 inline HTML 直接包含 HTML,包括文档类型。但是这对格式化没有帮助,它之后仍然没有换行符。

      Slim 使用的doctypes are actually managed in Temple。您可以更改它以添加自定义文档类型以获得您想要的行为。这确实涉及弄乱 Temple 的内部数据,因此您需要小心一点,尤其是在升级时,因为内部结构可能已经改变。

      有问题的哈希是frozen,所以你不能只添加一个新条目。但是,您可以dup 它,向重复的哈希添加一个条目,并将新的哈希分配回常量。这将导致 Ruby 生成警告,因为您通常不应该以这种方式重新分配常量。

      new_hash = Temple::HTML::Fast::XHTML_DOCTYPES.dup
      new_hash['rdf'] = '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML+RDFa 1.0//EN" "http://www.w3.org/MarkUp/DTD/xhtml-rdfa-1.dtd">'
      Temple::HTML::Fast::XHTML_DOCTYPES = new_hash
      

      现在您可以使用rdf,就好像它是 Slim 中预定义的文档类型一样。

      doctype rdf
      html
      

      这会产生:

      <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML+RDFa 1.0//EN" "http://www.w3.org/MarkUp/DTD/xhtml-rdfa-1.dtd">
      <html></html>
      

      如果您想避免看到警告,请在更改常量之前将 $VERBOSE 设置为 nil(确保之后将其更改回来)。

      begin
        old_verbose, $VERBOSE = $VERBOSE, nil
        Temple::HTML::Fast::XHTML_DOCTYPES = new_hash
      ensure
        $VERBOSE = old_verbose
      end
      

      (你可以把它变成一个接受块的方法。如果你使用的是 Rails,它已经为你完成了 silence_warnings。)

      【讨论】:

      • 当我删除 | 然后我得到运行时错误:'''Unknown line indicator'''
      • 感谢您的解决方案,但我更愿意避免使用 hacky 解决方案,因为它最终使应用程序难以维护
      • @Dfr 您使用的是什么版本的 Slim?看起来内联 HTML 是在 1.3.1 中添加的:github.com/stonean/slim/blob/v1.3.1/CHANGES#L3
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-04-12
      • 1970-01-01
      • 2015-02-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多