Magento pobieranie zmiennych przez getModel i getData

05.11.2013 Angelika Siczek

Skąd biorą się parametry katalogu oraz produktu?

Po wyszukaniu folderu app/code/core/Mage/ ujawni się lista logicznie uporządkowanych i nazwanych podfolderów, jak catalog, checkout, content oraz innych. Po przejściu dalej w folder catalog zawiera całą strukturę w tym folder model. Po jego wybraniu pojawi się cała gama plików, wśród których znajduje się produkt.php Ten właśnie plik zostaje wywołany w momencie przypisania do zmiennej metody getModel(‘catalog/product’). W skrócie getModel(‘catalog/product’) wybiera folder /app/code/core/Mage/ a następnie w folderze product tworzy instancje pliku product.php ulokowaną w podfolderze Model.

Jeżeli teraz wyświetlimy  get_class($cModel), w wyszukiwarce wyświetla się Mage_Catalog_Model_Product. Oznacza to, że nazwy poszczególnych class zawarte są w pliku app/code/core/Mage/Catalog/Model/Product.php. W pliku Product.php jasno widać , że klasa Mage_Catalog_Model_Product rozszerza się o poziom Mage_Catalog_Model_Abstract, coznacza to, że $cModel może korzystać ze wszystkich funkcjonalności przypisanych nie tylko do klasy Mage_Catalog_Model_Product, ale i tych z Mage_Catalog_Model_Abstract.

Aby zobaczyć całą gamę dostępnych metod warto skorzystać z IDE, jak np. NetBeans, który wyświetla wszystkie dostępne funkcje danej klasy w oknie Nawigatora. Ponadto istnieje możliwość skorzystania z opcji pojedynczego wyboru celem powtórzenia możliwych nazw poszczególnych metod, jak na przykład :

echo ‘<ul>’;
foreach (get_class_methods(get_class($cModel)) as $cMethod) {
echo ‘<li>’ . $cMethod . ‘</li>’;
}
echo ‘</ul>’;

 Polecamy przejrzeć inne przydatne metody jak getName, getPrice, getTypeId, getStatus, które mogą pojawić się w $cModel

 echo ‘Product name: ‘ . $cModel->getName();
echo ‘Product price: ‘ . $cModel->getPrice();

Powyższy kod niewiele mówi. Dzięki niemu nie odnajdziemy żadnych cen w wyszukiwarce. Warto zapytać- dlaczego? Do jakiego produktu należy cena? Magento nie zna punktu wyjścia poszczególnych działań. Można by dociekać jak to możliwe, że system nie zna odpowiedzi na jakiekolwiek pytania. Mimo to, otwiera się strona produktu. W porządku, ale pragnę przedstawić kod którego można używać niezależnie od rodzaju otwartej strony. Można zakomunikować to przeglądarce za pośrednictwem pojedynczej linii kodu. Jest ona również na liście dostępnych funkcjonalności. W związku z tym, powyższy kod może naprawić nazwę produktu i cenę, tak aby była zgodna. Aby to osiągnąć, należy wpisać :

$cModel->load(53);
(liczba 53 jset numerem ID domyślnej bazy danych.)

 Plik View.phtml ma gotowy przykład w klasie Mage_Catalog_Model_Product poprzez wybór $_product = $this->getProduct(). Tutaj widać, że twórcy Magento używają metody getProduct().  $this zawiera sporą ilość danych wśród których jest bieżący przykład klasy Mage_Catalog_Model_Product magazynowanych w tej samej strukturze macierzystej. Jeśli zamierzamy poprawić listę dostępnych metod w przypadku $this , tak jak w przypadku $cModel, warto skorzystać z getProduct(), a dokładniej :

echo ‘<ul>’;
foreach (get_class_methods(get_class($this)) as $cThis) {
echo ‘<li>’ . $cThis . ‘</li>’;
}
echo ‘</ul>’;

Jeśli wszystko jest jasne, metodę getModel nie powinna stanowić dłużej problemu. Tworzona jest przykładowa klasa, a następnie jest ona magazynowana. Jak w przypadku $cModel, należy dodać wartości dla obiektu tego typu używając funkcji load. Tytuł tego posta nawiązuje też do getData. Jak zapewne widać, getData jest tylko jednym z wielu dostępnych metod. Można by zapytać dlaczego opowiadamy dwa razy o tym samym? Przed odpowiedzeniem na to pytanie warto wyjaśnić jak getData może działać bez żadnych przypasowanych parametrów. Jeśli zostanie utworzony bez żadnych wspomnianych parametrów, w rezultacie powstanie zespół cech. Można przypasować to do pewnego pola działania, jak powtórzenie $arayVar[‘someField’] . Więc teraz pytanie- czym są możliwe pola? Aby się dowiedzieć należy wybrać :

echo ‘<pre>’;
print_r($cModel->getData());
echo ‘</pre>’;

Rezultaty są wyborne. Jest cały zespół danych, które można użyć w przypadku wizualnych rozwiązań. Powiedzmy, że celem jest naprawa wartości SKU. Istnieje inna metoda, jak np. getSku() lub

echo $cModel->getData(‘sku’);

albo jako ostatnie:

$cModelData = $cModel->getData();
echo $cModelData->sku;

Świetnie. Widząc całą macierz danych, które pojawią się po wybraniu print_r($cModel->getData());, można szybko i jasno zobaczyć że istnieją macierze źródłowe i pewne przypisane pola do obiektów, jak stock_item. To pomaga stworzyć typ Mage_CatalogInventory_Model_Stock_Item. Podczas wykonywania tego, warto skorzystać też :

$cStockItem = $cModel->getData(‘stock_item’);

lub

$cStockItem = $cModelData->stock_item;

Teraz $cStockItem jest obiektem typu Mage_CatalogInventory_Model_Stock_Item. Nie pozostaje nic innego jak pójście o krok dalej w stronę kolejnych działań, wykorzystując przy tym te same informacje, pod warunkiem, że użytkownik objęty jest przez ID metod i baz danych.

Cyfrowe newsy / Bądź na bieżąco

Od początku 2022 roku wchodzimy w skład Unity Group. Teraz zapisując się do naszego newslettera, będziesz na bieżąco z informacjami całej naszej organizacji.

    Wypełniając formularz wyrażasz zgodę na wysyłkę newslettera przez Unity S.A. z siedzibą we Wrocławiu. Zgodę możesz wycofać w każdej chwili. Więcej informacji na ten temat znajdziesz w naszej polityce prywatności.

    *Wymagane

    Andrzej-kurs-programowania

    Andrzej Szylar

    Chief Executive Officer

    E-mail:

    a.szylar@global4net.com
    Magda2

    Magdalena Paczyńska-Kamienik

    HR Manager

    Aleksandra

    Aleksandra Bielawska-Clegg

    HR Business Partner

    E-mail:

    Michal

    Michał Duława

    New Business Developer

    E-mail:

    Katarzyna

    Katarzyna Zajchowska

    Marketing Partner

    E-mail: