Страницы отображаются без элементов html, head и body - PullRequest
0 голосов
/ 18 января 2012

Я работаю над сайтом, используя Spree 0.70, Rails 3.1 и Ruby 1.9.Я заметил, что некоторые страницы отображаются без их блоков <html><head></head><body></body></html>.

Вместо этого Rails, по-видимому, автоматически упаковывает страницу в блок <html><body></body></html>, что означает, что отображается любой код, предназначенный для размещения в заголовке (т. Е. CSS включает в себя блок страницы title и т. Д.).внутри тела, и все, что зависит от атрибутов тегов head или body (например, CSS), не работает, потому что эти элементы отсутствуют.

Это озадачивает меня, потому что ясно, что мой макет визуализируется, частично и все остальное, но эти элементы верхнего уровня игнорируются или переопределяются.

Когда я говорю "некоторые страницы", я подтвердилчто это не происходит на страницах администратора, и это не происходит на страницах, ограниченных моим приложением (то есть они не используют макет spree_application.html.erb и их контроллер не подкласс Spree::BaseController.) Я переопределилмакет spree_application.html.erb, сделав копию в моем приложении (у меня не было выбора), и все страницы с этой проблемой используют этот макет.Может ли это быть фактором?( Вот страница с разбитым макетом. )

Как я могу вернуть свои корневые элементы?

ETA: Вот файл, который у меня есть в приложении в app/views/layouts/spree_application.html.erb.Это макет, который объединяет все страницы, показывающие проблему.Обратите внимание, что структура div немного отличается от структуры, предоставляемой Spree;Вот почему мне нужно заменить макет, а не использовать переопределение Deface.

<!DOCTYPE HTML>
<%# Overrides the Spree default template %>
<html>
  <head data-hook="inside_head">
    <%= render 'shared/head' %>
    <!--[if lte IE 7]>
            <link rel="stylesheet" type="text/css" href="/stylesheets/ie.css" />
    <![endif]-->
  </head>
  <body class="<%= body_class %>" id="<%= @body_id || 'default' %>" data-hook="body">
    <div id="page-scroll" data-hook>
      <div class='header-wrapper'></div>
      <div id="header" data-hook>
        <ul id="nav-bar" data-hook>
          <%= render 'shared/nav_bar' %>
        </ul>
        <%= render 'shared/logo' %>
      </div>

      <div id="wrapper" data-hook>
        <%= render 'shared/content' %>
      </div>
    </div>

    <%= render 'shared/footer' %>
    <%= render 'shared/google_analytics' %>
  </body>
</html>

1 Ответ

1 голос
/ 23 января 2012

Я решил эту проблему, переместив комментарий ERb из контейнера <html> в контейнер <head>.Моя теория, которую я не успел подтвердить, состоит в том, что когда Deface используется (что в Spree), даже шаблоны ERb должны быть действительными и иметь что-то кроме <head>...</head><body>...</body> контейнеров внутри <html></html>не является действительным.Таким образом, либо Deface (или Nokogiri, который Deface использует под капотом) переписывает это, чтобы заставить его быть действительным, либо он удаляет эти контейнеры, и Rails добавляет основной код перед выводом.

...