【问题标题】:Opencart "store change" php codeOpencart“存储更改”php代码
【发布时间】:2018-01-31 02:08:23
【问题描述】:

是否有任何 php 代码可以更改存储?因此,例如,如果 php 检测到语言是西班牙语,我希望它将整个商店更改为其他商店。

所以它可以在语言改变的任何时候使用 - 然后商店也改变了。 因此,例如,如果有人以英语查看 store1 并将语言更改为西班牙语,那么 store1 也会自动更改为 store2 以及该语言。有什么想法吗?

【问题讨论】:

  • 理论上,您可以使用在语言选择器的“更改”事件上执行的重定向 Javascript。我假设商店 URL 不同?
  • 是的,有不同的 URL - 商店将设置在不同的域或仅在某些子域上。可能您对这段 Javascript 代码是正确的,但我似乎很难编写它。
  • 您为什么不分享商店 URL,以便任何人都可以提供他们的见解,或者至少应该显示语言选择器的 catalog/view/theme/<<themname>>/common/header.tpl(或 .twigg)文件。我可以协助编写默认模板的代码,但如果您不使用它并且对代码不擅长,那么您可能仍然会觉得它很困难。
  • 我无法共享 URL,因为我还没有商店和域名 :) 我正在使用基本模板测试一些模块和解决方案,当我想要的所有东西都完成后,将创建一个新商店.我相信如果我有一段代码与基本商店和默认模板一起使用,我可以将它应用到任何新商店。因此,如果语言是“es”,则将商店更改为“store1.example.com”,如果语言代码是“aaa”,则更改为“store2”...... - 这就是我需要的。
  • 好的,如果您有信心根据示例来实现,您使用的是哪个版本的 OC?

标签: opencart multiple-languages multistore


【解决方案1】:

如果您打开文件:index.php 或 startup.php(基于您使用的 OpenCart 版本),您将看到有一个代码检查用户访问过的 url,然后搜索数据库以查看是否它是默认商店 (store_id = 0) 或其他商店。如果它是默认存储,则没有任何变化。如果不是,则将会话变量(store_id)更改为指定的 store_id,整个 opencart 将基于此 store_id 运行。

OpenCart 1.5.x index.php

// Store
if (isset($_SERVER['HTTPS']) && (($_SERVER['HTTPS'] == 'on') || ($_SERVER['HTTPS'] == '1'))) {
    $store_query = $db->query("SELECT * FROM " . DB_PREFIX . "store WHERE REPLACE(`ssl`, 'www.', '') = '" . $db->escape('https://' . str_replace('www.', '', $_SERVER['HTTP_HOST']) . rtrim(dirname($_SERVER['PHP_SELF']), '/.\\') . '/') . "'");
} else {
    $store_query = $db->query("SELECT * FROM " . DB_PREFIX . "store WHERE REPLACE(`url`, 'www.', '') = '" . $db->escape('http://' . str_replace('www.', '', $_SERVER['HTTP_HOST']) . rtrim(dirname($_SERVER['PHP_SELF']), '/.\\') . '/') . "'");
}

if ($store_query->num_rows) {
    $config->set('config_store_id', $store_query->row['store_id']);
} else {
    $config->set('config_store_id', 0);
}

OpenCart 2.x / 3.x - 目录/控制器/startup/startup.php

// Store
        if ($this->request->server['HTTPS']) {
            $query = $this->db->query("SELECT * FROM " . DB_PREFIX . "store WHERE REPLACE(`ssl`, 'www.', '') = '" . $this->db->escape('https://' . str_replace('www.', '', $_SERVER['HTTP_HOST']) . rtrim(dirname($_SERVER['PHP_SELF']), '/.\\') . '/') . "'");
        } else {
            $query = $this->db->query("SELECT * FROM " . DB_PREFIX . "store WHERE REPLACE(`url`, 'www.', '') = '" . $this->db->escape('http://' . str_replace('www.', '', $_SERVER['HTTP_HOST']) . rtrim(dirname($_SERVER['PHP_SELF']), '/.\\') . '/') . "'");
        }

        if (isset($this->request->get['store_id'])) {
            $this->config->set('config_store_id', (int)$this->request->get['store_id']);
        } else if ($query->num_rows) {
            $this->config->set('config_store_id', $query->row['store_id']);
        } else {
            $this->config->set('config_store_id', 0);
        }

因此,您可以扩展此代码并检查浏览器的语言,并根据每种语言将 store_id 更改为您需要的语言。

下面是一个示例代码,它不是理想的,但它会给你如何自己实现它的想法。

$lang = substr($_SERVER['HTTP_ACCEPT_LANGUAGE'], 0, 2);

switch ($lang){
    case "fr":
$this->config->set('config_store_id', 1);
        break;
    case "it":
$this->config->set('config_store_id', 2);
        break;
    case "en":
$this->config->set('config_store_id', 3);
        break;   
    case "el":
$this->config->set('config_store_id', 4);
        break;        
    default:
        //else default store
$this->config->set('config_store_id', 0);
        break;
}

希望以上答案对您有所帮助。这很简单,但您需要了解 OpenCart 的工作原理。另外,只是我的建议......“不要等待现成的扩展,尝试制作你的。” ;)

干杯!

【讨论】:

  • Konstantinos,这不是我想要的,但它工作得很好并且帮助很大。我很可能会用它来代替我以前想要的东西。谢谢你。我以前虽然可能不仅可以更改商店,还可以更改子域。商店适用于不同的子域,例如 store1.example.com、store2.example.com。因此,当我在 store1 上并将其更改为归属于 store2 的语言时,是的,它也更改为 store2,但在第一个子域 (store1.example.com) 上。可能应该有一种方法可以同时将其更改为 store2.example.com。
  • 即使在某些情况下可以这样做,但如果我想在不同的域上拥有商店,例如 example1.com 和 example1.fr,这将不适用,然后我会在一个域中更改语言和商店- 我想要的是一个商店的一种语言的一个域或子域,并在管理面板中连接在一起。您的解决方案实际上可以作为商店的一种语言使用,但只能在一个域中使用。
  • 您可以根据需要更改代码。例如,如果您不希望每个商店都使用相同的代码,那么您可以过滤选定的 store_id,然后重定向或不重定向。或者你可以有一个数组并检查 language = en 和 store_id = 0 是否正常,没有重定向,但如果 language = en 和 store_id = 3 然后重定向到 store_id = 0 。
猜你喜欢
  • 1970-01-01
  • 2011-10-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-05-21
  • 2012-03-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多