11

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

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

从 cms pages content area ,但我没有收到任何东西。
如果我将块与操作方法一起使用,那么我很容易获得我的价值。任何人都知道如何使用我的自定义块传递变量?

4

4 回答 4

30

我不是 100% 确定你在问什么,但是如果你试图multibanners.phtml从上面的代码中传递一个变量,那么你可以创建另一个类似的属性category_id="9"multibanners.phtml你可以使用$this->getData("category_id");

例如

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

multibanners.phtml

$this->getData('my_var');
于 2012-11-06T07:32:11.140 回答
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.
*/

?>
于 2013-10-24T17:17:33.577 回答
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; ?>">

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

谢谢阅读!

于 2013-07-19T08:01:15.020 回答
0

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

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

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

于 2012-11-07T05:20:43.370 回答