2011-10-06 15 views
6

¿Cómo puedo obtener la visibilidad de los productos en un producto cargado?Magento: Obtenga visibilidad del producto

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

He intentado esto así:

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

Pero siempre sólo devuelve NULL

Respuesta

0

Debe utilizar Mage_Catalog_Model_Product::getStatus método (también hay un método útil Mage_Catalog_Model_Product::isVisibleInCatalog).

+0

Hmm que parece que funcionará pero en un producto simple configurado para 'catalog/search' isVisibleInCatalog devuelve falso. ¿Toma algo más en cuenta como la cantidad, etc.? – iamjonesy

+0

@WebFlakeStudio: lo siento, tal vez entendí mal la pregunta de OP, pero _¿por qué crees que debería usar 'getStatus()' solo cuando quiere el estado de la visibilidad actual del producto (catálogo, búsqueda, ninguno, ambos)? –

+0

El método 'Mage_Catalog_Model_Product :: isVisibleInCatalog()' no está relacionado con el campo de visibilidad. – Zyava

10

Este es el código utilicé, y funcionó en Magento versión 1.5.0.1:

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

El valor de visibilidad es un número entero (1-4). Puede averiguar qué configuración cada entero visibilidad se traduce en lata por el control de las constantes definidas en la clase Mage_Catalog_Model_Product_Visibility que se encuentran aquí: /app/code/core/Mage/Catalog/Model/Product/Visibility.php

Si tienes problemas, sugeriría el control de su llamada a $_item->getId() para asegurarse de que está devolviendo una ID de producto válido. No puedo decir por tu publicación qué tipo de objeto es $_item, pero parece recordar que hay una diferencia entre los artículos y los productos. Tal vez pruebe uno de estos:

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

Para los que están fuera de Mage_Catalog_Model_Product_Visibility, los valores son 1 => no visible, 2 => en el catálogo, 3 => en la búsqueda, 4 => ambos. – Fuser97381

3

¿Estaba trabajando con un producto extraído de una colección? Típico de Magento en que tienes que agregar específicamente los campos para seleccionar antes de cargar la colección, de lo contrario el atributo devolverá nulo sin error.

4

si desea que el atributo de visibilidad en una colección de productos que debe hacer una unión

mirando Magento código de molienda producto puede encontrar

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

por lo que en su código que puede hacer

$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

después de eso puedes usar los métodos de Nick: $ producto-> isVisibleInCatalog() y $ producto-> isVisibleInSiteVisibility() –

1

Probar este

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

Nick tiene razón: agregar '$ product-> isVisibleInSiteVisibility()' devolverá la visibilidad del producto. ¡Esto funcionó para mí! – Markie

Cuestiones relacionadas