2011-10-06 24 views
6

Come posso ottenere la visibilità dei prodotti su un prodotto caricato?Magento: ottieni visibilità prodotto

<?php 
    $Product = Mage::getModel('catalog/product'); 
    $Product->load($_item->getId()); 
    var_dump($product_visibility = $Product->getData('visibility')); 
?> 

Ho provato anche questo:

var_dump($product_visibility = $Product->getVisibility()); 

Ma sempre e solo restituisce NULL

risposta

0

Si consiglia di utilizzare il metodo Mage_Catalog_Model_Product::getStatus (v'è anche metodo utile Mage_Catalog_Model_Product::isVisibleInCatalog).

+0

Hmm che sembra funzionerà ma su un semplice set di prodotti su 'catalog/search' isVisibleInCatalog restituisce false. Prende in considerazione qualcos'altro come la quantità, ecc.? – iamjonesy

+0

@WebFlakeStudio: scusate, forse ho frainteso la domanda dei PO, ma _why_ pensate che dovrebbe usare 'getStatus()' quando vuole solo lo stato della visibilità corrente del prodotto (catalogo, ricerca, nessuno, entrambi)? –

+0

Il metodo 'Mage_Catalog_Model_Product :: isVisibleInCatalog()' non è correlato al campo visibilità. – Zyava

10

Questo è il codice che ho usato, e lavorato su Magento versione 1.5.0.1:

$pr2test = Mage::getModel('catalog/product'); 
$pr2test->load($product->getId()); 
echo 'Visibility: '.$pr2test->getVisibility(); 

Il valore visibilità è un numero intero (1-4). Si può scoprire che l'impostazione di ogni numero intero visibilità si traduce in lattina controllando le costanti definite nella classe Mage_Catalog_Model_Product_Visibility trovate qui: /app/code/core/Mage/Catalog/Model/Product/Visibility.php

Se hai problemi, vorrei suggerire controllare la chiamata a $_item->getId() per assicurarsi che sia la restituzione di un ID prodotto valido. Non posso dire dal tuo post quale tipo di oggetto è $_item, ma mi sembra di ricordare che c'è una differenza tra articoli e prodotti. Forse prova uno di questi:

$_item->getProductId(); 
$_item->getProduct()->getId(); 
+0

Per quelli lontani da Mage_Catalog_Model_Product_Visibility, i valori sono 1 => non visibili, 2 => nel catalogo, 3 => nella ricerca, 4 => entrambi. – Fuser97381

3

Eri per caso lavorando con un prodotto estratto da una collezione? Tipico trucco con Magento in quanto devi aggiungere specificamente i campi da selezionare prima di caricare la raccolta, altrimenti l'attributo restituirà null senza errori.

4

se si desidera l'attributo di visibilità in una collezione di prodotti che si dovrebbe fare un join

guardando Magento codice prodotto macinare si possono trovare

  $collection->joinAttribute('visibility', 'catalog_product/visibility', 'entity_id', null, 'inner', $store->getId()); 

così nel codice che si può fare

$prodColl = Mage::getModel('catalog/product')->getCollection() 
      ->addAttributeToSelect('name') 
      ->joinAttribute('visibility', 'catalog_product/visibility', 'entity_id', null, 'inner', 1); 
foreach ($prodColl as $prod) 
    { 
     $v  = $prod->getVisibility(); 
    } 
+1

successivamente è possibile utilizzare i metodi di Nick: $ product-> isVisibleInCatalog() e $ product-> isVisibleInSiteVisibility() –

1

Prova questo

$product->isVisibleInCatalog() && $product->isVisibleInSiteVisibility() 
+0

Nick ha ragione - l'aggiunta di '$ product-> isVisibleInSiteVisibility()' restituirà la visibilità del prodotto. Questo ha funzionato per me! – Markie

Problemi correlati