我打算使用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块中,但是我希望通过将它们分离出来来保持额外的易用性增益。
答案 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
表并重新加载页面,您将看到值已更新。
所有这些都指向未缓存的值。