2010-03-18 74 views
1

我注意到,Magento保持URL为您在core_config_data表中设置的每个商店使用的徽标。Magento:以编程方式更新商店徽标

如果我运行这个SQL:

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

我得到商店及其相关标志的列表。我也得到了config_idscope_id

我希望能够在后台以编程方式更新这些徽标,但我无法弄清楚如何将此表格的数据返回到商店名称。

config_idstore_id以某种方式链接到另一个建立关系的表。 Magento的EAV模型,唉:)

任何想法?

回答

6

Magento提供了一个API来设置和检索配置值。我写了一篇关于fetching data out of the config的文章。如果您有任何下列术语使您感到困惑,您将需要查看它。

至于设置变量,它并不像说“我想将design/header/logo_src”设置为“this value”那么简单。您还需要指定要为其保存值的网站以及要保存其值的存储区。

在这里要小心很重要。我没有深入研究系统,看看Magento是否在后端/资源级别或仅在UI级别强制执行“show for website,show for site”配置值的粒度。我的直觉说这是后者,这意味着你最终可能会在网站/商店层面保存一个价值,而这个价值并不打算在这个层面上被保存下来,这可能会导致可怕的未定义行为。

在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的模型。

setSection方法还有'header''logo_src''design'对应配置URI

design/header/logo_src 

我敢肯定的null秒后,以setWebsitesetStore告诉你保存对象这个值在顶层。您还可以传入商店和网站ID。 (对此我有点不稳定,但是当您保存标志时通常这就是系统正在做的)

'fields''values'是硬编码的。该对象的目的是从一个节中的所有组一次保存多个配置值。

如果您好奇,请在上述控制器中签出saveAction方法。

+0

谢谢你,对我来说是非常有益的。 – Rakward 2010-08-30 11:36:24

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()进行调试,并查看它对我的需求。

+2

你需要调用Mage :: getConfig() - > reinit();和Mage :: app() - > reinitStores();手动更新配置值后。 Magento将它们保存在缓存中。 – 2010-04-01 05:51:57

+0

谢谢艾伦我很感激! – 2010-04-01 23:22:05

4

最简单和最短的方法是:

Mage::getConfig()->saveConfig('design/header/logo_src', $logo); 
相关问题