Перейти до вмісту
Пошук в
  • Детальніше...
Шукати результати, які ...
Шукати результати в ...

Recommended Posts

Здравствуйте, планируется ли сделать поддержку мультимагазинов? чтобы настройки шаблона для разных мультимагазина можно было задавать отдельно? наподобие того, как сделано в pavilion/journal2. Спасибо

Надіслати
Поділитися на інших сайтах


Здравствуйте, планируется ли сделать поддержку мультимагазинов? чтобы настройки шаблона для разных мультимагазина можно было задавать отдельно? наподобие того, как сделано в pavilion/journal2. Спасибо

Я просил реализовать данную функцию еще в версии для 1.5, тогда самостоятельно сделал, ибо спроса не было. Для 2.х пока не адаптировал, по идее там все аналогично должно быть. Если есть навыки, могу скинуть описание того, что делал в 1.5, а Вы переделаете под 2.х и поделитесь со мной ;)

Надіслати
Поділитися на інших сайтах

Итак, освежил свою память и заставил ММ2 работать с мультимагазином
 
Инструкция версии 1.0 (делаете все на свой страх и риск, но он практически исключен)
Шаг 1 - приводим в порядок /admin/config.php

$host = $_SERVER['HTTP_HOST'];

// HTTP
define('HTTP_SERVER', 'http://'.$host.'/admin/');

// HTTPS
define('HTTPS_SERVER', 'https://.$host./admin/');

Это чтобы мы могли заходить в админку с разных доменов и не было редиректа на основной домен. Аналогично можно поступить с config.php в корне сайта

 

Шаг 2 - приводим в порядок /admin/index.php

Добавляем перед //Settings

// 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']) . '/') . "'");
} else {
    $store_query = $db->query("SELECT * FROM " . DB_PREFIX . "store WHERE REPLACE(`url`, 'www.', '') = '" . $db->escape('http://' . str_replace('www.', '', $_SERVER['HTTP_HOST']) . '/') . "'");
}

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

 

Меняем //Settings

$query = $db->query("SELECT * FROM " . DB_PREFIX . "setting WHERE store_id = '0' ORDER BY store_id ASC");

на

$query = $db->query("SELECT * FROM " . DB_PREFIX . "setting WHERE store_id = '0' OR store_id = '" . (int)$config->get('config_store_id') . "' ORDER BY store_id ASC");

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

 

Шаг 3 - приводим в порядок /admin/controller/module/moneymaker2.php

Меняем

$this->model_setting_setting->editSetting('moneymaker2', $this->request->post);

на

$this->model_setting_setting->editSetting('moneymaker2', $this->request->post, (int)$this->config->get('config_store_id'));

А это чтобы наши настройки сохранялись в нужном магазине.

 

Вот, вроде бы и все. Проверяйте, копался час, играясь параметрами (и вспоминая что где делал на 1.5, мог что-то упустить). Буду признателен за фидбек.

 

Да, чтобы настройки верно сохранялись, надо авторизоваться с нужных доменов: site.ru/admin, site2.ru/admin, site3.ru/admin и т.д. Количество магазинов не ограничено.

  • +1 1
Надіслати
Поділитися на інших сайтах

Прелесть решения в том, что так можно адаптировать для работы с мультимагазином любой модуль, который хранит свои настройки в БД. Просто добавив $this->model_setting_setting->editSetting('Ваш_модуль', $this->request->post, (int)$this->config->get('config_store_id'));

 

Прошу гуру оценить решение, попинать за то, что сломал логику ОС и прочие упреки в мою сторону, хочется поучиться у лучших ;)

  • +1 1
Надіслати
Поділитися на інших сайтах

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

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

 

Здравствуйте, планируется ли сделать поддержку мультимагазинов? чтобы настройки шаблона для разных мультимагазина можно было задавать отдельно? наподобие того, как сделано в pavilion/journal2. Спасибо

Планируется, как раз с 1nSane обсуждали реализацию

 

 

Прелесть решения в том, что так можно адаптировать для работы с мультимагазином любой модуль, который хранит свои настройки в БД. Просто добавив $this->model_setting_setting->editSetting('Ваш_модуль', $this->request->post, (int)$this->config->get('config_store_id'));

 

Прошу гуру оценить решение, попинать за то, что сломал логику ОС и прочие упреки в мою сторону, хочется поучиться у лучших ;)

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

Надіслати
Поділитися на інших сайтах

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

В свое время именно так получилось сделать, а больше мне не требовалось. Тем более что так не усложняется сам модуль. Либо надо делать как в MEGA Filter Pro, в использованием GetStores(), циклов и прочей ерунды.

- надо немного поправить сам ОС (если честно, то я так и не понимаю, почему в этом плане фронт и бек отличаются)

+ любой модуль (с небольшой оговоркой) можно подружить с мультимагазином

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

Надіслати
Поділитися на інших сайтах

Может, подскажете по адаптации модуля.. а то автора не могу пока достучаться :(

Модуль выводит новинки на главную.

беру строки


<?php foreach ($products as $product) { ?>
...

<?php } ?>

из latest.tpl .

в owlcarousel.tpl (файл модуля) заменяю ими строки между

<?php foreach ($m['products'] as $product) { ?>

...

<?php } ?>

в итоге получаю кучу ошибок при выводе модуля :))

Надіслати
Поділитися на інших сайтах


А в контроллер изменения внесли? И что именно изменяли, не перепутали $result и $product_info, о чем написано в мануале?

Надіслати
Поділитися на інших сайтах

А в контроллер изменения внесли? И что именно изменяли, не перепутали $result и $product_info, о чем написано в мануале?

в контроллер ничего не вносил, я думал там уже все что нужно для таких стандартных штук как новинки, рекомендуемые и акции внесено и сразу все заработает )))))))

Надіслати
Поділитися на інших сайтах


Что бы купить товар в магазине с тач-устройства на кнопку Купить необходимо нажать 2 раза – первый раз отрывается подсказка, второй раз нажимается кнопка. Так работают все подсказки( 

Возможно ли отключить подсказку В Корзину для мобильных устройств? 

Надіслати
Поділитися на інших сайтах


 

Что бы купить товар в магазине с тач-устройства на кнопку Купить необходимо нажать 2 раза – первый раз отрывается подсказка, второй раз нажимается кнопка. Так работают все подсказки( 
Возможно ли отключить подсказку В Корзину для мобильных устройств? 

 

у меня нет такого. покупается с 1 нажатия

Надіслати
Поділитися на інших сайтах


А подсказка когда появляется? Проверял у себя с последним обновлением, и на демо.

ну как пример годится - акционный товар, подсказкой всплывает "старая цена... " ?

в этом случае нормально с 1 нажатия добавляется в корзину

Надіслати
Поділитися на інших сайтах


ну как пример годится - акционный товар, подсказкой всплывает "старая цена... " ?

в этом случае нормально с 1 нажатия добавляется в корзину

Написал свой адрес в личку, проверьте как у Вас.

Надіслати
Поділитися на інших сайтах


Никто данным модулем не заинтересовался? https://opencartforum.com/topic/61218-%D0%BA%D0%BE%D0%BB%D0%BB%D0%B5%D0%BA%D1%86%D0%B8%D0%B8-%D1%81%D0%B5%D1%80%D0%B8%D0%B8-%D0%BB%D0%B8%D0%BD%D0%B5%D0%B9%D0%BA%D0%B8-%D0%B1%D1%80%D0%B5%D0%BD%D0%B4%D0%BE%D0%B2-3-%D0%B2%D0%B8%D0%B4%D0%B0-%D0%BC%D0%B5%D0%BD%D1%8E/
Автор обещал запилить его под ММ2, если кроме меня еще люди будут...

Надіслати
Поділитися на інших сайтах

Для примера возьмем магазин Ulmart, у нас есть его пункт самовывоза. По-умолчанию у меня выбирается мой город, я смотрю товар и заказываю его туда. Но на прошлой неделе, к примеру, друг попросил заказать там велосипед для ребенка, оранжевого цвета. Доступен для заказа был только зеленый. Но сверху же есть выбор города, я ставлю Москву (ибо еду туда на след. день) и вижу, что в 7 магазинах они есть в наличии. Заказываю там с самовывозом и на след. день забираю.

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

 

В моем случае для ближайших ко мне городов я хочу выводить разную информацию о доставке, к примеру. А так как определение по IP не очень точное (мой провайдер много городов в одной подсети держит, то определяет город совсем не точно), тогда и покупатель не увидит вовремя информацию, которая его касается. А так, поправив сразу город он получит правильный месседж!

Помойму Ulmart работает на Битриксе - там свои фишки с геоИП

Надіслати
Поділитися на інших сайтах


в контроллер ничего не вносил, я думал там уже все что нужно для таких стандартных штук как новинки, рекомендуемые и акции внесено и сразу все заработает )))))))

Так в инструкции я же кучу всего написал об изменениях

 

Что бы купить товар в магазине с тач-устройства на кнопку Купить необходимо нажать 2 раза – первый раз отрывается подсказка, второй раз нажимается кнопка. Так работают все подсказки( 

Возможно ли отключить подсказку В Корзину для мобильных устройств?

Раньше такого не было, проверю что могло измениться в обновлении

Надіслати
Поділитися на інших сайтах

Помойму Ulmart работает на Битриксе - там свои фишки с геоИП

Там не Битрикс ;) но дело не в движке Юлмарта, а в возможностях использования ГеоИП.

Надіслати
Поділитися на інших сайтах

1nSane

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

Это что за бред такой? причем тут форма? причем тут регистрация? Читайте ВНИМАТЕЛЬНО. Я всегда выбираю город на сайтах, где это возможно, ибо так я сразу вижу, какой магазин повезет в мой город товар, а кто скажет - ПНХ, дуй в Москву. И также с остальной информацией. Нафига мне смотреть то, что не доступно?

Надіслати
Поділитися на інших сайтах

Ага. Магазин  с доставкой только по Москве, прикручивает форму с вопросом с какого же города покупатель  :-D  - А потом, та не, не повезем, приезжай) 

Или речь идет о торговой площадке, со сборищем продавцов? 

Надіслати
Поділитися на інших сайтах


Ага. Магазин  с доставкой только по Москве, прикручивает форму с вопросом с какого же города покупатель  :-D  - А потом, та не, не повезем, приезжай) 

Или речь идет о торговой площадке, со сборищем продавцов? 

Вы настолько недальновидны? Или так прикалываетесь?

Магазин с доставкой по Москве? ркчь о Юлмарте или моем магазине? В любом случае есть десятки служб доставки, курьерок и почта. У кого-то есть собственные ПВЗ, другие используют постаматы.

Надіслати
Поділитися на інших сайтах

А в контроллер изменения внесли? И что именно изменяли, не перепутали $result и $product_info, о чем написано в мануале?

в mmr2.part4.ocmod добавил для своего модуля (скопировал кусок кода от latest.php и прописал просто свой путь):

 <file path="catalog/controller/module/owlcarousel.php">
<operation>
<search><![CDATA[$this->load->model('catalog/product');]]></search>
<add position="after"><![CDATA[
/*mmr*/
$this->load->language('product/product');
$this->load->language('module/moneymaker2');
$data['moneymaker2_text_old_price'] = $this->language->get('text_old_price');
$data['moneymaker2_modules_quickorder_enabled'] = $this->config->get('moneymaker2_modules_quickorder_enabled');
if ($data['moneymaker2_modules_quickorder_enabled']) {
$data['moneymaker2_modules_quickorder_display_catalog'] = $this->config->get('moneymaker2_modules_quickorder_display_catalog');
$data['moneymaker2_modules_quickorder_button_title'] = $this->config->get('moneymaker2_modules_quickorder_button_title');
$data['moneymaker2_modules_quickorder_button_title'] = $data['moneymaker2_modules_quickorder_button_title'][$this->config->get('config_language_id')];
}
$data['moneymaker2_common_buy_hide'] = $this->config->get('moneymaker2_common_buy_hide');
$data['moneymaker2_common_wishlist_hide'] = $this->config->get('moneymaker2_common_wishlist_hide');
$data['moneymaker2_common_wishlist_caption'] = $this->config->get('moneymaker2_common_wishlist_caption');
$data['moneymaker2_common_compare_hide'] = $this->config->get('moneymaker2_common_compare_hide');
$data['moneymaker2_common_compare_caption'] = $this->config->get('moneymaker2_common_compare_caption');
$data['moneymaker2_common_cart_outofstock_disabled'] = $this->config->get('moneymaker2_common_cart_outofstock_disabled');
$data['moneymaker2_common_price_detached'] = $this->config->get('moneymaker2_common_price_detached');
$data['moneymaker2_stickers_mode'] = $this->config->get('moneymaker2_modules_stickers_mode');
$data['moneymaker2_stickers_size_catalog'] = $this->config->get('moneymaker2_modules_stickers_size_catalog');
/*mmr*/
]]></add>
</operation>
<operation>
<search><![CDATA[$data['products'][] = array(]]></search>
<add position="replace"><![CDATA[
/*mmr*/
$moneymaker2_stickers = array();
if ($special) {
if ($this->config->get('moneymaker2_modules_stickers_specials_enabled')) {
$moneymaker2_modules_stickers_specials_caption = $this->config->get('moneymaker2_modules_stickers_specials_caption');
$moneymaker2_modules_stickers_specials_discount = $this->config->get('moneymaker2_modules_stickers_specials_discount') ? ($this->config->get('moneymaker2_modules_stickers_specials_discount_mode') ? "-".round(100-(($product_info['special']/$product_info['price'])*100))."%" : "-".$this->currency->format((($product_info['special'])-($product_info['price']))*(-1))) : '';
$moneymaker2_stickers[] = array(
'type' => 'special',
'icon' => $this->config->get('moneymaker2_modules_stickers_specials_icon'),
'caption' => $this->config->get('moneymaker2_modules_stickers_specials_discount') ? "<b>".$moneymaker2_modules_stickers_specials_discount."</b> ".$moneymaker2_modules_stickers_specials_caption[$this->config->get('config_language_id')] : $moneymaker2_modules_stickers_specials_caption[$this->config->get('config_language_id')],
);
}
}
if ($product_info['viewed']) {
if ($this->config->get('moneymaker2_modules_stickers_popular_enabled')) {
if ($product_info['viewed']>=$this->config->get('moneymaker2_modules_stickers_popular_limit')) {
$moneymaker2_modules_stickers_popular_caption = $this->config->get('moneymaker2_modules_stickers_popular_caption');
$moneymaker2_stickers[] = array(
'type' => 'popular',
'icon' => $this->config->get('moneymaker2_modules_stickers_popular_icon'),
'caption' => $moneymaker2_modules_stickers_popular_caption[$this->config->get('config_language_id')],
);
}
}
}
if ($product_info['rating']) {
if ($this->config->get('moneymaker2_modules_stickers_rated_enabled')) {
if ($product_info['rating']>=$this->config->get('moneymaker2_modules_stickers_rated_limit')) {
$moneymaker2_modules_stickers_rated_caption = $this->config->get('moneymaker2_modules_stickers_rated_caption');
$moneymaker2_stickers[] = array(
'type' => 'rated',
'icon' => $this->config->get('moneymaker2_modules_stickers_rated_icon'),
'caption' => $moneymaker2_modules_stickers_rated_caption[$this->config->get('config_language_id')],
);
}
}
}
if ($product_info['date_available']) {
if ($this->config->get('moneymaker2_modules_stickers_new_enabled')) {
if ((round((strtotime(date("Y-m-d"))-strtotime($product_info['date_available']))/86400))<=$this->config->get('moneymaker2_modules_stickers_new_limit')) {
$moneymaker2_modules_stickers_new_caption = $this->config->get('moneymaker2_modules_stickers_new_caption');
$moneymaker2_stickers[] = array(
'type' => 'new',
'icon' => $this->config->get('moneymaker2_modules_stickers_new_icon'),
'caption' => $moneymaker2_modules_stickers_new_caption[$this->config->get('config_language_id')],
);
}
}
}
if (isset($product_info[$this->config->get('moneymaker2_modules_stickers_custom1_field')])&&$product_info[$this->config->get('moneymaker2_modules_stickers_custom1_field')]) {
if ($this->config->get('moneymaker2_modules_stickers_custom1_enabled')) {
$moneymaker2_modules_stickers_custom1_caption = $this->config->get('moneymaker2_modules_stickers_custom1_caption');
$moneymaker2_stickers[] = array(
'type' => 'custom1',
'icon' => $this->config->get('moneymaker2_modules_stickers_custom1_icon'),
'caption' => $moneymaker2_modules_stickers_custom1_caption[$this->config->get('config_language_id')],
);
}
}
if (isset($product_info[$this->config->get('moneymaker2_modules_stickers_custom2_field')])&&$product_info[$this->config->get('moneymaker2_modules_stickers_custom2_field')]) {
if ($this->config->get('moneymaker2_modules_stickers_custom2_enabled')) {
$moneymaker2_modules_stickers_custom2_caption = $this->config->get('moneymaker2_modules_stickers_custom2_caption');
$moneymaker2_stickers[] = array(
'type' => 'custom2',
'icon' => $this->config->get('moneymaker2_modules_stickers_custom2_icon'),
'caption' => $moneymaker2_modules_stickers_custom2_caption[$this->config->get('config_language_id')],
);
}
}

if ($product_info['quantity'] <= 0) { $moneymaker2_stock = "<span class='stock'><span>" . $product_info['stock_status'] . "</span></span>"; } else { $moneymaker2_stock = "<span class='stock instock'><!--" . $this->language->get('text_stock') . "--> <span>" . $this->language->get('text_instock') . "</span></span>"; }
if ($this->config->get('moneymaker2_catalog_products_code_field')&&isset($product_info[$this->config->get('moneymaker2_catalog_products_code_field')])&&$product_info[$this->config->get('moneymaker2_catalog_products_code_field')]&&$this->config->get('moneymaker2_modules_latest_code')) {$moneymaker2_code = "<span class='code'>".$this->language->get('text_model')." <span>".$product_info[$this->config->get('moneymaker2_catalog_products_code_field')]."</span></span>";} else {$moneymaker2_code = '';}
$moneymaker2_addtocart_tooltip = '';
if ($data['moneymaker2_common_cart_outofstock_disabled']&&$product_info['quantity'] <= 0) {
if (!$data['moneymaker2_common_price_detached']) { $moneymaker2_addtocart_tooltip = "<p class='text-muted'>" . $data['button_cart'] . "</p>"; }
$moneymaker2_addtocart_tooltip .= "<p>".$moneymaker2_stock."</p>";
} else if (!$data['moneymaker2_common_price_detached']) {
$moneymaker2_addtocart_tooltip .= "<p>".$data['button_cart']."</p>";
}
if ($price&&$special) { $moneymaker2_addtocart_tooltip .= "<p>".$data['moneymaker2_text_old_price']." ".$price."</p>"; }
$moneymaker2_addtocart_class = 'btn ';
if ($data['moneymaker2_common_cart_outofstock_disabled']&&$product_info['quantity'] <= 0) {
$moneymaker2_addtocart_class .= 'disabled ';
}
if (!$special) {
$moneymaker2_addtocart_class .= 'btn-primary';
} else {
$moneymaker2_addtocart_class .= 'btn-danger';
}
if ($data['moneymaker2_modules_quickorder_enabled']) {
$moneymaker2_quickorder_tooltip = '';
if ($data['moneymaker2_common_cart_outofstock_disabled']&&$product_info['quantity'] <= 0) {
$moneymaker2_quickorder_tooltip .= "<p class='text-muted'>" . $data['moneymaker2_modules_quickorder_button_title'] . "</p>";
$moneymaker2_quickorder_tooltip .= "<p>" . $moneymaker2_stock . "</p>";
} else {
$moneymaker2_quickorder_tooltip .= "<p>" . $data['moneymaker2_modules_quickorder_button_title'] . "</p>";
}
$moneymaker2_quickorder_class = 'btn btn-default';
if ($data['moneymaker2_common_cart_outofstock_disabled']&&$product_info['quantity'] <= 0) {
$moneymaker2_quickorder_class .= ' disabled';
}
}
$data['products'][] = array(
'stickers' => $moneymaker2_stickers,
'stock' => $this->config->get('moneymaker2_modules_latest_stock') ? $moneymaker2_stock : '',
'code' => $this->config->get('moneymaker2_modules_latest_code') ? $moneymaker2_code : '',
'sold' => $data['moneymaker2_common_cart_outofstock_disabled']&&$product_info['quantity'] <= 0 ? true : false,
'quantity' => $product_info['quantity'],
'sort_order' => $product_info['sort_order'],
'review_count' => $product_info['reviews'],
'addtocart_tooltip' => $moneymaker2_addtocart_tooltip,
'addtocart_class' => $moneymaker2_addtocart_class,
'quickorder_tooltip' => $data['moneymaker2_modules_quickorder_enabled'] ? $moneymaker2_quickorder_tooltip : '',
'quickorder_class' => $data['moneymaker2_modules_quickorder_enabled'] ? $moneymaker2_quickorder_class : '',
/*mmr*/
]]></add>
</operation>
<operation>
<search><![CDATA['description' => utf8_substr(strip_tags(html_entity_decode($product_info['description'], ENT_QUOTES, 'UTF-8')), 0, $this->config->get('config_product_description_length')) . '..',]]></search>
<add position="replace"><![CDATA['description' => $this->config->get('moneymaker2_catalog_products_grid_description') ? utf8_substr(strip_tags(html_entity_decode($product_info['description'], ENT_QUOTES, 'UTF-8')), 0, $this->config->get('config_product_description_length')) . '..' : '',]]></add>
</operation>
</file>

т.к. в файле owlcarousel.php у меня везде $product_info, я в mmr2.part4.ocmod заменил все $result на $product_info. 

 

Далее в файле catalog/view/theme/moneymaker2/template/module/owlcarousel.tpl удалил код между:

<?php foreach ($m['products'] as $product) { ?>
и
<?php } ?> 

и вставил туда соответственно код взятый из 

catalog/view/theme/moneymaker2/template/module/latest.tpl (в этом действии я не уверен, правильно ли сделал?)

в итоге пока ничего не вышло.

Змінено користувачем mkasisd
Надіслати
Поділитися на інших сайтах


Створіть аккаунт або увійдіть для коментування

Ви повинні бути користувачем, щоб залишити коментар

Створити обліковий запис

Зареєструйтеся для отримання облікового запису. Це просто!

Зареєструвати аккаунт

Вхід

Уже зареєстровані? Увійдіть тут.

Вхід зараз
×
×
  • Створити...

Important Information

На нашому сайті використовуються файли cookie і відбувається обробка деяких персональних даних користувачів, щоб поліпшити користувальницький інтерфейс. Щоб дізнатися для чого і які персональні дані ми обробляємо перейдіть за посиланням . Якщо Ви натиснете «Я даю згоду», це означає, що Ви розумієте і приймаєте всі умови, зазначені в цьому Повідомленні про конфіденційність.