Pregunta

En la lista de productos, muestro al fabricante y todo funciona bien. Pero cuando hago una búsqueda, en lugar de mostrar el nombre del fabricante, muestra No. Uso el siguiente código para mostrar las marcas:

$_product->getResource()->getAttribute('manufacturer')->getFrontend()->getValue($_product)

Estoy usando Magento 1.7.0.2.

¿Fue útil?

Solución

Diagnóstico de su problema real:

  • Asegúrese de que la colección de productos utilizada para la búsqueda incluya el atributo del fabricante o que el atributo del fabricante esté configurado en el backend para mostrar en el frontend (ver captura de pantalla a continuación).
  • Asegúrese de que el manufacturer ATTR está configurado para el Vista de tienda apropiada! En la vista de edición de productos de catálogo de gestión, asegúrese de que el menú desplegable se esté configurando para el valor de la vista de la tienda, no la tienda/sitio web/vista predeterminada.
  • Asegúrate de que te reintexen. Si estás en CE, ejecute el indexador manualmente. Si está en EE, asegúrese de que sus índices se renovan de Cron o Vía $ php shell/indexer.php reindexall.
  • Limpia todos tus cachés. Almacenamiento de almacenamiento de caché. rm -rf var/cache y todas las cosas destructivas. Verifique la existencia de un /tmp/magento carpeta.
  • Desactivar/habilitar el catálogo plano y el reindex.

Habilitando un atributo para frontend/producto/visibilidad de la colección:

enter image description here

Por qué sucede esto:

Entonces, hay un razón válida Por qué Magento devuelve "no" cuando no hay datos disponibles. El método getFrontend Devuelve un objeto que es una subclase de Mage_Eav_Model_Entity_Attribute_Frontend_Abstract.

En el método getValue, si no hay opciones disponibles / establecidas, es predeterminado que salga boolean. Por lo tanto, el valor de "no", que es el equivalente booleano frontend de false:

public function getValue(Varien_Object $object)
{
    $value = $object->getData($this->getAttribute()->getAttributeCode());
    if (in_array($this->getConfigField('input'), array('select','boolean'))) {
        $valueOption = $this->getOption($value);
        if (!$valueOption) {
            $opt     = Mage::getModel('eav/entity_attribute_source_boolean');
//....

Una vez que se realizan los puntos de solución de problemas anteriores, si aún recibe "no" y es una respuesta apropiada (por ejemplo, no tiene fabricante establecido en un producto y, a propósito), es posible que desee probar condicionalmente la salida antes de hacer eco:

$value = $_product->getResource()->getAttribute('manufacturer')->getFrontend()->getValue($_product);
echo $value=="No" ? "" : $value;
Licenciado bajo: CC-BY-SA con atribución
No afiliado a magento.stackexchange
scroll top