Добавление блока содержимого на домашнюю страницу, удаление "std"


Я хочу сделать несколько вещей, и я новичок и очень очень далек от мастерства в Magento; то, о чем я прошу, - это лучший, самый краткий способ сделать следующее:

  1. Я хотел бы редактировать содержимое своей домашней страницы - и, возможно, любой другой страницы CMS, по мере продвижения в этом проекте - в моем текстовом редакторе, а не в панели администратора WYSIWYG. Я думаю, у меня просто был бы шаблон типа home-content.phtml, содержащий мою разметку для моей карусели(ов) и все такое в противном случае я в конечном итоге размещаю на своей домашней странице. Мне показалось, что самый логичный способ сделать это - прикрепить мой home-content.phtml к методу getChildHtml('content') в панели администратора - > CMS -> Страницы -> Домашняя страница -> вкладка "Дизайн" -> Обновление макета xml с кодом, подобным этому:

    <reference name="content">
                <block type="core/template" name="home-content"
                       as="home-content" template="home-content.phtml" />
    </reference>
    

    Однако это было испорчено следующим, что я хотел сделать...

  2. На мой взгляд, структура HTML Magento по умолчанию ужасно раздута, со слишком большим количеством вложенных div (оболочка ->страница ->основной контейнер col1-макет -> main -> col-main просто чтобы перейти к содержимому страницы). Это делает стиль с Sass кошмаром для меня, так как стили всех этих классов разделены на 5 различных частей Sass. Итак, я очищаю структуру по умолчанию, чтобы она соответствовала моим собственным принципам проектирования. Частично это означает удаление пустых элементов, таких как печально известный <div class="std"> </div>. Самый эффективный способ избавиться от этого (так как я не планирую использовать панель администратора для контента) - использовать <remove name="cms.wrapper"> в XML-файле обновления домашней компоновки CMS. Проблема в том, что, это удаляет все, что я добавляю с помощью описанного выше метода (reference name="content").

В основном: Как я могу добавить контент на свою домашнюю страницу с помощью .phtml и удалить <div class="std"> </div> без конфликта? Я не понимаю, чем функциональность admin -> CMS -> XML обновления макета отличается от функциональности layout.xml, или почему я должен использовать одно поверх другого (например, не мог бы я использовать <cms index-index> для того же самого?).

Заранее всем спасибо.

Author: Ezratic, 2014-07-31

4 answers

Давайте разделим вашу проблему на 3 раздела и рассмотрим ее.

1. Вам нужно добавить файл шаблона на свою страницу CMS

Метод, который вы здесь применяете, наверняка сработает. То есть вам нужно добавить этот фрагмент кода на страницу cms, на вкладке дизайн

<reference name="content"><block type="core/template" name="home-content"  template="test.phtml" /></reference>

Поскольку ваш файл шаблона напрямую попадает под блокировку content, содержимое вашего шаблона будет отображаться magento. Таким образом, вам не нужно использовать свойство as в вашем core/template block.

2. Как избежать <div class="std"></div>

Этот div на самом деле является элементом div-оболочки для страниц cms. Смотрите определение этого блока здесь.

  <block type="page/html_wrapper" name="cms.wrapper" translate="label">
        <label>CMS Content Wrapper</label>
        <action method="setElementClass"><value>std</value></action>
        <block type="cms/page" name="cms_page"/>
  </block>

Как вы можете видеть, cms.wrapper блок имеет тип page/html_wrapper. Что делает этот блок, так это то, что он обернет весь свой дочерний блок элементом div (элемент по умолчанию) и автоматически отобразит дочерние блоки.

Чтобы избежать этого блока, вы использовали этот код

<remove name="cms.wrapper">

Однако это совершенно неправильно. Оно делает действительно, удалите обертку div. Но наряду с этим он также удаляет дочерний блок cms_page. Это cms_page относится к типу cms/page. Это означает, что это ссылка на блок Mage_Cms_Block_Page. Этот блок является "сердцем" Страниц CMS. Таким образом, удаление обертки также уничтожило сердечный блок страницы CMS. Вот почему вы не получили никаких выходных данных на своей странице cms.

Итак, что вы должны сделать, чтобы избежать этой обертки? Ответ довольно прост. Извлеките cms_page из обертки, а затем удалите обертку безопасно. Итак, вот код, который вам нужно использовать в разделе макета страницы cms.

<reference name="content"><remove name="cms.wrapper" /><block type="core/template" name="home-content"  template="test.phtml" /><block type="cms/page" name="cms_page"/></reference>

Как вы можете видеть в xml-коде макета, мы сначала удаляем оболочку и, следовательно, вставляем блок cms_page через наш код. Мы также использовали наш блок шаблонов, как вы можете видеть. Это приведет к отображению содержимого файла шаблона сначала на вашей странице, а затем содержимого страницы cms.

3. Чем XML-обновление макета admin ->CMS -> отличается от функциональности layout.xml

Предположим, вы хотели бы иметь специальный внешний вид для одной из страниц CMS, которые у вас есть на вашем сайте. Для этого лучший способ, который вы можете выбрать, - добавить обновление макета через admin->CMS->Макет. Это будет уникально применимо только для страницы CMS.

Но если вам нужно применить некоторые общие изменения ко всем страницам CMS, то это было бы легко сделать layout.xml.

Таким образом, в целом, какой метод следует использовать для изменения макета, зависит исключительно от того, что вы хотите достичь. В зависимости от этого вам нужно использовать один метод. Не весь метод.

Надеюсь, это поможет

 12
Author: Rajeev K Tomy, 2014-08-01 02:21:23

Если есть только одна страница-нарушитель, то лучший и самый простой способ IMO:

Отредактируйте вкладку "Design" страницы CMS.

Ссылайтесь на элемент-оболочку, используйте метод setElementClass, чтобы применить либо отсутствие класса, либо новый класс.

<reference name="cms.wrapper">
<action method="setElementClass"><value>none</value></action>
</reference>
 3
Author: MES, 2017-02-15 15:01:35

Вы должны изменить макет, обычно 1column.phtml, 2columns.phtml и т. Д., И сделать их такими, как вы хотите/нуждаетесь.

Эти PHTML являются базовой структурой любого макета и программно заполнены обновлениями XML.

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

 0
Author: mbalparda, 2014-07-31 16:40:48

Мне потребовалась минута, чтобы понять все указания в принятом ответе, поэтому, чтобы вернуться к нему, это все, что нужно было для удаления оболочки для всех страниц CMS: <div class="std"></div>

В cms.xml, измените блок cms_page на:

<cms_page translate="label">
    <label>CMS Pages (All)</label>
    <reference name="content">
        <block type="core/template" name="page_content_heading" template="cms/content_heading.phtml"/>
        <block type="cms/page" name="cms_page"/>
    </reference>
</cms_page>
 0
Author: Justin, 2014-12-18 21:21:49