Page 1 of 1

Multi-store without cpanel addon domain

Posted: Sat Dec 03, 2016 5:24 pm
by tkhki
Is it possible? My webhost don´t have addon domain possibility in cpanel. I can make subdomains but I can´t point them to same directory where my opencart is installed. I have asked my webhost help and one helper said that I could do it by .htaccess file and other said that it isn´t possible without vps package. I have tried couple htaccess guides, but didn´t work. My coding knowledge is not very good though.

So is it possible to somehow get multi-store to work or do I need to change webhost provider? I am using Opencart 2.3.0.2. Thank you for you help!

Re: Multi-store without cpanel addon domain

Posted: Sat Dec 03, 2016 6:19 pm
by artcore
I've been playing with a concept which you can read about here: http://ilithemes.com/docs/multistore-se ... subdomain/
It's a quick write-up on how to set up multi-stores without addon domain and DNS entries.
I haven't fully tested it and don't garantee any success but it's worth a shot for your case...

Re: Multi-store without cpanel addon domain

Posted: Sat Dec 03, 2016 6:28 pm
by thekrotek
If you simply want to redirect visitors from subdomain to main domain, try this rule in .htaccess file:

Code: Select all

RewriteEngine on
RewriteCond %{HTTP_HOST} ^subdomain.mysite\.com$ [OR]
RewriteCond %{HTTP_HOST} ^www\.subdomain.mysite\.com$
RewriteRule ^/?$ "http\:\/\/mysite\.com\/" [R=301,L]

Re: Multi-store without cpanel addon domain

Posted: Sat Dec 03, 2016 9:15 pm
by tkhki
artcore wrote:I've been playing with a concept which you can read about here: http://ilithemes.com/docs/multistore-se ... subdomain/
It's a quick write-up on how to set up multi-stores without addon domain and DNS entries.
I haven't fully tested it and don't garantee any success but it's worth a shot for your case...
Thx, but it gave me only result to page.

require_once('../config.php'); require_once('../index.php');

Did I do something wrong?

Re: Multi-store without cpanel addon domain

Posted: Sat Dec 03, 2016 9:19 pm
by tkhki
thekrotek wrote:If you simply want to redirect visitors from subdomain to main domain, try this rule in .htaccess file:

Code: Select all

RewriteEngine on
RewriteCond %{HTTP_HOST} ^subdomain.mysite\.com$ [OR]
RewriteCond %{HTTP_HOST} ^www\.subdomain.mysite\.com$
RewriteRule ^/?$ "http\:\/\/mysite\.com\/" [R=301,L]
Thx, this was not what I wanted. I need own store for subdomain, controlled in maindomain´s admin. Problem is that I can´t point subdomain to same folder than main domain in my cpanel.

Re: Multi-store without cpanel addon domain

Posted: Sat Dec 03, 2016 10:04 pm
by artcore
tkhki wrote: Thx, but it gave me only result to page.

require_once('../config.php'); require_once('../index.php');

Did I do something wrong?
Mmm yes it should read

Code: Select all

<?php
require_once('../config.php'); require_once('../index.php'); 
The <?php part fell off. Thx I'll fix it in the doc

Re: Multi-store without cpanel addon domain

Posted: Tue Dec 06, 2016 3:00 am
by danbrun
artcore wrote:
tkhki wrote: Thx, but it gave me only result to page.

require_once('../config.php'); require_once('../index.php');

Did I do something wrong?
Mmm yes it should read

Code: Select all

<?php
require_once('../config.php'); require_once('../index.php'); 
The <?php part fell off. Thx I'll fix it in the doc
Hi I have the same problem and tested the solution you have suggested artcore. I followed the steps from the link and it seems like a second store is created successfully but the formating isn't there at all. I suppose the links to the stylesheets, images and javascripts doesn't really work? I'm also running OpenCart 2.3.0.2 and catalog/controller/common/header.php is a bit different now so I tried a few things but nothing really happened? Maybe you could have a look on code and suggest where I should put " $server = HTTPS_SERVER; "

Code: Select all

<?php
class ControllerCommonHeader extends Controller {
	public function index() {
		// Analytics
		$this->load->model('extension/extension');

		$data['analytics'] = array();

		$analytics = $this->model_extension_extension->getExtensions('analytics');

		foreach ($analytics as $analytic) {
			if ($this->config->get($analytic['code'] . '_status')) {
				$data['analytics'][] = $this->load->controller('extension/analytics/' . $analytic['code'], $this->config->get($analytic['code'] . '_status'));
			}
		}

		if ($this->request->server['HTTPS']) {
			$server = $this->config->get('config_ssl');
		} else {
			$server = $this->config->get('config_url');
		}

		if (is_file(DIR_IMAGE . $this->config->get('config_icon'))) {
			$this->document->addLink($server . 'image/' . $this->config->get('config_icon'), 'icon');
		}

		$data['title'] = $this->document->getTitle();

		$data['base'] = $server;
		$data['description'] = $this->document->getDescription();
		$data['keywords'] = $this->document->getKeywords();
		$data['links'] = $this->document->getLinks();
		$data['styles'] = $this->document->getStyles();
		$data['scripts'] = $this->document->getScripts();
		$data['lang'] = $this->language->get('code');
		$data['direction'] = $this->language->get('direction');

		$data['name'] = $this->config->get('config_name');

		if (is_file(DIR_IMAGE . $this->config->get('config_logo'))) {
			$data['logo'] = $server . 'image/' . $this->config->get('config_logo');
		} else {
			$data['logo'] = '';
		}

		$this->load->language('common/header');

		$data['text_home'] = $this->language->get('text_home');

		// Wishlist
		if ($this->customer->isLogged()) {
			$this->load->model('account/wishlist');

			$data['text_wishlist'] = sprintf($this->language->get('text_wishlist'), $this->model_account_wishlist->getTotalWishlist());
		} else {
			$data['text_wishlist'] = sprintf($this->language->get('text_wishlist'), (isset($this->session->data['wishlist']) ? count($this->session->data['wishlist']) : 0));
		}

		$data['text_shopping_cart'] = $this->language->get('text_shopping_cart');
		$data['text_logged'] = sprintf($this->language->get('text_logged'), $this->url->link('account/account', '', true), $this->customer->getFirstName(), $this->url->link('account/logout', '', true));

		$data['text_account'] = $this->language->get('text_account');
		$data['text_register'] = $this->language->get('text_register');
		$data['text_login'] = $this->language->get('text_login');
		$data['text_order'] = $this->language->get('text_order');
		$data['text_transaction'] = $this->language->get('text_transaction');
		$data['text_download'] = $this->language->get('text_download');
		$data['text_logout'] = $this->language->get('text_logout');
		$data['text_checkout'] = $this->language->get('text_checkout');
		$data['text_category'] = $this->language->get('text_category');
		$data['text_all'] = $this->language->get('text_all');

		$data['home'] = $this->url->link('common/home');
		$data['wishlist'] = $this->url->link('account/wishlist', '', true);
		$data['logged'] = $this->customer->isLogged();
		$data['account'] = $this->url->link('account/account', '', true);
		$data['register'] = $this->url->link('account/register', '', true);
		$data['login'] = $this->url->link('account/login', '', true);
		$data['order'] = $this->url->link('account/order', '', true);
		$data['transaction'] = $this->url->link('account/transaction', '', true);
		$data['download'] = $this->url->link('account/download', '', true);
		$data['logout'] = $this->url->link('account/logout', '', true);
		$data['shopping_cart'] = $this->url->link('checkout/cart');
		$data['checkout'] = $this->url->link('checkout/checkout', '', true);
		$data['contact'] = $this->url->link('information/contact');
		$data['telephone'] = $this->config->get('config_telephone');

		// Menu
		$this->load->model('catalog/category');

		$this->load->model('catalog/product');

		$data['categories'] = array();

		$categories = $this->model_catalog_category->getCategories(0);

		foreach ($categories as $category) {
			if ($category['top']) {
				// Level 2
				$children_data = array();

				$children = $this->model_catalog_category->getCategories($category['category_id']);

				foreach ($children as $child) {
					$filter_data = array(
						'filter_category_id'  => $child['category_id'],
						'filter_sub_category' => true
					);

					$children_data[] = array(
						'name'  => $child['name'] . ($this->config->get('config_product_count') ? ' (' . $this->model_catalog_product->getTotalProducts($filter_data) . ')' : ''),
						'href'  => $this->url->link('product/category', 'path=' . $category['category_id'] . '_' . $child['category_id'])
					);
				}

				// Level 1
				$data['categories'][] = array(
					'name'     => $category['name'],
					'children' => $children_data,
					'column'   => $category['column'] ? $category['column'] : 1,
					'href'     => $this->url->link('product/category', 'path=' . $category['category_id'])
				);
			}
		}

		$data['language'] = $this->load->controller('common/language');
		$data['currency'] = $this->load->controller('common/currency');
		$data['search'] = $this->load->controller('common/search');
		$data['cart'] = $this->load->controller('common/cart');

		// For page specific css
		if (isset($this->request->get['route'])) {
			if (isset($this->request->get['product_id'])) {
				$class = '-' . $this->request->get['product_id'];
			} elseif (isset($this->request->get['path'])) {
				$class = '-' . $this->request->get['path'];
			} elseif (isset($this->request->get['manufacturer_id'])) {
				$class = '-' . $this->request->get['manufacturer_id'];
			} elseif (isset($this->request->get['information_id'])) {
				$class = '-' . $this->request->get['information_id'];
			} else {
				$class = '';
			}

			$data['class'] = str_replace('/', '-', $this->request->get['route']) . $class;
		} else {
			$data['class'] = 'common-home';
		}

		return $this->load->view('common/header', $data);
	}
}

UPDATE:
When I analyzed the html code (by right clicking on the web page and choose "View page source") I could see that the css, javascript and the images were referring to wrong paths. Since I've created a new subfolder the base href in the html header will be http://domain.com/subfolder/ and paths are relative this one. Since there are no folders at all in the subdomain folder, no scrips will be found because they are located one level up, see code:

Code: Select all

<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<title>Release</title>
<base href="http://domain.com/subfolder/" />
<script src="catalog/view/javascript/jquery/jquery-2.1.1.min.js" type="text/javascript"></script>
<link href="catalog/view/javascript/bootstrap/css/bootstrap.min.css" rel="stylesheet" media="screen" />
<script src="catalog/view/javascript/bootstrap/js/bootstrap.min.js" type="text/javascript"></script>
<link href="catalog/view/javascript/font-awesome/css/font-awesome.min.css" rel="stylesheet" type="text/css" />
<link href="//fonts.googleapis.com/css?family=Open+Sans:400,400i,300,700" rel="stylesheet" type="text/css" />
<link href="catalog/view/theme/default/stylesheet/stylesheet.css" rel="stylesheet">
<link href="catalog/view/javascript/jquery/owl-carousel/owl.carousel.css" type="text/css" rel="stylesheet" media="screen" />
<script src="catalog/view/javascript/common.js" type="text/javascript"></script>
<script src="catalog/view/javascript/jquery/owl-carousel/owl.carousel.min.js" type="text/javascript"></script>
</head>


If I add "../" to all paths the css and javascrips will start to work again:

Code: Select all

<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<title>Release</title>
<base href="http://domain.com/subfolder/" />
<script src="../catalog/view/javascript/jquery/jquery-2.1.1.min.js" type="text/javascript"></script>
<link href="../catalog/view/javascript/bootstrap/css/bootstrap.min.css" rel="stylesheet" media="screen" />
<script src="../catalog/view/javascript/bootstrap/js/bootstrap.min.js" type="text/javascript"></script>
<link href="../catalog/view/javascript/font-awesome/css/font-awesome.min.css" rel="stylesheet" type="text/css" />
<link href="//fonts.googleapis.com/css?family=Open+Sans:400,400i,300,700" rel="stylesheet" type="text/css" />
<link href="../catalog/view/theme/default/stylesheet/stylesheet.css" rel="stylesheet">
<link href="../catalog/view/javascript/jquery/owl-carousel/owl.carousel.css" type="text/css" rel="stylesheet" media="screen" />
<script src="../catalog/view/javascript/common.js" type="text/javascript"></script>
<script src="../catalog/view/javascript/jquery/owl-carousel/owl.carousel.min.js" type="text/javascript"></script>
</head>
How can I solve this problem for the new store created in the subfolder?

Re: Multi-store without cpanel addon domain

Posted: Sat Dec 10, 2016 3:00 am
by artcore
Sorry I didn't see your reply as I don't get notifications from forum posts anymore.

Change
$data['base'] = $server;
to
$data['base'] = HTTPS_SERVER;

and revert the changes you made in the header.tpl (../ and restore the $base variable too)

Please note I only tested it on 1.5X and not fully. It's a concept we're playing with here ;)