1

我注意到 Magento 将 URL 保留到它用于您在core_config_data表中设置的每个商店的徽标。

如果我运行这个 SQL:

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

我得到一个商店列表及其相关徽标。我也得到 aconfig_id和 a scope_id

我希望能够在幕后以编程方式更新这些徽标,但我不知道如何将此表的数据与商店名称相关联。

config_id并且store_id必须以某种方式链接回另一个建立关系的表。Magento 的 EAV 模型,呃 :)

有任何想法吗?

4

3 回答 3

6

Magento 提供了一个 API 来设置和检索配置值。我写了一篇关于从配置中获取数据的文章。如果以下任何术语使您感到困惑,您将需要查看它。

至于设置变量,并不是说“我想将design/header/logo_src”变量设置为“这个值”那么简单。您还需要指定为哪个网站保存值,以及为哪个商店保存值。

在这里要小心很重要。我还没有深入研究系统,看看 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

我很确定nulls 传递给setWebsitesetStore告诉对象您将这个值保存在顶层。您还可以传递商店和网站 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 回答