1
  • I just have a small code issue - I use the Ultimo Magento theme which has tabs on the product page. I have set up the tabs and they get their info from custom static blocks. Now one of these I want to display a custom block based on an attribute, for example I have 2 types of shoes, and those shoes have different features. In the custom tab block I added

{{block type="core/template" template="page/productfeatures.phtml"}} which has the following code in it:


checkAttributeSet($_product, 'soft_sole_shoe_size')): echo $this->getLayout()->createBlock('cms/block')->setBlockId('features_soft')->toHtml();
elseif($this->checkAttributeSet($_product, 'toddler_rubber_sole_shoe_size')): echo $this->getLayout()->createBlock('cms/block')->setBlockId('features_toddler')->toHtml();
endif;
?>

I found some code online which I added to app/code/local/THEME/Block/Product/view.phtml - displayed at bottom.

If I remove the php tags in top code, the tab writes out that code as is on the page, not the block text. If I leave code as is the text does not display. If I just write "hello world" in the productfeatures.phtml that displays on front.

Hoping for advice?

~~~~~~~~~~~~~~~~~~~~~~~~~


public function checkAttributeSet($product = null, $attributeSetName = null) {
 if(is_null($product) || is_null($attributeSetName)) return false;
 $attributeSetModel = Mage::getModel("eav/entity_attribute_set");
 $attributeSetModel->load($product->getAttributeSetId());
 if($attributeSetModel->getAttributeSetName() == $attributeSetName) {
 return true;
 }
 else {
 return false;
 }
 }

So the whole page code looks like




 */
class Mage_Catalog_Block_Product_View extends Mage_Catalog_Block_Product_Abstract
{
    /**
     * Default MAP renderer type
     *
     * @var string
     */
    protected $_mapRenderer = 'msrp_item';

    /**
     * Add meta information from product to head block
     *
     * @return Mage_Catalog_Block_Product_View
     */
    protected function _prepareLayout()
    {
        $this->getLayout()->createBlock('catalog/breadcrumbs');
        $headBlock = $this->getLayout()->getBlock('head');
        if ($headBlock) {
            $product = $this->getProduct();
            $title = $product->getMetaTitle();
            if ($title) {
                $headBlock->setTitle($title);
            }
            $keyword = $product->getMetaKeyword();
            $currentCategory = Mage::registry('current_category');
            if ($keyword) {
                $headBlock->setKeywords($keyword);
            } elseif ($currentCategory) {
                $headBlock->setKeywords($product->getName());
            }
            $description = $product->getMetaDescription();
            if ($description) {
                $headBlock->setDescription( ($description) );
            } else {
                $headBlock->setDescription(Mage::helper('core/string')->substr($product->getDescription(), 0, 255));
            }
            if ($this->helper('catalog/product')->canUseCanonicalTag()) {
                $params = array('_ignore_category' => true);
                $headBlock->addLinkRel('canonical', $product->getUrlModel()->getUrl($product, $params));
            }
        }

        return parent::_prepareLayout();
    }

    /**
     * Retrieve current product model
     *
     * @return Mage_Catalog_Model_Product
     */
    public function getProduct()
    {
        if (!Mage::registry('product') && $this->getProductId()) {
            $product = Mage::getModel('catalog/product')->load($this->getProductId());
            Mage::register('product', $product);
        }
        return Mage::registry('product');
    }

    /**
     * Check if product can be emailed to friend
     *
     * @return bool
     */
    public function canEmailToFriend()
    {
        $sendToFriendModel = Mage::registry('send_to_friend_model');
        return $sendToFriendModel && $sendToFriendModel->canEmailToFriend();
    }

    /**
     * Retrieve url for direct adding product to cart
     *
     * @param Mage_Catalog_Model_Product $product
     * @param array $additional
     * @return string
     */
    public function getAddToCartUrl($product, $additional = array())
    {
        if ($this->hasCustomAddToCartUrl()) {
            return $this->getCustomAddToCartUrl();
        }

        if ($this->getRequest()->getParam('wishlist_next')) {
            $additional['wishlist_next'] = 1;
        }

        $addUrlKey = Mage_Core_Controller_Front_Action::PARAM_NAME_URL_ENCODED;
        $addUrlValue = Mage::getUrl('*/*/*', array('_use_rewrite' => true, '_current' => true));
        $additional[$addUrlKey] = Mage::helper('core')->urlEncode($addUrlValue);

        return $this->helper('checkout/cart')->getAddUrl($product, $additional);
    }

    /**
     * Get JSON encoded configuration array which can be used for JS dynamic
     * price calculation depending on product options
     *
     * @return string
     */
    public function getJsonConfig()
    {
        $config = array();
        if (!$this->hasOptions()) {
            return Mage::helper('core')->jsonEncode($config);
        }

        $_request = Mage::getSingleton('tax/calculation')->getDefaultRateRequest();
        /* @var $product Mage_Catalog_Model_Product */
        $product = $this->getProduct();
        $_request->setProductClassId($product->getTaxClassId());
        $defaultTax = Mage::getSingleton('tax/calculation')->getRate($_request);

        $_request = Mage::getSingleton('tax/calculation')->getRateRequest();
        $_request->setProductClassId($product->getTaxClassId());
        $currentTax = Mage::getSingleton('tax/calculation')->getRate($_request);

        $_regularPrice = $product->getPrice();
        $_finalPrice = $product->getFinalPrice();
        if ($product->getTypeId() == Mage_Catalog_Model_Product_Type::TYPE_BUNDLE) {
            $_priceInclTax = Mage::helper('tax')->getPrice($product, $_finalPrice, true,
                null, null, null, null, null, false);
            $_priceExclTax = Mage::helper('tax')->getPrice($product, $_finalPrice, false,
                null, null, null, null, null, false);
        } else {
            $_priceInclTax = Mage::helper('tax')->getPrice($product, $_finalPrice, true);
            $_priceExclTax = Mage::helper('tax')->getPrice($product, $_finalPrice);
        }
        $_tierPrices = array();
        $_tierPricesInclTax = array();
        foreach ($product->getTierPrice() as $tierPrice) {
            $_tierPrices[] = Mage::helper('core')->currency(
                Mage::helper('tax')->getPrice($product, (float)$tierPrice['website_price'], false) - $_priceExclTax
                    , false, false);
            $_tierPricesInclTax[] = Mage::helper('core')->currency(
                Mage::helper('tax')->getPrice($product, (float)$tierPrice['website_price'], true) - $_priceInclTax
                    , false, false);
        }
        $config = array(
            'productId'           => $product->getId(),
            'priceFormat'         => Mage::app()->getLocale()->getJsPriceFormat(),
            'includeTax'          => Mage::helper('tax')->priceIncludesTax() ? 'true' : 'false',
            'showIncludeTax'      => Mage::helper('tax')->displayPriceIncludingTax(),
            'showBothPrices'      => Mage::helper('tax')->displayBothPrices(),
            'productPrice'        => Mage::helper('core')->currency($_finalPrice, false, false),
            'productOldPrice'     => Mage::helper('core')->currency($_regularPrice, false, false),
            'priceInclTax'        => Mage::helper('core')->currency($_priceInclTax, false, false),
            'priceExclTax'        => Mage::helper('core')->currency($_priceExclTax, false, false),
            /**
             * @var skipCalculate
             * @deprecated after 1.5.1.0
             */
            'skipCalculate'       => ($_priceExclTax != $_priceInclTax ? 0 : 1),
            'defaultTax'          => $defaultTax,
            'currentTax'          => $currentTax,
            'idSuffix'            => '_clone',
            'oldPlusDisposition'  => 0,
            'plusDisposition'     => 0,
            'plusDispositionTax'  => 0,
            'oldMinusDisposition' => 0,
            'minusDisposition'    => 0,
            'tierPrices'          => $_tierPrices,
            'tierPricesInclTax'   => $_tierPricesInclTax,
        );

        $responseObject = new Varien_Object();
        Mage::dispatchEvent('catalog_product_view_config', array('response_object' => $responseObject));
        if (is_array($responseObject->getAdditionalOptions())) {
            foreach ($responseObject->getAdditionalOptions() as $option => $value) {
                $config[$option] = $value;
            }
        }

        return Mage::helper('core')->jsonEncode($config);
    }

    /**
     * Return true if product has options
     *
     * @return bool
     */
    public function hasOptions()
    {
        if ($this->getProduct()->getTypeInstance(true)->hasOptions($this->getProduct())) {
            return true;
        }
        return false;
    }

    /**
     * Check if product has required options
     *
     * @return bool
     */
    public function hasRequiredOptions()
    {
        return $this->getProduct()->getTypeInstance(true)->hasRequiredOptions($this->getProduct());
    }

    /**
     * Define if setting of product options must be shown instantly.
     * Used in case when options are usually hidden and shown only when user
     * presses some button or link. In editing mode we better show these options
     * instantly.
     *
     * @return bool
     */
    public function isStartCustomization()
    {
        return $this->getProduct()->getConfigureMode() || Mage::app()->getRequest()->getParam('startcustomization');
    }

    /**
     * Get default qty - either as preconfigured, or as 1.
     * Also restricts it by minimal qty.
     *
     * @param null|Mage_Catalog_Model_Product $product
     * @return int|float
     */
    public function getProductDefaultQty($product = null)
    {
        if (!$product) {
            $product = $this->getProduct();
        }

        $qty = $this->getMinimalQty($product);
        $config = $product->getPreconfiguredValues();
        $configQty = $config->getQty();
        if ($configQty > $qty) {
            $qty = $configQty;
        }

        return $qty;
    }

    /**
     * Retrieve block cache tags
     *
     * @return array
     */
    public function getCacheTags()
    {
        return array_merge(parent::getCacheTags(), $this->getProduct()->getCacheIdTags());
    }
public function checkAttributeSet($product = null, $attributeSetName = null) {
 if(is_null($product) || is_null($attributeSetName)) return false;
 $attributeSetModel = Mage::getModel("eav/entity_attribute_set");
 $attributeSetModel->load($product->getAttributeSetId());
 if($attributeSetModel->getAttributeSetName() == $attributeSetName) {
 return true;
 }
 else {
 return false;
 }
 }

}

1 Answer 1

1

hi you have call wrong block as write code in Mage_Catalog_Product_View

You can call block type core/template that means you call class Mage_Core_Block_Template. and this class is not included function checkAttributeSet();

You need block type catalog/product_view

and this block type work when you in Product page

So,Please change:

{{block type="catalog/product_view" template="page/productfeatures.phtml"}}

Above guess that the above code is not need because just add below code at view.phtml

if($this->checkAttributeSet($this->getProduct(), 'soft_sole_shoe_size')):
    echo $this->getLayout()->createBlock('cms/block')->setBlockId('features_soft')->toHtml();
elseif($this->checkAttributeSet($this->getProduct()$_product, 'toddler_rubber_sole_shoe_size')): 
    echo $this->getLayout()->createBlock('cms/block')->setBlockId('features_toddler')->toHtml();
endif;
2
  • Hi - thanks so much for the answer. I changed {{block type="core/template" template="page/productfeatures.phtml"}} to {{block type="catalog/product_view" template="page/productfeatures.phtml"}} and then replaced the second bit of code in the productfeatures.phtml file, but now the page breaks. Half the items on page are missing?
    – Bogratt
    Commented Jan 16, 2015 at 18:27
  • Hi - my log file shows this error - any ideas? My Attribute Set name in admin is Shoes - Soft Sole so changed from soft_sole_shoe_size which is the attribute name. Was not sure which to use. exception 'Varien_Exception' with message 'Invalid method Mage_Core_Block_Template::checkAttributeSet(Array ( [0] => [1] => Shoes - Soft Sole ) )' in /usr/www/users/shooszxjje/shoodev/lib/Varien/Object.php:653 Stack trace:
    – Bogratt
    Commented Jan 23, 2015 at 19:57

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.