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:

  1. za pomocą layout-u XML (opis w kategorii Template Layout)
  2. 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:

  1. wszystkie metody płatności
  2. aktywne/włączone metody płatności
  3. 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:

  1. Simple Product (produkt type id = "simple")
  2. Grouped Product (produkt type id = "grouped")
  3. Configurable Product (produkt type id = "configurable")
  4. Bundle Product (produkt type id = "bundle")
  5. Virtual Product (produkt type id = "virtual")
  6. 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. )