Magento - 使用自定义变量允许最终用户从管理面板修改样式 - 缓存?

时间:2012-05-15 15:14:57

标签: css magento admin

我打算使用Magento内置的Custom Variable系统来允许用户改变样式的各个方面。很容易将其引入标题,并将样式选项用于以下语句:

Mage::getModel('core/variable')->loadByCode('backgroundColour')->getData('store_plain_value');

在自定义块中,并在head块中包含此内容:

<block type="page/template_links" name="customvars" as="customVars" template="page/html/customvars.phtml"/>

然而,我担心表现。自定义变量是否已缓存?如果我有40个这样的变量,那么这会耗尽资源吗?

我知道我可以将它们全部包含在一个css块中,但是我希望通过将它们分离出来来保持额外的易用性增益。

1 个答案:

答案 0 :(得分:4)

中“自定义变量”功能的值
System -> Custom Variables

,据我所见,专门缓存。如果它可以帮助您解决客户的问题,我不会让这阻止您使用它们。其他事情会更快地导致性能问题。

如果你看一下Magento使用这些变量的主要地方

#File: app/code/core/Mage/Core/Model/Email/Template/Filter.php
public function customvarDirective($construction)
{
    $customVarValue = '';
    $params = $this->_getIncludeParameters($construction[2]);
    if (isset($params['code'])) {
        $variable = Mage::getModel('core/variable')
            ->setStoreId($this->getStoreId())
            ->loadByCode($params['code']);
        $mode = $this->getPlainTemplateMode()?Mage_Core_Model_Variable::TYPE_TEXT:Mage_Core_Model_Variable::TYPE_HTML;
        if ($value = $variable->getValue($mode)) {
            $customVarValue = $value;
        }
    }
    return $customVarValue;
}

您可以看到它们已加载以下链式方法调用

$variable = Mage::getModel('core/variable')
    ->setStoreId($this->getStoreId())
    ->loadByCode($params['code']);

所以你知道在这个级别的代码中没有缓存。如果您跳转到core/variable模型类文件

#File: app/code/core/Mage/Core/Model/Variable.php
public function loadByCode($code)
{
    $this->getResource()->loadByCode($this, $code);
    return $this;
}

您可以在loadByCode方法中看到没有缓存逻辑。快速浏览整个文件也没有提到字符串“cache”。

然后,如果你看一下模型资源

#File: app/code/core/Mage/Core/Model/Resource/Variable.php
public function loadByCode(Mage_Core_Model_Variable $object, $code)
{
    if ($result = $this->getVariableByCode($code, true, $object->getStoreId())) {
        $object->setData($result);
    }
    return $this;
}

再次没有特殊的缓存逻辑。此外,通过此文件为字符串“缓存”grep显示什么。

最后,在其他空控制器操作中运行以下代码将转储变量值。

public function indexAction()
{   
    $values = Mage::getModel('core/variable')
    ->setStoreId(1)
    ->loadByCode('abc');
    var_dump($values->getData());
    exit;
}

如果您这样做,那么使用单独的工具更新core_variable_value表并重新加载页面,您将看到值已更新。

所有这些都指向未缓存的值。