1

core_config_dataMagentoは、テーブルに設定した各ストアで使用するロゴのURLを保持していることに気付きました。

このSQLを実行すると:

SELECT * 
FROM core_config_data`
WHERE path = 'design/header/logo_src'

店舗とそれに関連するロゴのリストを取得します。私もとを取得しconfig_idますscope_id

これらのロゴを舞台裏でプログラムで更新できるようにしたいのですが、このテーブルのデータをストア名に関連付ける方法がわかりません。

config_idstore_idどういうわけか、関係を設定する別のテーブルにリンクするようになりました。MagentoのEAVモデル、うーん:)

何か案は?

4

3 に答える 3

6

Magento は、構成値を設定および取得するための API を提供します。config からのデータのフェッチに関する記事を書きました。以下の用語で混乱する場合は、確認してください。

変数の設定に関しては、「design/header/logo_src」変数を「この値に設定したい」と言うほど単純ではありません。また、値を保存する Web サイトと、値を保存するストアを指定する必要があります。

ここで注意することが重要です。Magento がバックエンド/リソース レベルで、または UI レベルでのみ、構成値の「ウェブサイトの表示、サイトの表示」の粒度を適用しているかどうかを確認するために、システムを詳しく調べていません。私の本能は後者だと言います。つまり、ウェブサイト/ストア レベルで保存できるように意図されていない値を保存してしまう可能性があり、それが恐ろしい未定義の動作につながる可能性があります。

1.4 コミュニティ エディションでは、Magento が次の場所に設定値を保存している場所を確認できます。

File: app/code/core/Mage/Adminhtml/controllers/System/ConfigController.php

//around line 126
Mage::getModel('adminhtml/config_data')
    ->setSection($section)
    ->setWebsite($website)
    ->setStore($store)
    ->setGroups($groups)
    ->save();

邪魔にならないように注意してください。最上位のストア/ウェブサイト構成のロゴだけを更新するためのコードは次のようになります。

//create a groups array that has the value we want at the rigth location
$groups_value = array();

$groups_value['header']['fields']['logo_src']['value'] = 'images/logo.gif'; 
Mage::getModel('adminhtml/config_data')
    ->setSection('design')
    ->setWebsite(null)
    ->setStore(null)
    ->setGroups($groups_value)
    ->save();   

この線

Mage::getModel('adminhtml/config_data')

Magento モデルをインスタンス化します。

メソッド'design'内のおよび文字列は、構成 URI に対応します。setSection'header''logo_src'

design/header/logo_src

nulls が渡されたsetWebsiteと確信しておりsetStore、この値をトップレベルで保存していることをオブジェクトに伝えます。ストア ID と Web サイト ID を渡すこともできます。(私はそれについて少し不安定ですが、ロゴを通常どおりに保存すると、それがシステムが行っていることです)

'fields'とは'values'ハードコードされています。オブジェクトの目的は、セクション内のすべてのグループから一度に複数の構成値を保存することです。

興味がある場合は、上記のコントローラーのsaveActionメソッドを確認してください。

于 2010-03-19T00:32:02.383 に答える
5

最も簡単で最短の方法は次のとおりです。

Mage::getConfig()->saveConfig('design/header/logo_src', $logo);
于 2011-09-19T07:52:57.477 に答える
1

詳細な返信をありがとう。本当に感謝しています。

次のように新しいレコードを挿入できることがわかりました。

INSERT INTO core_config_data (`scope`, `scope_id`, `path`, `value`) 
VALUES ('websites', $websiteId, 'design/header/logo_src', $logo);

私はそれをテストし、構成 - デザインページにストアの別のロゴを追加しているように見えますが<?php echo $this->getLogoSrc() ?>header.phtmlでロゴを参照すると、トップレベルの構成からデフォルトのロゴを取得しています。

あなたの投稿をガイドラインとして使用して、デバッグを開始しMage::log()、どこに行くかを確認できると思います。

于 2010-03-19T01:27:52.373 に答える