Estoy mostrando una lista de subcategorías por el padre ID de la categoría y estoy queriendo mostrar la categoría de imagen en lugar de un nombre de categoría.

Aquí es lo que tengo hasta ahora…

<div id="menu_brands">
<div class="brand_head">
    <h3><?php echo $this->__('Browse By Brand') ?></h3>
</div>
<div class="brand_list">
    <?php
        $cats = Mage::getModel('catalog/category')->load(6)->getChildren();
        $catIds = explode(',',$cats);

        $categories = array();
            foreach($catIds as $catId) {
                $category = Mage::getModel('catalog/category')->load($catId); 
                $categories[$category->getName()] = $category->getUrl();
                $img = $category->getImageUrl(); //I suspect this line is wrong
        }

        ksort($categories, SORT_STRING);
    ?>

        <ul>
            <?php foreach($categories as $name => $url): ?>
                <li>
                    <!--<a href="<?php echo $url; ?>"><?php echo $name; ?></a>-->
                    <a href="<?php echo $url; ?>" title="<?php echo $name; ?>">
                        <img src="<?php echo $img; ?>" width="auto" alt="<?php echo $name; ?>" /> <!--I suspect this line is wrong-->
                    </a>
                </li>
            <?php endforeach; ?>
        </ul>
</div>
</div>

He intentado un sinnúmero de maneras para mostrar las imágenes en lugar de los nombres de categoría pero nada parece que las imágenes aparezcan. Actualmente con el de arriba, el resultado es un vacío «img src’, de modo que es evidente que hay un error con lo que estoy tratando (y, probablemente, una mejor manera de lograr lo que busco).

Por favor, ¿podría alguien amablemente señalar cuál es el problema?

Si es de alguna importancia, lo que pretendo hacer a posteriori, a continuación, mostrar la categoría de imágenes en un formato de cuadrícula (3 o 4 por línea).

Muchas gracias de antemano.

InformationsquelleAutor zigojacko | 2012-04-04

3 Comentarios

  1. 8

    La solución por zigojacko no es lo ideal, porque por separado de las cargas en los modelos en un bucle. Esto no escala bien, y con muchas categorías de thrash su base de datos. Idealmente, sería agregar las imágenes a la colección infantil.

    Una solución más rápida es agregar el atributo de imagen a una colección con un filtro de ID como B00MER:

    //Gets all sub categories of parent category 'Brands'
    $parent = Mage::getModel('catalog/category')->load(6);
    
    //Create category collection for children
    $childrenCollection = $parent->getCollection();
    //Only get child categories of parent cat
    $childrenCollection->addIdFilter($parent->getChildren());
    //Only get active categories
    $childrenCollection->addAttributeToFilter('is_active', 1);
    
    //Add base attributes
    $childrenCollection->addAttributeToSelect('url_key')
            ->addAttributeToSelect('name')
            ->addAttributeToSelect('all_children')
            ->addAttributeToSelect('is_anchor')
            ->setOrder('position', Varien_Db_Select::SQL_ASC)
            ->joinUrlRewrite();
    
    //ADD IMAGE ATTRIBUTE
    $childrenCollection->addAttributeToSelect('image');
    
    ?>
    <ul>
        <?php foreach($childrenCollection as $cat): ?>
            <li>
                <a href="<?php echo $cat->getURL(); ?>" title="<?php echo $cat->getName(); ?>">
                    <img class="cat-image" src="<?php echo $cat->getImageUrl(); ?>" />
                </a>
            </li>   
        <?php endforeach; ?>
    </ul>
    • Gracias por esta Robert, esto es un poco más elegante.
    • Esto funciona muy bien, gracias Robert! Para cualquier persona que desee obtener la miniatura en lugar de la categoría de uso $childrenCollection->addAttributeToSelect('thumbnail'); y, a continuación, llamar a $cat->getThumbnail() en el foreach
  2. 4

    Nos las arreglamos para resolver este nosotros mismos – ver fijan abajo.

    <?php
        //gets all sub categories of parent category 'Brands'
        $cats = Mage::getModel('catalog/category')->load(6)->getChildren();
        $catIds = explode(',',$cats);
    
        $categories = array();
        foreach($catIds as $catId) {
            $category = Mage::getModel('catalog/category')->load($catId); 
            $categories[$category->getName()] = array(
                'url' => $category->getUrl(),
                'img' => $category->getImageUrl()
            );
        }
    
        ksort($categories, SORT_STRING);
    ?>
        <ul>
            <?php foreach($categories as $name => $data): ?>
                <li>
                    <a href="<?php echo $data['url']; ?>" title="<?php echo $name; ?>">
                        <img class="cat-image" src="<?php echo $data['img']; ?>" />
                    </a>
                </li>   
            <?php endforeach; ?>
        </ul>

    Sorprende que no consiguió más apoyo en este proceso es relativamente simple de Magento tema. Gracias B00MER por tu respuesta, aunque.

  3. 2

    Dar a este método una oportunidad en lugar de su $img = $category->getImageUrl(); a $img = getCategoryImage($category);

    function getCategoryImage($category) {
        $categoryCollection = Mage::getModel('catalog/category')->setStoreId(Mage::app()->getStore()->getId())->getCollection()->addAttributeToSelect('image')->addIdFilter($category->getId());
    
        foreach($categoryCollection as $category) {
            return $category->getImageUrl();
        }
    }

    (ya desaparecida) de Referencia: http://www.magentocommerce.com/boards/viewthread/5026/P45/

    • Gracias por su respuesta, que no parecen trabajar…
    • Fatal error: Call to undefined function getCategoryImage() en //ruta// en la línea 49 ‘$img = getCategoryImage($categoría);’ (línea 49)
    • Deben las funciones de ser declarado dentro de un mismo archivo? Actualmente se está en las extensiones relevantes Navigation.php junto con todos los demás. Gracias
    • gracias. tu código me ayudó.

Dejar respuesta

Please enter your comment!
Please enter your name here