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:
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.phtml
zawierają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ójhome-content.phtml
dogetChildHtml('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ć ...
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.
źródło
.std
dodaje style list tam, gdzie nie są potrzebne. Jak można się spodziewać w przypadku Magento, jest to długa procedura do rozwiązania.Odpowiedzi:
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
Ponieważ plik szablonu jest bezpośrednio
content
blokowany, zawartość szablonu będzie renderowana przez magento. Więc nie musisz używaćas
nieruchomości w swoimcore/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.
Jak widać,
cms.wrapper
blok jest typupage/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
Jest to jednak całkowicie błędne. Naprawdę usuwa div otoki. Ale wraz z tym usuwa również blok potomny
cms_page
. Tocms_page
jest z typemcms/page
. Oznacza to, że odnosi się do blokuMage_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_page
z opakowania, a następnie bezpiecznie wyjmij opakowanie. Oto kod, którego należy użyć w sekcji układu strony cms.Jak widać w kodzie xml układu, najpierw usuwamy opakowanie, a tym samym wstawiamy
cms_page
blok 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
źródło
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
setElementClass
metody, aby zastosować albo brak klasy, albo nową klasę.źródło
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.
źródło
if this is the home page, include this code ...
na wszystkich stronach układu, a następnie po prostu usuwaniegetCHildHtml('content')
na wszystkich stronach? Chcę się nauczyć, jak korzystać z Magento i jego narzędzi, a nie tylko zaryzykować.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:
źródło