Dzień po weekendzie - poniedziałek, a do pracy jest kawałek... Na wstępie wyjazd prosto w korek, czemu miałby się od razu tak pięknie zacząć, ale zaczął się bo co jak co ale rmf o tej porze rozkłada na łopatki, nawet w największym korku w poniedziałkowy poranek śmiech w samochodzie jest dla bardzo wielu dziwną sprawą. Cóż, nie każdy ma ulubioną pracę do której właśnie jedzie. No dobra, lewy pas, but i jazda nie ma co się opierniczać i stać w miejscu w końcu trzeba dojechać.
Dojeżdżam pod biuro i czeka moje stałe miejsce na dzikim parkingu! Tak, parkuje i uwaga śledzie bo developer jedzie. Często mam wrażenie, że ludzie wiedzą że jestem programistą i mają takie swoje dziwne spojrzenia. No tak dev idzie do pracy, więc idźcie i wy rodacy.
Temaciki w pracy jakże bardzo przyjemne, bo czeka już na mnie integrowanie podziemne. Kumpel przyszedł po chorobie i trzeba bylo podzielić się zasilaniem z kontaktu. Dzisiejszy dzień bardzo spokojny, nie działo się zbyt wiele, ale za to pojawi się temacik, ponieważ zapewne nie jeden developer magento może mieć z tym problem.
Nadpisywanie modułów - modele, bloki, klasy pomocnicze (helpery - w angielskie wersji lepiej brzmi) i kontrolery dla anglojęzycznych podsyłam link gdzie jest to także dobrze opisane: http://inchoo.net/magento/overriding-magento-blocks-models-helpers-and-controllers
Dzisiaj napiszę krótką informację jak nadpisać blok, kwestia modelu i helperów wygląda podobnie i nie ma sensu opisywania ich szczegółowo.
Wszystko zaczynamy od stworzenia nowego modułu dla przykładu GJ_Example
struktura plików
app/etc/modules/GJ_Example.xml
w którym mamy następujący kod, aby nasz moduł był widoczny dla Magento
<?xml version="1.0"?>
<config>
<modules>
<GJ_Example>
<active>true</active>
<codePool>local</codePool>
<depends>
<Mage_Adminhtml />
</depends>
</GJ_Example>
</modules>
</config>
żródło do naszego modułu app/code/local/GJ/Example [GJ_Example - będę sie tym posługiwać żeby nie pisać całej ścieżki za każdym razem]
Teraz możemy dla przykładu nadpisać lub rozszerzyć klasę do widoku pojedynczego zamówienia w administracji. Tworzymy 2 pliki pierwszy jest plikiem w którym dajemy informacje o nadpisaniu bloku w module Mage_Adminhtml
[GJ Example]/etc/config.xml
<?xml version="1.0"?>
<config>
<modules> <!-- informacja o naszym module -->
<GJ_Example>
<version>1.0.0</version>
</GJ_Example>
</modules>
<global> <!-- strefa gdzie nadpisujemy nasz blok (Jest takze adminhtml i frontend, ale o tym przy innej okazji) -->
<blocks> <!-- jako ze nadpisujemy blok podajemy tutaj, taką informacje, dla modelu i zasobów (resource) byłoby models, a dla naszych pomocników (helperów) helpers -->
<adminhtml> <!-- w tym miejscu mamy informacje o nadpisywanym module tzw. shortcode Mage_Adminhtml -->
<rewrite> <!-- dodajem tag kontrolny o nadpisywaniu _Block_ -->
<sales_order_view>GJ_Example_Block_Adminhtml_Sales_Order_View</sales_order_view> <!-- a tutaj dokładny adres do pliku nadpisywanego, czyli wszystko oprócz Mage_adminhtml_block bo to wiemy z tagów powyżej czyli Sales_Order_View -->
</rewrite>
</adminhtml>
</blocks>
</global>
</config> <!-- zamykamy wszystkie tagi i nasz plik konfiguracyjny jest gotowy -->
Teraz tworzymy plik PHP z ścieżką podaną poniżej
[GJ Example]/Block/Adminhtml/Sales/Order/View.php
a oto jego przykładowa zawartość
<?php
// oczywiście naszej góry nie ruszamy (czyli dokładnie tak powinna wyglądać implentencja bloku nadpisywanego
class GJ_Example_Block_Adminhtml_Sales_Order_View extends Mage_Adminhtml_Block_Sales_Order_View {// napisz swój kod nadpisz sobie metodę lub rozszerz, teraz mała różnica między jednym a drugim
// typ calkowitego nadpisania metody
public function getEditUrl()
{
return $this->getUrl('*/sales_order_edit/akcja');
}// sposob rozszerzenia metody w bloku
public function getHeaderText()
{
$this->getOrder()->setExtOrderId('twoje ext ID');
return parent::getHeaderText();
}
}?>
W sumie to wszystko co trzeba zrobić żeby nadpisać blok. Czy to nie jest proste? Z pewnością jest oczywiście tylko wtedy jeśli ma się podstawy budowy magento. Jak dla mnie w magento 2 jest dużo lepsze używanie pluginów ale o tym w innym artykule.
A na sam koniec tak pięknego dnia, czekała na mnie pyszna kolacja, za co bardzo dziękuje mojej kochanej wspierającej mnie w każdy dzień kobiecie! :) A oto taka focia dla was "Papryczki faszerowane"