我注意到Magento保留了您在core_config_data
表格中设置的每个商店使用的徽标的URL。
如果我运行此SQL:
SELECT *
FROM core_config_data`
WHERE path = 'design/header/logo_src'
我得到了商店列表及其相关徽标。我还得到config_id
和scope_id
。
我希望能够在幕后以编程方式更新这些徽标,但我无法弄清楚如何将此表的数据与商店名称联系起来。
config_id
和store_id
以某种方式链接回另一个建立关系的表。 Magento的EAV模型,呃:)
有什么想法吗?
答案 0 :(得分:6)
Magento提供了一个API来设置和检索配置值。我写了一篇关于fetching data out of the config的文章。如果下面的任何术语让您感到困惑,您将需要查看它。
至于设置变量,它并不像说“我想将design / header / logo_src”变量设置为“this value”那么简单。您还需要指定要保存值的网站,以及要保存值的商店。
在这里要小心很重要。我没有深入研究系统,看看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'
方法中的setSection
以及'header'
和'logo_src'
字符串对应于配置URI
design/header/logo_src
我非常确定传递给null
的{{1}}和setWebsite
告诉对象您将此值保存在顶层。您还可以传入商店和网站ID。 (我对此感到有些不稳定,但是当您正常保存徽标时,这就是系统正在做的事情)
setStore
和'fields'
是硬编码的。该对象的目的是从一个部分中的所有组一次保存多个配置值。
如果您好奇,请查看上述控制器中的'values'
方法。
答案 1 :(得分:4)
最简单,最简短的方法是:
Mage::getConfig()->saveConfig('design/header/logo_src', $logo);
答案 2 :(得分:1)
感谢您的深入回复。我真的很感激。
我发现我可以插入这样的新记录:
INSERT INTO core_config_data (`scope`, `scope_id`, `path`, `value`)
VALUES ('websites', $websiteId, 'design/header/logo_src', $logo);
我对它进行了测试,似乎在配置设计页面中为商店添加了不同的徽标,但是当我在 header.phtml 中通过<?php echo $this->getLogoSrc() ?>
引用徽标时,它是仍然从顶级配置中提取默认徽标。
我认为使用您的帖子作为指导我可以使用Mage::log()
开始调试,看看它在哪里。