Szukaj…


Uwagi

Dostosowywanie podstawowej funkcjonalności za pomocą motywów

Motywy mają pliki układu, które można między innymi wykorzystać do zmiany bloków pojawiających się na stronie. Szablon bloku można również zmienić i wywołać różne metody.

Projekty na poziomie sklepu

Hierarchiczne motywy strukturalne Magento oznaczają, że motyw podstawowy można rozszerzyć i przypisać na poziomie sklepu.

Rejestrowanie niestandardowych motywów

Motywy można skonfigurować na trzy sposoby:

  1. Na sklep w System> Konfiguracja> Projekt.
  2. Zmiana projektu z terminami System> Projekt.
  3. Wyjątki tematyczne można również ustawić na poziomie kategorii i produktu.

Pakiet a motyw

Pakiet ma wiele motywów. Każdy z motywów w pakiecie dziedziczy z domyślnego motywu w pakiecie.

Projekt Fallback

Procedura zastępowania kompozycji w celu zlokalizowania plików szablonów jest następująca:

  1. {package} / {theme}
  2. {pakiet} / default
  3. podstawowa / domyślna

Aby dodać kolejne katalogi do mechanizmu zastępczego motywu, należy przepisać Mage_Core_Model_Design_Package :: getFilename

Dla obszaru administracyjnego rezerwa jest domyślna / domyślna.

Ścieżki szablonu i układu

Bloki

Bloki są używane do wydruku. Blok główny jest rodzicem wszystkich bloków i jest typu Mage_Page_Block_Html.

Bloki Mage_Core_Block_Template używają plików szablonów do renderowania treści. Nazwa pliku szablonu jest ustawiana w setTemplate () lub addData („szablon”) za pomocą ścieżek względnych.

Szablony to tylko fragmenty PHP zawarte w Mage_Core_Block_Template. Dlatego $ to w szablonie odnosi się do bloku.

Mage_Core_Block_Template używa bufora przed dołączeniem szablonu, aby zapobiec przedwczesnemu wyjściu.

Metoda Mage_Core_Model_Layout :: createBlock tworzy instancje bloków.

Klasa Mage_Core_Model_Layout_Update rozważa, które bloki należy utworzyć dla każdej strony, patrząc na uchwyty układu.

Wszystkie bloki wyjściowe są renderowane, np. Przez wywołanie metody toHtml (), która z kolei może wybrać renderowanie swoich dzieci.

Bloki Text i Text_List automatycznie renderują ich zawartość.

Istnieją dwa zdarzenia, które są uruchamiane wokół renderowania bloku, których można użyć do zmodyfikowania bloku przed i po renderowaniu HTML:

core_block_abstract_to_html_before core_block_abstract_to_html_after Blok podrzędny będzie renderowany tylko automatycznie, jeśli należy do klasy Mage_Core_Block_Textlist, w przeciwnym razie należy wywołać metodę getChildHtml.

Dostęp do instancji bloków można uzyskać poprzez układ, np. Mage :: app () -> getLayout () i $ controller-> getLayout (). Wyjście bloku jest kontrolowane przez funkcję _toHtml ().

Szablony są renderowane za pomocą metod renderView () / fetchView () w bloku szablonu. Buforowanie danych wyjściowych można wyłączyć za pomocą $ layout-> setDirectOutput.

Możliwe jest dodanie bloku do bieżącego układu, ale należy to zrobić przed wywołaniem metody renderLayout ().

Układ XML

<reference>
  -edit a block
<block>
  - define a block 
<action>
  - call method on a block
<update>
  - include nodes from another handle.

Pliki układu można zarejestrować w pliku config.xml:

<config>
    <{area}>
        <layout>
            <updates>
                <{name}>
                    <file>{filepath}</file>
                </{name}>
            </updates>
        </layout>
    </{area}>
</config>

Dane wyjściowe strony można dostosować na następujące sposoby:

  • Zmiany szablonu
  • Zmiany układu
  • Przesłanianie bloków
  • Zmienne obserwatorów na blokach można ustawić na następujące sposoby:
  • Układ - poprzez akcje lub atrybuty
  • Kontroler - $ this-getLayout () -> getBlock ()
  • Bloki potomne - $ this-> getChild ()
  • Inne -Mage :: app () -> getLayout ()

Aktywa bloku głównego

JavaScript i CSS są obsługiwane w bloku Mage_Page_Block_Html_head. Ten blok obsługuje scalanie zasobów w jeden plik, aby zminimalizować żądania HTTP. Scalony plik jest oparty na czasie edycji plików źródłowych.

Podczas scalania CSS wywoływana jest funkcja zwrotna w Mage_Core_Model_Design_Package w celu zaktualizowania dowolnych dyrektyw @import lub url () o poprawne adresy URL

Różne mechanizmy blokowania wyjścia bloku

  • Jeśli odpowiedź została już utworzona i ustawiona na obiekcie odpowiedzi poza zwykłym procesem renderowania (np. W obserwatorze), flagę „no-renderLayout” można ustawić na kontrolerze akcji za pomocą
Mage::app()->getFrontController()->getAction()->setFlag('','no-renderLayout');
  • Zapobiega renderLayout() przetwarzaniu bloków wyjściowych przez renderLayout() .
  • To samo można osiągnąć, wywołując setNoRender (true) na przednim kontrolerze: Mage::app()->getFrontController()->setNoRender(true);
  • Ustawienie flagi isDispatched() na obiekcie odpowiedzi może być bardziej wydajne, aby osiągnąć podobny efekt.

różne rodzaje bloków

  • Mage_Core_Block_Template
  • Mage_Core_Block_Text_List
  • Mage_Core_Block_Messages
  • Mage_Core_Block_Text_Tag
  • Mage_Core_Block_Text
  • Mage_Page_Block_Template_Links Wszystkie bloki są blokami strukturalnymi lub Wszystkie bloki są blokami strukturalnymi lub blokami treści. Przykład:
  • core / lista_tekstów

Przykład bloku strukturalnego .

Nie wykorzystuje szablonów; służy po prostu do wyświetlania zawartości wszystkich swoich bloków potomnych jeden po drugim.

  • rdzeń / szablon

Przykład bloku zawartości .

Wyjście tego typu bloku zależy od przypisanego szablonu. Bloki potomne są wyprowadzane w szablonie za pomocą metody getChildHtml („nazwa_bloku”). Przykład: core / text_list - Przykład bloku strukturalnego. Nie wykorzystuje szablonów; służy po prostu do wyświetlania zawartości wszystkich swoich bloków potomnych jeden po drugim. core / template - Przykład bloku zawartości. Wyjście tego typu bloku zależy od przypisanego szablonu. Bloki potomne są wyprowadzane w szablonie za pomocą metody getChildHtml („nazwa_bloku”).

Dostęp do instancji bloku można uzyskać ze sterownika

Z kontrolera akcji:

$this->getLayout()->getBlock('head')->getTemplate();

/**
* Get specified tab grid
*/
public function gridOnlyAction()
{
$this->_initProduct();
$this->getResponse()->setBody(
$this->getLayout()->createBlock('adminhtml/catalog_product_edit_tab_' .
$this->getRequest()->gerParam('gridOnlyBlock')
)
->toHtml()
);
}


Modified text is an extract of the original Stack Overflow Documentation
Licencjonowany na podstawie CC BY-SA 3.0
Nie związany z Stack Overflow