Jump to content

Recommended Posts

1 хвилину назад, Inside033 сказав:

Нагрузка на базу высокая будет ?

У вас в таблицах связей товаров, категорий и производителей с магазинами будет 2 миллиона записей (100 тысяч товаров * 20 магазинов) и запросы с участием этой таблицы будут кешироваться только для отдельного поддомена (то есть, например, при запросе товаров с поддомена 1, а затем с поддомена 2, для второго запроса не будет использоваться кеш созданный при первом запросе).

 

8 хвилин назад, Inside033 сказав:

Или же лучше, как можно убрать в запросах выборку к магазину?

Если товары, категории и производители будут общими для всех поддоменов, то правильное решение - это почистить запросы в моделях от выборки по магазину и поубирать магазины из ключей кеша.

При таком варианте все уже добавленные и все добавленные в будущем товары, категории и производители автоматически станут доступны на всех поддоменах, а увеличение нагрузки будет нулевое (даже чуть снизится за счёт отсутствия необходимости выборки по магазину).

 

Но есть нюанс: если какой-либо модуль использует собственные модели вместо стандартных, на него это не подействует. Если у такого модуля модель не закублена, её придётся чистить отдельно, а если закублена - выкинуть модуль.

Share this post


Link to post
Share on other sites

@Dotrox Lightning делает это автоматически, если видит, что все товары прописаны во всех мультимагазинах.

Share this post


Link to post
Share on other sites
6 хвилин назад, MaxD сказав:

Lightning делает это автоматически

Учитывая, что нужны правки кода в моделях, единственным адекватным вариантом делать это автоматически я вижу: добавить модификаторами в моделях условия для исключения выборки по магазинам и магазинов в ключах кеширования, проанализировать базу на наличие привязки всех товаров/категорий/производителей ко всем магазинам и, если она обнаружится, записать в базу метку для ранее добавленного условия, чтоб оно начало срабатывать.

 

Но остаётся одна маленькая проблема:

 

10 хвилин назад, MaxD сказав:

если видит, что все товары прописаны во всех мультимагазинах

 

То есть, в любом случае сначала нужно сделать привязку ко всем магазинам, чтоб затем модуль сделал отвязку. Получается, что модуль не решает изначальную задачу, а только оптимизирует результат.

 

Было бы логично просто добавить опцию в настройки модуля, чтоб можно было принудительно убрать привязку к магазинам безо всяких условий и анализа.

Ну, и это таки должно работать минимум для категорий и производителей помимо товаров. Для инфостраниц тоже не помешает.

Share this post


Link to post
Share on other sites

Спасибо за подробное объяснение! Можно по данной проблеме мне в личку со стоимостью решения?)

Share this post


Link to post
Share on other sites

@Dotrox Ну, тут дело вкуса. Лучше, чтобы магазин мог работать при необходимости и с отключеными ускорителями, а не пропадали товары в мультимагазинах.

 

Если руками, то править модели глупо. Лучше добавить в db.php:

$new = $sql;
change($new, "AND p2s.store_id = '*'");
change($new, "AND p2s.store_id = * ");
if (!stripos($new, "p2s.store_id")) {
	change($new, " LEFT JOIN " . DB_PREFIX . "product_to_store p2s ON (*)");
	change($new, " LEFT JOIN `" . DB_PREFIX . "product_to_store` p2s ON (*)");
	$sql = $new;
}


function change(&$source, $search, $replace = '') {
    if (!strpos($search, '*')) {
        $source = str_ireplace($search, $replace, $source);
        return;
    }
    $tokens = explode('*', $search);
    if (false === $start = stripos($source, $tokens[0])) return;
    if (false === $end = stripos($source, $tokens[1], $start + strlen($tokens[0]))) return;
    $source = substr($source, 0, $start) . $replace . substr($source, $end + strlen($tokens[1]));
}

Категории/производители особо не делают погоды по производительности по сравнению с товарами.

Share this post


Link to post
Share on other sites
1 час назад, MaxD сказал:

Лучше добавить

и кто- добавил пробельчик...

Share this post


Link to post
Share on other sites
4 години назад, MaxD сказав:

Если руками, то править модели глупо. Лучше добавить в db.php

Править запросы на лету - это плохая идея!

И, как намекает выше Чукча, этот код может отвалиться всего лишь из-за появления лишнего пробела (который запросто может впихнуть какой-нибудь модификатор).

 

Кроме того этот код не решает проблему с кешем: магазины используются в ключах кеширования в моделях, если их оттуда не убрать, кеш будет отдельный для каждого магазина. В случае файлового кеша (а не, например, мемкешед) это помимо общей для любого варианта проблемы с его недостаточной эффективностью добавит ещё и вероятность очень приличных тормозов из-за избытка файлов в кеше, количество которых увеличится пропорционально количеству магазинов.

 

 

4 години назад, MaxD сказав:

Категории/производители особо не делают погоды по производительности по сравнению с товарами.

Речь же не только о производительности, но и о необходимости каждый раз при добавлении новой категории/производителя вручную проставлять галочки для всех магазинов. Что будет особенно весёлым занятием учитывая, что там нет возможности проставить одним кликом сразу для всех, например, как в привязке товаров к категориям. И ещё более весёлым занятием будет привязка таким образом всех уже имеющихся на момент создания мультимагазина категорий/производителей.

Share this post


Link to post
Share on other sites
В 21.12.2012 в 21:15, shoma сказал:

Инструкция по созданию стандартных мультимагазинов на основе базовой настройки Опен карта

1. Устанавливаем движек магазина

2. Заходим в настройки - жмешь добавить - заполняем форму. тут обязательно нужно указать URL магазина (Можно использовать любой домен) либо поддомен заранее созданный на хостинге. Также заполняем все неоходимые поля.

3. Идем в админку хостинга либо личный кабинет настроки домена и указываем путь поддомена или домена для мультимагазина на папку основного магазина! Никакие папки создовать по новому не нужно и тем более копировать или создовать новые копии файлов движка.

4. идем по адресу мультимагазина и радуемся :)

Паша специально для вас еще раз расписал, хотя на первых страницах об этом уже расписано! Ко мне с подобным вопросами стучатся очень часто и каждому помогать я не могу! тем более если вопрос уже неоднократно решался.

Добрый день.
добавил поддомен, указал путь на папку основного магазина
добавил магазин, прописал урл и ссл
кеш почистил, в итоге редиректит (301) с поддомена на основной домен, подскажите, куда смотреть?
 

Share this post


Link to post
Share on other sites
11 година назад, NGrey сказав:

в итоге редиректит (301) с поддомена на основной домен, подскажите, куда смотреть?

Смотреть в .htaccess. У вас там, вероятно, в редиректах основной домен захардкоден.

Share this post


Link to post
Share on other sites

 

18 минут назад, Dotrox сказал:

Смотреть в .htaccess. У вас там, вероятно, в редиректах основной домен захардкоден.

напишите, пожалуйста, что тут поправить? в этом вообще ничего не понимаю  https://prnt.sc/sknwie

Share this post


Link to post
Share on other sites
32 хвилини назад, NGrey сказав:

напишите, пожалуйста, что тут поправить? в этом вообще ничего не понимаю  https://prnt.sc/sknwie

Во-первых, выложите это текстом, а не скрином.

А во-вторых, кто-то у вас там уже ковырялся, кто тоже не сильно много понимает.

Share this post


Link to post
Share on other sites

@Dotrox Вы как-то с очень уверенным видом вещаете много сомнительных вещей.

 

В 20.05.2020 в 01:52, Dotrox сказал:

Править запросы на лету - это плохая идея!

Чем конкретно?

 

В 20.05.2020 в 01:52, Dotrox сказал:

этот код может отвалиться всего лишь из-за появления лишнего пробела

Я вот не знаю ни одного модификатора, который будет править код стандартных запросов в части мультимагазинов. А тем более оставлять эту часть в оригинальном виде, но вставлять туда пробелы. А вы?

 

В 20.05.2020 в 01:52, Dotrox сказал:

Кроме того этот код не решает проблему с кешем: магазины используются в ключах кеширования в моделях, если их оттуда не убрать, кеш будет отдельный для каждого магазина.

Никто не кеширует выборки товаров. Это не имеет смысла, так как их придется скидывать при любом изменении товара.

 

В 20.05.2020 в 01:52, Dotrox сказал:

В случае файлового кеша (а не, например, мемкешед) это помимо общей для любого варианта проблемы с его недостаточной эффективностью

Файловый кеш не проигрывает memcache в скорости, и в большинстве сценариев даже выигрывает. Да и вообще, в Opencart скорость кеша никогда не была узким местом.

Возможно, могут быть проблемы, если в каталоге будет десятки тысяч файлов - но я таких вариантов не видел. А вы?

 

В 20.05.2020 в 01:52, Dotrox сказал:

Речь же не только о производительности, но и о необходимости каждый раз проставлять галочки для всех магазинов. ... привязка таким образом всех уже имеющихся на момент создания мультимагазина категорий/производителей.

Можно одной маленькой правкой сделать, что в окне создания категории и производителя галочки будут стоять по умолчанию. А привязать все категории или производителей ко всем мультимагазинам можно одним запросом к базе.

 

Но конечно, ручная правка всех моделей в десятках мест и сторонних модулей, которая делает все кастомным и необновляемым - идеальное решение. И главное - создает много важной работы, за которую в результате платит клиент.

Share this post


Link to post
Share on other sites
1 час назад, MaxD сказал:

ли в каталоге будет десятки тысяч файлов - но я таких вариантов не видел. А вы?

Видел
 

 

1 час назад, MaxD сказал:

Чем конкретно?

Лишней обвзякой, го таки да, настолько мизерной..
 

 

1 час назад, MaxD сказал:

Никто не кеширует выборки товаров.

Эх  еще как...

 

1 час назад, MaxD сказал:

Файловый кеш не проигрывает memcache в скорости,

ну-ну.

Share this post


Link to post
Share on other sites
9 часов назад, Dotrox сказал:

Во-первых, выложите это текстом, а не скрином.

А во-вторых, кто-то у вас там уже ковырялся, кто тоже не сильно много понимает.

.htaccess

Share this post


Link to post
Share on other sites
В 21.05.2020 в 01:04, Dotrox сказал:

Во-первых, выложите это текстом, а не скрином.

А во-вторых, кто-то у вас там уже ковырялся, кто тоже не сильно много понимает.

# 1.To use URL Alias you need to be running apache with mod_rewrite enabled.

# 2. In your opencart directory rename htaccess.txt to .htaccess.

# For any support issues please visit: https://www.opencart.com

Options +SymLinksIfOwnerMatch

# Prevent Directoy listing
Options -Indexes

# Prevent Direct Access to files
<FilesMatch "(?i)((\.tpl|.twig|\.ini|\.log|(?<!robots)\.txt))">
 Require all denied
## For apache 2.2 and older, replace "Require all denied" with these two lines:
# Order deny,allow
# Deny from all
</FilesMatch>

# SEO URL Settings
RewriteEngine On

RewriteCond %{HTTPS} off [OR]
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteRule ^(.*) https://www.horis.by%{REQUEST_URI} [R=301,L,NE]
# If your opencart installation does not run on the main web folder make sure you folder it does run in ie. / becomes /shop/
RewriteBase /
RewriteRule ^sitemap.xml$ index.php?route=extension/feed/google_sitemap [L]
RewriteRule ^googlebase.xml$ index.php?route=extension/feed/google_base [L]
RewriteRule ^system/storage/(.*) index.php?route=error/not_found [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !.*\.(ico|gif|jpg|jpeg|png|js|css)
RewriteRule ^([^?]*) index.php?_route_=$1 [L,QSA]
RewriteCond %{QUERY_STRING} ^route=common/home$
RewriteRule ^index\.php$ https://horis.by/? [R=301,L]

### Additional Settings that may need to be enabled for some servers
### Uncomment the commands by removing the # sign in front of it.
### If you get an "Internal Server Error 500" after enabling any of the following settings, restore the # as this means your host doesn't allow that.

# 1. If your cart only allows you to add one item at a time, it is possible register_globals is on. This may work to disable it:
# php_flag register_globals off

# 2. If your cart has magic quotes enabled, This may work to disable it:
# php_flag magic_quotes_gpc Off

# 3. Set max upload file size. Most hosts will limit this and not allow it to be overridden but you can try
# php_value upload_max_filesize 999M

# 4. set max post size. uncomment this line if you have a lot of product options or are getting errors where forms are not saving all fields
# php_value post_max_size 999M

# 5. set max time script can take. uncomment this line if you have a lot of product options or are getting errors where forms are not saving all fields
# php_value max_execution_time 200

# 6. set max time for input to be recieved. Uncomment this line if you have a lot of product options or are getting errors where forms are not saving all fields
# php_value max_input_time 200

# 7. disable open_basedir limitations
# php_admin_value open_basedir none
 

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
You are posting as a guest. If you have an account, please sign in.
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.


  • Recently Browsing   0 members

    No registered users viewing this page.

×

Important Information

On our site, cookies are used and personal data is processed to improve the user interface. To find out what and what personal data we are processing, please go to the link. If you click "I agree," it means that you understand and accept all the conditions specified in this Privacy Notice.