如何从magento的cms页面传递带有块表单内容的参数

时间:2012-11-06 06:52:46

标签: magento static-block

我想用magento中的JSON类型的块代码传递一个变量,

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

来自cms页面的内容区域,但是我没有收到任何东西。
如果我使用带有动作方法的块比我轻易获得我的价值。 任何人都知道如何使用我的自定义块传递变量?

4 个答案:

答案 0 :(得分:28)

我不是100%肯定你在问什么,但如果你试图从上面的代码中将变量传递给multibanners.phtml,那么你可以创建一个类似于category_id="9"的另一个属性,并在{ {1}}您可以使用multibanners.phtml

获取值

e.g。

$this->getData("category_id");

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

multibanners.phtml

答案 1 :(得分:3)

我认为这里的问题源于您调用的块类型。在定义类型时,您告诉Magento加载该模型并将其传递给适当的数据 - 然后只公开在该特定模型上定义的函数。

更好的解决方案可能是引用核心块类型“core / template”,它暴露了 - > getData()方法,然后加载“multibanners / multibanners”模型来处理和输出数据。

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

我不确定加载'multibanners'的正确语法是什么,但在multibanners.phtml中会是这样的:

<?php

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

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

?>

答案 2 :(得分:2)

我发现这非常有用,我想我会解释我做了什么,以防它帮助其他人。

我有一些静态块,我用它来构建一些静态页面,其中包含基本的不变信息(关于我们类型的页面),其中包括一些照片。照片非常大(对于网页),我想使用Magento的调整大小设施。我能做到这一点的唯一方法就是在这里使用这些想法。我现在有一个块可以包含在任何cms静态页面/块上,当我想要一个带有几个参数的调整大小的图像时。这就像一个子程序(我可以这么说吗?!; o)。无论如何,这就是我所做的。

块:

{{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"}}

和phtml代码文件:

<?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; ?>">

注意我将重新调整大小的图像保存在已调整大小的文件夹中,并将新大小添加到图像文件名中,以便我可以轻松查看正在发生的事情并管理文件。

感谢阅读!

答案 3 :(得分:0)

在cms页面上添加块时,从块代码中删除样式。

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

要获取phtml或Block中的category_id,请使用$this->getCategoryId()