2

Custom Variableユーザーがスタイリングの側面を変更できるように、Magentoの組み込みシステムを使用することを計画しています。これをヘッダーに取り込み、次のようなステートメントでスタイリングオプションを使用するのは簡単です。

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つに含めることができることは知っていますが、使いやすさの向上によってそれらが分離されないようにしたいと思います。

4

1 に答える 1

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。ファイル全体をすばやくgrepすると、文字列「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;
}

ここでも、特別なキャッシュロジックはありません。また、文字列「cache」のこのファイルをgrepすると、何も表示されません。

最後に、空のコントローラーアクションで次のコードを実行すると、変数値がダンプされます。

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

これを行う場合は、別のツールを使用してcore_variable_valueテーブルを更新し、ページを再読み込みすると、値が更新されていることがわかります。

これはすべて、値がキャッシュされていないことを示しています。

于 2012-05-15T18:01:56.123 に答える