Добавление блока контента на домашнюю страницу, удаление «std» <div>

9

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

  1. Я хотел бы редактировать содержимое моей домашней страницы - и, возможно, каждой другой страницы CMS, как я получу дальнейшее развитие в этом проекте - в моем текстовом редакторе, а не в административной панели WYSIWYG. Я предполагаю, что у меня просто будет шаблон, например, home-content.phtmlсодержащий мою разметку для моей карусели (ий) и все, что я в конечном итоге выложу на своей домашней странице. Это казалось мне наиболее логичным способом сделать это присоединять мою home-content.phtmlк getChildHtml('content')методу в панели администратора -> CMS -> Страницы -> Главная страница -> вкладка «Design» -> Layout Update XML с кодом , как это:

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

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

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

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

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

Ezratic
источник
В моем случае .stdдобавляет список стилей, где они не нужны. Как и ожидалось с Magento, это длинная процедура для решения.
rybo111

Ответы:

12

Давайте разделим вашу проблему на 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 Pages. Таким образом, удаление оболочки обернуло сердечный блок страницы 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. Чем админ -> CMS -> обновление макета XML отличается от функциональности layout.xml

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

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

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

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

Раджив К Томи
источник
3

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

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

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

<reference name="cms.wrapper">
<action method="setElementClass"><value>none</value></action>
</reference>
MES
источник
0

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

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

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

mbalparda
источник
Как, например, добавить условие if this is the home page, include this code ...на все страницы макета, а затем просто удалить getCHildHtml('content')на всех страницах? Я хочу научиться использовать Magento и его инструменты лучше, а не просто кувалдой.
Езратик
Нет, макеты используются по всему сайту, в разных обстоятельствах и с разными обновлениями в зависимости от маршрута. Задайте один вопрос за раз, если у вас больше сомнений, задайте больше вопросов, но не редактируйте этот вопрос, иначе он может быть закрыт.
mbalparda
Я не пытаюсь быть грубым здесь; Я ценю, что вы нашли время, чтобы ответить мне. Тем не менее, я просто не думаю, что ваш ответ мне поможет. Я пытаюсь удалить элемент и добавить блок на одну страницу CMS, но мой метод не работает - поэтому я запрашиваю тот, который работает. Я знаю об общем назначении макетов и шаблонов, и ваша «Используйте все правильно, и это будет работать» не отвечает на мой вопрос.
Ezratic
Вы ошибочно принимаете эту страницу за «работу других людей бесплатно». Ответ действителен и, вероятно, тот, который вы ищете, и как только вы узнаете, как все работает в Magento, вы обнаружите, что ответ - это способ действовать в этом случае.
mbalparda
Прочитайте это, и вы найдете большую часть того, что вам нужно: magentocommerce.com/knowledge-base/entry/…
mbalparda
0

Мне потребовалась минута, чтобы понять все направления в принятом ответе, поэтому, чтобы добавить его, это все, что было необходимо для удаления оболочки для всех страниц 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>
Джастин
источник