Сделайте что-нибудь на основе имени набора атрибутов в Magento - PullRequest
1 голос
/ 26 марта 2012

Я осмотрелся вокруг и, похоже, не могу найти точного ответа, который мне нужен, поэтому я сделал новое сообщение.

Мне нужно отобразить определенный HTML-код в продуктеСтраница списка, основанная на том, имеет ли коллекция определенный набор атрибутов.

Существует 4 набора атрибутов, которые могут иметь товары: «Одежда», «Сапоги», «Сумки» и «Аксессуары».

Итак, если в коллекции есть набор атрибутов «Сумки» или «Аксессуары», я хочу показать одну вещь, а все остальное - другую.Мой код на данный момент:

<?php 
                    $bags = Mage::getResourceModel('eav/entity_attribute_set_collection')->setEntityTypeFilter($entityTypeId)->addFilter('attribute_set_name', 'Bags');
                    $accessories = Mage::getResourceModel('eav/entity_attribute_set_collection')->setEntityTypeFilter($entityTypeId)->addFilter('attribute_set_name', 'Accessories');

                    $size_default = $_product -> getResource() -> getAttribute('size') -> getFrontend() -> getValue($_product);
                    $size_clothes_fr = $_product -> getResource() -> getAttribute('size_clothes_fr') -> getFrontend() -> getValue($_product);
                    $size_clothes_uk = $_product -> getResource() -> getAttribute('size_clothes_uk') -> getFrontend() -> getValue($_product);
                    $size_clothes_us = $_product -> getResource() -> getAttribute('size_clothes_us') -> getFrontend() -> getValue($_product);
                    $size_clothes_it = $_product -> getResource() -> getAttribute('size_clothes_it') -> getFrontend() -> getValue($_product);
                    $size_shoes_default = $_product -> getResource() -> getAttribute('size_shoe') -> getFrontend() -> getValue($_product);
                    $size_shoes_fr = $_product -> getResource() -> getAttribute('size_shoes_fr') -> getFrontend() -> getValue($_product);
                    $size_shoes_it = $_product -> getResource() -> getAttribute('size_shoes_it') -> getFrontend() -> getValue($_product);
                    $size_shoes_uk = $_product -> getResource() -> getAttribute('size_shoes_uk') -> getFrontend() -> getValue($_product);
                    $size_shoes_us = $_product -> getResource() -> getAttribute('size_shoes_us') -> getFrontend() -> getValue($_product);
                ?>
                <?php if(trim($bags) || trim($accessories)) { ?>
                    <a href="<?php echo $_product->getProductUrl() ?>" title="<?php echo $this->htmlEscape($this->getImageLabel($_product, 'small_image')) ?>" class="product-image"><?php if($_product->isSaleable()): ?><img src="<?php echo $this->helper('catalog/image')->init($_product, 'small_image')->resize(140, 255); ?>" width="140" height="255" alt="<?php echo $this->htmlEscape($this->getImageLabel($_product, 'small_image')) ?>" id="product-image-<?php echo $_product->getId() ; ?>" /><?php endif; ?><?php if(!$_product->isSaleable()): ?><img src="<?php echo $this->getSkinUrl('images/masks/white80.png') ?>" width="140" height="255" alt="<?php echo $this->htmlEscape($this->getImageLabel($_product, 'small_image')) ?>" id="product-image-<?php echo $_product->getId() ; ?>" style="background:url('<?php echo $this->helper('catalog/image')->init($_product, 'small_image')->resize(140, 255); ?>') no-repeat center center" /><?php endif; ?></a>
                <?php } else { ?>
                <div class="sizes">
                    <a class="trigger" href="<?php echo $_product->getProductUrl() ?>" title="<?php echo $this->htmlEscape($this->getImageLabel($_product, 'small_image')) ?>" class="product-image"><?php if($_product->isSaleable()): ?><img src="<?php echo $this->helper('catalog/image')->init($_product, 'small_image')->resize(140, 255); ?>" width="140" height="255" alt="<?php echo $this->htmlEscape($this->getImageLabel($_product, 'small_image')) ?>" id="product-image-<?php echo $_product->getId() ; ?>" /><?php endif; ?><?php if(!$_product->isSaleable()): ?><img src="<?php echo $this->getSkinUrl('images/masks/white80.png') ?>" width="140" height="255" alt="<?php echo $this->htmlEscape($this->getImageLabel($_product, 'small_image')) ?>" id="product-image-<?php echo $_product->getId() ; ?>" style="background:url('<?php echo $this->helper('catalog/image')->init($_product, 'small_image')->resize(140, 255); ?>') no-repeat center center" /><?php endif; ?></a>
                    <div class="popup">
                        <p class="size_title"><?php echo $size_default ;?></p>
                        <p class="size_title"><?php echo $size_clothes_fr ;?></p>
                        <p class="size_title"><?php echo $size_clothes_it ;?></p>
                        <p class="size_title"><?php echo $size_clothes_us ;?></p>
                        <p class="size_title"><?php echo $size_clothes_uk ;?></p>
                        <p class="size_title"><?php echo $size_shoes_default ;?></p>
                        <p class="size_title"><?php echo $size_shoes_fr ;?></p>
                        <p class="size_title"><?php echo $size_shoes_it ;?></p>
                        <p class="size_title"><?php echo $size_shoes_uk ;?></p>
                        <p class="size_title"><?php echo $size_shoes_us ;?></p>
                    </div>
                </div>
                <?php } ?>

Кажется, он не работает, он всегда отображает оператор else независимо.Я явно не делаю что-то прямо здесь.Может кто-нибудь помочь, пожалуйста?Благодаря.

1 Ответ

0 голосов
/ 28 марта 2012

Ваша проблема (если вы еще не решили ее), вероятно, из-за того, что ваши коллекции не возвращают правильные данные.То, что вы получаете, по сути, представляет собой набор наборов атрибутов, отфильтрованных по их имени.Это будет одинаковым каждый раз, потому что вы не будете вовлекать продукт в любой момент.

Попробуйте получить название следующим образом:

$attSetName = Mage::getModel(’eav/entity_attribute_set’) 
    ->load($_product->getAttributeSetId()) 
    ->getAttributeSetName();

И затем сравните эту переменную следующим образом:

if ($attSetName == "bags" || $attSetName == "accessories") {

Если вы намеревались вернуть коллекцию, вы также можете столкнуться с проблемами, поскольку используете php-функцию «trim ()».Trim предназначен для строк, поэтому обрезка объекта коллекции, вероятно, не будет делать то, что вы хотите.Попробуйте вместо этого:

if (count($bags) > 0 || count($accessories) > 0) {
...