Dodanie bloku zawartości do strony głównej, usunięcie „std” <div>

9

Chcę zrobić kilka rzeczy i jestem nowy i bardzo daleko od biegłości w Magento; to, o co proszę, to najlepszy, najbardziej zwięzły sposób na wykonanie następujących czynności:

  1. Chciałbym edytować zawartość mojej strony głównej - i prawdopodobnie każdej innej strony CMS, gdy przechodzę dalej w tym projekcie - w moim edytorze tekstu, a nie w panelu administracyjnym WYSIWYG. Wydaje mi się, że mam po prostu szablon, na przykład home-content.phtmlzawierający mój znacznik dla mojej karuzeli (karuzeli) i cokolwiek innego, co skończę na umieszczaniu na stronie głównej. Wydawało mi się najbardziej logicznym sposobem zrobienia tego jest dodawaj mój home-content.phtmldo getChildHtml('content')metody w panelu administracyjnym -> CMS -> Strony -> Strona główna - zakładka> Design '-> Układ Aktualizacja xml z kodem jak poniżej:

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

    Jednak to pomieszało następną rzeczą, którą chciałem zrobić ...

  2. Moim zdaniem domyślna struktura HTML Magento jest przerażająco rozdęta, ze zbyt wieloma zagnieżdżonymi div( otoki -> strona -> główny kontener col1-layout -> main -> col-main tylko po to, aby dostać się do zawartości strony) . Sprawia, że ​​stylizacja z Sass jest dla mnie koszmarem, a wszystkie style klas podzielone są na 5 różnych części Sassa. Czyszczę więc domyślną strukturę, aby pasowała do moich głównych zasad projektowania. Częściowo oznacza to usunięcie pustych elementów, takich jak osławiony <div class="std"> </div>. Najskuteczniejszym sposobem na pozbycie się tego (ponieważ nie planuję używać panelu administracyjnego dla treści) jest użycie <remove name="cms.wrapper">CMS Home Layout Update XML. Problem polega na tym, że usuwa to wszystko, co dodam za pomocą powyższej metody ( reference name="content").

Zasadniczo: jak mogę dodać treść do mojej strony głównej za pomocą .phtml i usunąć <div class="std"> </div>bez konfliktu? Nie rozumiem, jak funkcjonalność admin -> CMS -> aktualizacja kodu XML różni się od funkcjonalności layout.xml, ani dlaczego powinienem używać jednego nad drugim (np. Czy nie mógłbym użyć <cms index-index>tego samego?) .

Z góry dziękuję wszystkim.

Ezratyczny
źródło
W moim przypadku .stddodaje style list tam, gdzie nie są potrzebne. Jak można się spodziewać w przypadku Magento, jest to długa procedura do rozwiązania.
rybo111

Odpowiedzi:

12

Pozwól nam podzielić twój problem na 3 części i przeanalizować go.

1. Musisz dodać plik szablonu do swojej strony CMS

Metoda, którą tu zastosujesz, na pewno zadziała. Oznacza to, że musisz dodać ten fragment kodu na stronie cms, w zakładce projektu

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

Ponieważ plik szablonu jest bezpośrednio contentblokowany, zawartość szablonu będzie renderowana przez magento. Więc nie musisz używać asnieruchomości w swoim core/template block.

2. Jak tego uniknąć <div class="std"></div>

Ten div jest tak naprawdę elementem div otoki dla stron cms. Zobacz definicję tego bloku tutaj.

  <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>

Jak widać, cms.wrapperblok jest typu page/html_wrapper. Blok ten zawija cały swój blok potomny elementem div (element domyślny) i automatycznie renderuje bloki potomne.

Aby uniknąć tego bloku, użyłeś tego kodu

<remove name="cms.wrapper">

Jest to jednak całkowicie błędne. Naprawdę usuwa div otoki. Ale wraz z tym usuwa również blok potomny cms_page. To cms_pagejest z typem cms/page. Oznacza to, że odnosi się do bloku Mage_Cms_Block_Page. Ten blok jest „sercem” stron CMS. Więc usunięcie opakowania wyczyściło również blok serca strony CMS. Dlatego nie dostałeś żadnych danych wyjściowych na stronie cms.

Więc co powinieneś zrobić, aby uniknąć tego opakowania? Odpowiedź jest dość prosta. Uciekaj cms_pagez opakowania, a następnie bezpiecznie wyjmij opakowanie. Oto kod, którego należy użyć w sekcji układu strony 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>

Jak widać w kodzie xml układu, najpierw usuwamy opakowanie, a tym samym wstawiamy cms_pageblok przez nasz kod. Jak widać, wykorzystaliśmy również nasz blok szablonów. Spowoduje to wyświetlenie najpierw zawartości pliku szablonu na stronie, a następnie zawartości strony cms.

3. W jaki sposób admin -> CMS -> aktualizacja kodu XML różni się od funkcjonalności layout.xml

Załóżmy, że chcesz mieć specjalny wygląd jednej ze stron CMS, które masz w swojej witrynie. W tym celu najlepszą metodą, jaką możesz wybrać, jest dodanie aktualizacji układu poprzez admin-> CMS-> Layout. Będzie to dotyczyło wyłącznie strony CMS.

Ale jeśli musisz wprowadzić jakieś ogólne zmiany do wszystkich stron CMS, to byłoby łatwe layout.xml.

Ogólnie więc, jaką metodę należy zastosować, aby zmienić układ, zależy wyłącznie od tego, co chcesz osiągnąć. W zależności od tego musisz zastosować jedną metodę. Nie wszystkie metody.

Mam nadzieję, że to pomaga

Rajeev K Tomy
źródło
3

Jeśli jest tylko jedna strona naruszająca zasady, to najlepszy i najprostszy sposób IMO:

Edytuj kartę strony CMS "Design".

Odwołaj się do elementu opakowania, użyj setElementClassmetody, aby zastosować albo brak klasy, albo nową klasę.

<reference name="cms.wrapper">
<action method="setElementClass"><value>none</value></action>
</reference>
MES
źródło
0

Powinieneś zmodyfikować układ, zwykle 1column.phtml, 2columns.phtml itp. I ustawić je tak, jak chcesz / potrzebujesz.

Te PHTML-y są podstawową strukturą dowolnego układu i są programowo wypełnione aktualizacjami XML.

Nie wpłynie to na nic innego, jeśli zachowasz spójność między szablonami i układami w swoim własnym motywie.

mbalparda
źródło
Podobnie jak dodawanie warunkowe if this is the home page, include this code ...na wszystkich stronach układu, a następnie po prostu usuwanie getCHildHtml('content')na wszystkich stronach? Chcę się nauczyć, jak korzystać z Magento i jego narzędzi, a nie tylko zaryzykować.
Ezratic
Nie, układy są używane w całej witrynie, w różnych okolicznościach i przy różnych aktualizacjach w zależności od trasy. Zrób jedno pytanie naraz, jeśli masz więcej wątpliwości, zadaj więcej pytań, ale nie edytuj tego, bo może być zamknięte.
mbalparda
Nie próbuję być niegrzeczny; Doceniam, że nie spieszysz się ze odpowiedzią. Jednak nie sądzę, aby twoja odpowiedź mi pomogła. Próbuję usunąć element i dodać blok do pojedynczej strony CMS, ale moja metoda nie działa - więc proszę o taki, który działa. Zdaję sobie sprawę z ogólnego celu układów i szablonów, a twoje „Używaj rzeczy poprawnie i będzie działać” nie odpowiada na moje pytanie.
Ezratic
Mylisz tę stronę jako „czy inni ludzie pracują za darmo”. Odpowiedź jest prawidłowa i prawdopodobnie ta, której szukasz, a kiedy dowiesz się, jak działają rzeczy w Magento, znajdziesz odpowiedź, która jest sposobem na kontynuację w tym przypadku.
mbalparda
Przeczytaj to, a znajdziesz większość tego, czego potrzebujesz: magentocommerce.com/knowledge-base/entry/…
mbalparda
0

Zrozumienie wszystkich kierunków w zaakceptowanej odpowiedzi zajęło mi minutę, więc aby na niej nałożyć, to wszystko, co było potrzebne, aby usunąć opakowanie dla wszystkich stron CMS: <div class="std"></div>

W cms.xml zmień blok cms_page na:

<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>
Justin
źródło