How to pass parameter with block form contents from cms pages in magento

拥有回忆 提交于 2019-11-30 18:14:23
Renon Stewart

I'm not 100% sure what you are asking, but if you are trying to pass a variable to multibanners.phtml from the code above then you could create another attribute similar to category_id="9" and in multibanners.phtml you could get the value using $this->getData("category_id");

e.g.

{{block ... my_var="value here" ... template="multibanners/multibanners.phtml"}}

In multibanners.phtml:

$this->getData('my_var');

I think the problem here stems from the block type you are calling. When you define a type, you're telling Magento to load that model and pass it the appropriate data - which then only exposes the functions defined on that specific model.

A better solution may be to reference the core block type "core/template" which exposes the ->getData() method, and then load the "multibanners/multibanners" model to work with and output the data.

{{block type="core/template" category_id="9" name="multibanners" alias="multibanners" template="multibanners/multibanners.phtml"}}

I'm not sure what the proper syntax is to load 'multibanners', but in the multibanners.phtml would be something like this:

<?php

$catId = $this->getData('category_id');
$multibanner = Mage::getModel('multibanners/multibanners')->load($catId);

/**
** Generate some output here.
*/

?>

I found this very useful and I thought I'd explain what I did in case it helps anyone else.

I have a few static blocks that I use to build some static pages with basic non-changing information (about-us type pages) which include some photos. The photos are very large (for a web page) and I wanted to use Magento's resizing facility. The only way I could work out to do this was to use the ideas here. I now have a block I can include on any cms static page/block when I want to have a resized image with several parameters. It's like a subroutine (am I allowed to say that?! ;o). Anyway, here's what I did.

The block:

{{block type="core/template" name="display_resized_img" gimg="IMG_0559.JPG" gsize="300" gpath="/wysiwyg/ShopFront/" gclass="about-us" galt="The shop" template="utilities/display_resized_img.phtml"}}

and the phtml code file:

<?php
/*
 *  Displays and resizes an image as requested from the block.
 *  The image is only resized if it hasn't been already.
 */

$img = $this->getData('gimg');
$size = $this->getData('gsize');
$path = $this->getData('gpath');
$class = $this->getData('gclass');
$alt = $this->getData('galt');
$resizePath = Mage::getBaseDir ('media') . $path . "resized/" . $size . $img;
if (!file_exists($resizePath)):
    $imagePath = Mage::getBaseDir('media') . $path . $img;
    $imageObj = new Varien_Image($imagePath);
    $imageObj->constrainOnly(TRUE);
    $imageObj->keepAspectRatio(TRUE);
    $imageObj->keepFrame(FALSE);
    $imageObj->resize($size, null);
    $imageObj->save($resizePath);
endif;
$resizeUrl = Mage::getBaseUrl ('media') . $path . "resized/" . $size . $img;
?>
<img class="<?php echo $class; ?>" src="<?php echo $resizeUrl ?>" alt="<?php echo $alt; ?>">

Note I save my re-sized images in a resized folder and add the new size to the image filename so I can easily see what's happening and manage the files.

Thanks for reading!

Mahmood Rehman

When adding block on a cms pages remove style from block code.

{{block type="multibanners/multibanners" name="multibanners" alias="multibanners" template="multibanners/multibanners.phtml" category_id="8"}}

To get the category_id in your phtml or Block use $this->getCategoryId().

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!