首页 文章

Magento:以编程方式更新商店徽标

提问于
浏览
1

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

如果我运行这个SQL:

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

我得到了商店列表及其相关徽标 . 我也得到 config_idscope_id .

我希望能够在幕后以编程方式更新这些徽标,但我无法弄清楚如何将此表的数据与商店名称相关联 .

config_idstore_id 以某种方式链接回另一个设置关系的表 . Magento的EAV模型,呃:)

有任何想法吗?

3 回答

  • 1

    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模型 .

    setSection 方法中的 'design' 以及 'header''logo_src' 字符串对应于配置URI

    design/header/logo_src
    

    我很确定 null 传递给 setWebsitesetStore 告诉你're saving this value at the top level. You could also pass in store and website IDs. (I'这个对象有点摇摇欲坠,但是当你正常保存徽标时系统正在做什么)

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

    如果你很好奇,请查看上述控制器中的 saveAction 方法 .

  • 6

    最简单,最简单的方法是:

    Mage::getConfig()->saveConfig('design/header/logo_src', $logo);
    
  • 4

    感谢您的深入回复 . 我真的很感激 .

    我想我可以插入一条这样的新记录:

    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() 开始调试,看看它在哪里 .

相关问题