Додавання блоку вмісту на домашню сторінку, видалення 'std' <div>


9

Я хочу зробити кілька речей, і я новий і дуже далекий від досвідчених 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-макет -> головна -> кол-головна лише для того, щоб перейти до вмісту сторінки) . Це робить стайлінг із Sass для мене кошмаром, тому що всі стилі цих класів поділяються на 5 різних частин Sass. Отже, я прибираю структуру за замовчуванням, щоб відповідати моїм власним принципам дизайну. Частина цього означає видалення порожніх елементів, наприклад сумнозвісних <div class="std"> </div>. Найбільш ефективний спосіб позбутися цього (оскільки я не планую використовувати панель адміністрування для вмісту) - це <remove name="cms.wrapper">в XML для оновлення домашньої макети CMS. Проблема полягає в тому, що це видаляє все, що я додаю методом вище ( reference name="content").

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

Заздалегідь дякую всім.


У моєму випадку .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 для обгортання сторінок 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">

Однак це абсолютно неправильно. Це дійсно видаляє обгортковий дів. Але поряд з цим він також знімає дочірній блок cms_page. Це cms_pageз типом cms/page. Це означає, що це посилання на блок Mage_Cms_Block_Page. Цей блок є "серцем" Сторінок CMS. Таким чином, знявши обгортку, виникла також серцевий блок CMS Page. Ось чому ви не отримали жодного результату на своїй сторінці 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, що є у вас на вашому сайті. Для цього найкращим методом, який ви можете вибрати, є додавання оновлення макета через адмін-> CMS-> Макет. Це однозначно стосується лише сторінки CMS.

Але якщо вам потрібно застосувати деякі загальні зміни до всіх CMS-сторінок, тоді це було б легко layout.xml.

Отже, як правило, який метод слід застосувати для зміни макета, суто залежить від того, чого ви хочете досягти. Залежно від цього, потрібно перейти до одного методу. Не всім методом.

Сподіваюся, що це допомагає


3

Якщо є лише одна кривдна сторінка, то найкращий і найпростіший спосіб IMO:

Відредагуйте "Design"вкладку сторінки CMS .

Посилайтеся на елемент обгортки, використовуйте setElementClassметод, щоб застосувати або немає класу, або новий клас.

<reference name="cms.wrapper">
<action method="setElementClass"><value>none</value></action>
</reference>

0

Ви повинні змінити макет, як правило, 1column.phtml, 2column.phtml тощо, і зробити їх такими, як вам потрібно / потрібно.

Ці PHTML є базовою структурою будь-якої верстки та програмно заповнені оновленнями XML.

Це не вплине на що-небудь інше, якщо ви будете зберігати узгодженість між шаблонами та макетами у власній темі.


Як, що, додавши умовне if this is the home page, include this code ...на всі сторінки макета, а потім просто видалити getCHildHtml('content')на всіх сторінках? Я хочу навчитися краще використовувати Magento і його інструменти краще, а не просто кувалдою.
Ezratic

Ні, макети використовуються по всьому сайту, за різних обставин та з різними оновленнями залежно від маршруту. Задайте одне запитання одночасно, якщо у вас є сумніви, задайте більше запитань, але не редагуйте це, або воно може бути закритим.
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>
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.