0

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

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

4

1 回答 1

2

如果您打开文件: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 的工作原理。另外,只是我的建议......“不要等待现成的扩展,尝试制作你的。” ;)

干杯!

于 2017-08-23T15:47:32.450 回答