Temlate PHP (20 article)
Wróć do strony
Jeśli chcemy sprawdzić czy jesteśmy na stronie głównej w template/page/html/header.phtml:
if($this->getIsHomePage()) {
echo "Homepage";
} else {
echo "NOT Homepage";
}
Jeśli chcemy sprawdzić czy jesteśmy na stronie głównej w jakimkolwiek innym pliku .phtml albo .php:
if(Mage::getBlockSingleton("page/html_header")->getIsHomePage()) {
echo "Homepage";
} else {
echo "NOT in Homepage";
}
lub alternatywnie:
$routeName = Mage::app()->getRequest()->getRouteName();
$identifier = Mage::getSingleton("cms/page")->getIdentifier();
if($routeName == "cms" && $identifier == "home"){
echo "Homepage!";
}else{
echo "NOT Homepage!";
} klasa: Mage_Core_Helper_Url
$currentUrl = Mage::helper("core/url")->getCurrentUrl();
klasa: Mage_Core_Model_Store
$currentUrl = Mage::app()->getStore()->getCurrentUrl(false);
Gotowy kod do skopiowania:
require_once("app/Mage.php"); Zakładając, że chcemy np. wywołać nowy blok media nie zastępując starego (lub zastępując, lub jakkolwiek) i że nowa templatka będzie w catalog/product/view/media_new.phtml:
Dynamiczne załadowanie bloku:
$block = $this->getLayout()->createBlock("catalog/product_view_media");
$block->setTemplate("catalog/product/view/media_new.phtml");echo $block->renderView();
Sprawdzamy czy blok działa jak planowaliśmy - w pliku media_new.phtml dodajemy kod:
echo "nowy blok:";
$product = $this->getProduct();
print_r($product->getData());
Wersja nieco bardziej zaawansowana:
Tworzymy blok jak wyżej, chcemy jednak dodać do niego jakieś nasze dane i dodać go do np. bloku "content":
$data = array("key1" => "value1","key2" => "value2");
$block = $this->getLayout()->createBlock("catalog/product_view_media");
$block->setMydata($data);
$block->setTemplate("catalog/product/view/media_new.phtml");
$this->getLayout()->getBlock("content")->append($block);
echo $block->renderView();
Sprawdzamy czy blok działa jak planowaliśmy - w pliku media_new.phtml dodajemy kod:
echo "nowy blok:";
print_r($this->getMydata());
Blok breadcrumbs możemy dodać na 2 sposoby:
- za pomocą layout-u XML (opis w kategorii Template Layout)
- za pomocą kodu PHP
Zaczynamy za pomocą pobrania bloku breadcrumbs:
$breadcrumbs = $this->getLayout()->getBlock("breadcrumbs");
Dodajemy pierwszy item do bloku (oczywiście - home lub strona główna):
$breadcrumbs->addCrumb(
"home",
array(
"label"=>$this->__("Home"),
"title"=>$this->__("Home"),
"link"=>Mage::getBaseUrl()
)
);
Następne itemy dodajemy tak samo z wyjątkiem ostatniego, który zwykle nie powinien zawierać linka (czyli w array nie dodajemy "link" itd):
I wyświetlamy blok na stronie za pomocą kodu:
echo $breadcrumbs->toHtml(); Jeśli na stronie kategorii:
$category = $this->getCurrentCategory();
$category_id = $category->getId();
$category_name = $category->getName();
$category_parent_id = $category->getParentId();
$category_path = $category->getPath();//getPath() w tym wypadku to ścieżka kategorii czyli ścieżka od root do obecnej np.: 1/2/6/2345
Albo pobierz wszystko:
print_r($category->getData());
Jeśli na innych stronach:
$category = Mage::registry("current_category");
$category_id = $category->getId();
$category_name = $category->getName();
$category_parent_id = $category->getParentId();
$category_path = $category->getPath();//getPath() to w tym wypadku ścieżka kategorii (patrz wyżej)
Albo pobierz wszystko:
print_r($category->getData());
Jeśli znasz ID kategorii::
$category = Mage::getModel("catalog/category")->load(89);
$category_url = $category->getUrl();
Poniewaz addAttributeToSelect(media_gallery) przy pobieraniu nie zadziala, musimu tu uzyc modelu backendowego i metody afterLoad():
Pobieramy kolekcje:
$productCollection = Mage::getModel(catalog/product)
->getCollection()
->addAttributeToSelect(*)
->load();
Dalej:
foreach($productCollection as $product){
$attributes = $product->getTypeInstance(true)->getSetAttributes($product);
$media_gallery = $attributes[media_gallery];
$backend = $media_gallery->getBackend();
$backend->afterLoad($product);
$mediaGallery = $product->getMediaGalleryImages();
I teraz juz w loopie:
foreach ($mediaGallery as $image)
{
echo ($image->getUrl());//itd
}
Ładowanie produktu po id:
$_productId = "166";
$_product = Mage::getModel("catalog/product")->load($_productId);
$baseImage = $product->getImage();
$thumbnail = $product->getThumbnail();
$smallImage = $product->getSmallImage();
foreach ($product->getMediaGalleryImages() as $image)
{
$file_name = $image->getFile();
$url = $image->getUrl();
}
Sukces:
Mage::getSingleton("core/session")->addSuccess("Success message");
Notka:
Mage::getSingleton("core/session")->addNotice("Notice message");
Błąd:
Mage::getSingleton("core/session")->addError("ERROR message");
Ostrzeżenie:
Mage::getSingleton("core/session")->addWarning("WARNING message");
Pobranie wszystkich $_GET i $_POST z rządania:
$this->getReguest()->getParams();
Pobranie pojedynczego parametru z rządania:
$this->getReguest()->getParam("param_key");
gdzie ("param_key") jest znanym nam kluczem posta lub geta np. $_POST["param_key"]
Możemy pobrać 3 rodzaje metod płatności:
- wszystkie metody płatności
- aktywne/włączone metody płatności
- metody płatności użyte podczas transakcji
ad.1 wszystkie metody płatności:
klasa: Mage_Payment_Helper_Data albo Mage_Payment_Model_Config
$allPaymentMethods = Mage::helper("payment")->getPaymentMethods();
$allPaymentMethodsList = Mage::helper("payment")->getPaymentMethodList();
ad.2 aktywne/włączone metody płatności:
klasa: Mage_Payment_Model_Config
$allPaymentMethods = Mage::getModel("payment/config")->getAllMethods()
$activePaymentMethods = Mage::getModel("payment/config")->getActiveMethods();
ad.3 metody płatności użyte podczas transakcji:
klasa: Mage_Sales_Model_Resource_Order_Payment_Collectio
$collection = Mage::getResourceModel("sales/order_payment_collection");
$collection->getSelect()->group("method");
$usedPaymentMethods = array();
foreach ($collection as $col){
$usedPaymentMethods[] = $col->getMethod();
}
Pobranie wszystkich atrybutów:
$productId = 52;
$product = Mage::getModel("catalog/product")->load($productId);
$attributes = $product->getAttributes();
Pobranie NAME, VALUE i ATTRIBUTE CODE atrybutów:
foreach ($attributes as $attribute) {
$attributeCode = $attribute->getAttributeCode();
$label = $attribute->getStoreLabel($product);
$value = $attribute->getFrontend()->getValue($product);
}
Pobranie NAM, VALUE i ATTRIBUTE CODE atrybutów tylko z FRONTEND:
foreach ($attributes as $attribute) {
if ($attribute->getIsVisibleOnFront()) {
$attributeCode = $attribute->getAttributeCode();
$label = $attribute->getFrontend()->getLabel($product);
$value = $attribute->getFrontend()->getValue($product);
}
}
Ładowanie produktu po id:
$_productId = "166";
$_product = Mage::getModel("catalog/product")->load($_productId);
Pobranie manufacturer ID:
$_manufacturerId = $_product->getManufacturer();
Pobranie manufacturer NAME:
$_manufacturerName = $_product->getAttributeText("manufacturer");
Pobranie produktu w bloku:
$product = $this->getProduct();
lub jeśli np. blok tworzony dynamicznie i product=NULL:
$product = Mage::registry("current_product");
pobranie wszystkich gÅ‚ównych danych:
print_r($product->getData());
Jeśli jesteśmy w templace template/bundle/catalog/product/view/type/bundle/option/checkbox.phtml:
$_selections = $_option->getSelections();
foreach($_selections as $_selection){
$_product = Mage::getModel("catalog/product")->load($_selection->product_id);
echo $_product->getUrlPath();
}
funkcja getUrlPath() nie jest już wspierana, jednak wciąż w magento (ver 1.9.3.10) zwraca jedyny poprawny url
W produktach grupowych podobnie, jednak nie trzeba ładować produktu, wystarczy zwykłe:
echo $_product->getUrlPath();
W Magento 1 zdefiniowano następujące typy produktu:
- Simple Product (produkt type id = "simple")
- Grouped Product (produkt type id = "grouped")
- Configurable Product (produkt type id = "configurable")
- Bundle Product (produkt type id = "bundle")
- Virtual Product (produkt type id = "virtual")
- Downloadable Product (produkt type id = "downloadable")
Możemy sprawdzić typ produktu w sposób następujący:
$product = $this->getProduct(); LUB: $product = Mage::registry("current_product");
$product_type = $product->getTypeId();
następnie:
if($product_type == "simple"){
echo "simple product";
}
albo np. dla listy produktów możemy pokusić się o małą wariację:
$product_type_list = array("simple","grouped","configurable","bundle","virtual","downloadable");
$_productCollection=$this->getLoadedProductCollection();
foreach($_productCollection as $product){
foreach($product_type_list as $position => $all_types_id){
if($product->getTypeId() == $all_types_id){
echo $all_types_id;
}
}
}
lub jakikolwiek inny, w danej chwili pasujący nam, kod.
Ładowanie produktu po id:
$_productId = "166";
$_product = Mage::getModel("catalog/product")->load($_productId);
Ładowanie produktu po SKU:
$_sku = "logitechcord";
$_catalog = Mage::getModel("catalog/product");
$_productId = $_catalog->getIdBySku($_sku);
$_product = Mage::getModel("catalog/product")->load($_productId);
Ładowanie produktu po jakimkolwiek atrybucie:
$atrybut = "logitechcord";
$product = Mage::getModel("catalog/product")->loadByAttribute("sku",$_sku);
Załaduj produkt lub wykorzystaj już załadowany, następnie:
$prod_configurable = Mage::getModel("catalog/product_type_configurable")->setProduct($product);
$children_collection = $prod_configurable->getUsedProductCollection()->addAttributeToSelect("*")->addFilterByRequiredOptions();
foreach($children_collection as $simple_product){
var_dump($simple_product->getId());
}
NastÄ™pnie jeÅ›li chcesz dostać siÄ™ do parametrów zarzÄ…dzania magazynem:
oczywiście w petli dla pobranej wyżej kolekci foreach($children_collection as $simple_product)
$test = Mage::getModel("cataloginventory/stock_item") ->loadByProduct($simple_product->getId());
echo $test->getQty();
echo $test->getManageStock();
i tak dalej
Zakładając, że produkt jest załadowany:
$childProducts = Mage::getModel("catalog/product_type_configurable")->getUsedProducts(null, $product);
Jeśli nie (np. poza stroną produktu, należy najpierw załadować produkt po id, sku itd. )