В интернете наткнулся на следующий модуль
http://beagler.ru/joomshopping/plagin-n … pping.html
Возможно кому-то понравится эта идея, и он разработает модуль, с последующим размещением в маркетплесе readyscript

202

(4 ответов, оставленных в Вопросы по работе с системой)

Закусило Александр пишет:

У вас какая тема оформления?

На основе молодёжной

{$app->setBodyClass('comparePageBody')}
{addjs file="{$mod_js}jquery.compareshow.js" basepath="root"}
{addjs file="jquery.changeoffer.js"}
{$shop_config=ConfigLoader::byModule('shop')}
{$check_quantity=$shop_config->check_quantity}
{$app->setBodyClass('compareBody')}
{if count($comp_data.items)}
<div class="comparePage" id="compareShow" data-compare-url='{ "remove":"{$router->getUrl('catalog-front-compare', ["Act" => "remove"])}" }'>
    {* Логотип *}
    {moduleinsert name="\Main\Controller\Block\Logo" width="200" height="75"}

    <table class="compareHead">
        <tr>
            <td class="compareKey">
                <a class="button print">Распечатать</a>
            </td>
            {foreach $comp_data.items as $product}
            {$imglist=$product->getImages(false)}
            <td class="compareItem{if !$product->isAvailable()} notAvaliable{/if}" data-id="{$product.id}">
                <div class="image{if count($imglist)>1} activelist{/if}">
                    {foreach $imglist as $image}
                        <img src="{$image->getUrl(188, 258)}" {if !$image@first}class="hidden"{/if} alt=""/>
                    {/foreach}
                    {if !count($imglist)}
                        <img src="{$product->getImageStub()->getUrl(226,236)}" alt="">
                    {/if}
                </div>
                <div class="actions">
                    <span class="title">{$product.title}</span>
                        {if $product.multioffers.use}
                            {* Многомерные комплектации *}
                            <div class="multiOffers">
                                {foreach $product.multioffers.levels as $level}
                                    {if !empty($level.values)}
                                        <div class="multiofferTitle">{if $level.title}{$level.title}{else}{$level.prop_title}{/if}</div>
                                        <select name="multioffers[{$level.prop_id}]" data-prop-title="{if $level.title}{$level.title}{else}{$level.prop_title}{/if}">
                                            {foreach $level.values as $value}
                                                <option value="{$value.val_str}">{$value.val_str}</option>   
                                            {/foreach}
                                        </select>
                                    {/if}
                                {/foreach}
                            </div>
                            {if $product->isOffersUse()}
                                {foreach from=$product.offers.items key=key item=offer name=offers}
                                    <input value="{$key}" type="hidden" name="hidden_offers" class="hidden_offers" {if $smarty.foreach.offers.first}checked{/if} id="offer_{$key}" data-info='{$offer->getPropertiesJson()}' {if $check_quantity}data-num="{$offer.num}"{/if} data-change-cost='{ ".offerBarcode": "{$offer.barcode|default:$product.barcode}", ".myCost": "{$product->getCost(null, $key)}", ".lastPrice": "{$product->getOldCost($key)}"}'/>
                                {/foreach}                        
                                <input type="hidden" name="offer" value="0"/>                                            
                            {/if}                    
                        {elseif $product->isOffersUse()}
                            {* Простые комплектации *}
                            <div class="offer">
                                <select name="offer">
                                    {foreach from=$product.offers.items key=key item=offer name=offers}
                                    <option value="{$key}" {if $check_quantity}data-num="{$offer.num}"{/if} data-change-cost='{ ".myCost": "{$product->getCost(null, $key)}", ".lastPrice": "{$product->getOldCost($key)}"}'>{$offer.title}</option>
                                    {/foreach}
                                </select>
                            </div>
                        {/if}                           
                    <div class="price"><span class="myCost">{$product->getCost()}</span> {$product->getCurrency()}</div>
                    <div class="unobtainable">Нет в наличии</div>                    
                    {if $shop_config}                                
                    <a data-href="{$router->getUrl('shop-front-cartpage', ["add" => $product.id])}" data-add-text="Добавлено" class="button addToCart noShowCart">В корзину</a><br>
                    {/if}
                    <a title="Исключить из сравнения"  class="remove removeItem"><span>удалить</span></a>
                </div>
            </td>
            {/foreach}
        </tr>
    </table>
    <div class="compareLines">
        {foreach $comp_data.values as $group_id=>$values}
        <p class="group">{$comp_data.groups[$group_id].title|default:t('Общие')}</p>
        <table class="lines">
            {foreach $values as $prop_id=>$product_values}    
                    {if !$comp_data.props[$prop_id].hidden}
                    <tr>
                        <td class="compareKey"><div class="w">{$comp_data.props[$prop_id].title}{if $comp_data.props[$prop_id].unit}, {$comp_data.props[$prop_id].unit}{/if}</div></td>
                        {foreach $product_values as $product_id=>$prop}
                        <td class="compareItem" data-id="{$product_id}">
                            <div class="w">{if $prop}{$prop->textView()}{else}-{/if}</div>
                        </td>
                        {/foreach}
                    </tr>
                    {/if}
            {/foreach}            
        </table>
        {/foreach}
    </div>
</div>
{else}
<div class="noEntity">
    Добавьте товары для сравнения
</div>
{/if}

Подскажите как сделать, чтобы страница сравнения использовала основной макет?
Сейчас используется макет из файла /moduleview/catalog/compare.tpl
55opt.org/compare/
Хочется чтобы всё было обёрнуто в общий макет, как каталог или страница товара

Есть ли возможность в облаке заняться оптимизацией сайта.
Смотрим сюда
https://developers.google.com/speed/doc … ching#----

Закусило Александр пишет:

Ответ:
Всё гораздо проще чем Вы думаете:) ....

Почти идеально.
Осталась проблема с /moduleview/shop/cartpage.tpl
Функция увеличения

 incProduct = function() {
            if (!$cartBlock.hasClass(data.options.inLoadingClass)){
                var amountField = $(this).closest(data.options.amountWraper).find(data.options.amountField);
                var amountTextField = $(this).closest(data.options.amountWraper).find(data.options.amountTextField);
                amountField.val( (+amountField.val())+1 ).keyup();
                amountTextField.text( amountField.val() );

и соответственно уменьшения

decProduct = function() {
            if (!$cartBlock.hasClass(data.options.inLoadingClass)){
                var amountField = $(this).closest(data.options.amountWraper).find(data.options.amountField);
                var amountTextField = $(this).closest(data.options.amountWraper).find(data.options.amountTextField);
                
                if ((+amountField.val())>1) {
                    amountField.val( (+amountField.val())-1 ).keyup();
                    amountTextField.text( amountField.val() );
                }
            }
            return false;
        },

Будем думать

Закусило Александр пишет:

Ответ:
Всё гораздо проще чем Вы думаете:) Нужно просто у контейнера который оборачивает сведения о товаре указать атрибут data-id="id товара". И тогда все дейтсвия будут действовать в рамках этого контейнер. Ну например:

<div data-id="5">
  ....
  Ваш инпут с количеством
  ...
</div>

Здорово!!! То, что нужно

{foreach $product->fillProperty() as $data}
    {foreach $data.properties as $property}
        {if !$property.hidden && $property.id==347 && $current_user->inGroup('optoviki')}
            <div data-id="{$product.id}">
                <input class="amount-hide" type="text" name="amount" value="{$property->textView()}"> 
            </div>        
        {/if}
    {/foreach}
{/foreach}

Здравствуйте!
В продолжении решения проблемы: торговля упаковками, т.е. несколько штук.
Было придумано следующее решение в 1с создан доп.реквизит "Количество штук в упаковке "
В ReadyScript - соответственно выгружается как характеристика.
В  на странице товара удалось заставить сайт добавлять в корзину нужное количество товаров с помощью следующего кода

{foreach $product->fillProperty() as $data}
    {foreach $data.properties as $property}
        {if !$property.hidden && $property.id==347 && $current_user->inGroup('optoviki')}
            <input class="amount-hide" type="text" name="amount" value="{$property->textView()}"> 
        {/if}
    {/foreach}
{/foreach}

Где  $property.id - ИД характеристики на сайте (см. Товары->характеристики)
Формируется поле ввода, в нашем случае мы скрыли его display:none;

ВОПРОС:
Что нужно изменить в common.js
Чтобы можно было уникализировать  name для input, так как на странице, где несколько товаров данное решение работает не корректно.
Т.е. мы видим что всё будет работать если будет

    <input class="amount-hide" type="text" name="amount{$product.id}" value="{$property->textView()}"> 

Тогда соответственно код из common.js

 var amount = $('[name="'+data.options.amountFormName+'"]', context).val();

не будет работать.
Как нам прилепить {$product.id} в выше приведенный кусок кода.
Спасибо!

208

(7 ответов, оставленных в Вопросы по работе с системой)

Закусило Александр пишет:

Мы на сайте показываем ровно, то что отдаёт 1С. Вам надо обратиться к 1Снику, чтобы выгружала упаковками. Либо сделать разными товарами. И выгружать их отдельно.

Я понял, что это в 1С надо настроить, думал может быть кто-то сталкивался. Подскажут

209

(6 ответов, оставленных в Вопросы по работе с системой)

Ярослав пишет:

Попробуйте со стороны 1с сделать доработку.

Мы думали сделать через характеристики, но это как говорится "костыль"

210

(7 ответов, оставленных в Вопросы по работе с системой)

Закусило Александр пишет:

Подскажите есть у Вас информация как выгрузить на сайт товар с несколькими ед.изм?
---
Что за товар?

Игрушка №1 цена 120 руб. за 1 штуку

В 1С создана упаковка для этого товара "Коробка" - содержит в себе 10 шт. - цена за коробку 1200 руб.
Мы хотим сделать второй сайт, на котором продаваться товар будет упаковками, т.е. нужно чтобы выгрузилась ед.измерения не штука, а коробка

211

(6 ответов, оставленных в Вопросы по работе с системой)

Виктория пишет:

Как это добавить характеристики в группе товаров? И такой галочки у меня НЕТ sad Подскажите пожалуйста поподробнее.

В админке переходим в каталог товаров.
Слева жмем редактировать карандаш категорию "Все"
Там жмём добавить характеристику

212

(7 ответов, оставленных в Вопросы по работе с системой)

admin пишет:

Лицензия на продукт позволяет открыть 2 сайта в рамках мультисайтовости. Это означает, что оба сайта будут работать на одной физической копии платформы ReadyScript. Весь контент на мультисайтах будет разным - товары, новости, пункты меню, однако общими будут только пользователи.

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

В облаке - не существует мультисайтовости. Там 1 сайт = 1 облачный аккаунт. Соответственно если вы хотите открыть 2 сайта в облаке - вы это можете сделать. Они будут полностью независимы и отдельно тарифицированы.

Подскажите есть у Вас информация как выгрузить на сайт товар с несколькими ед.изм?

213

(6 ответов, оставленных в Вопросы по работе с системой)

Виктория пишет:

Подскажите, можно ли добавить дополнительные фильтры по характеристикам, кроме бренда и цены?

Можно
Для этого нужно заполнить характеристики у товаров.
После этого нужно добавить характеристики в группе товаров и поставить галочку "отображать в поиске на сайте"
Почистить КЭШ
http://55opt.org/templates/55optorg/resource/img/vse.jpg

214

(7 ответов, оставленных в Вопросы по работе с системой)

Подскажите правильно ли я понял, что купив лицензию можно использовать два разных сайта?
Конкретно интересует следущее:
Хотели бы разделить сайт на два:
Один Розничный и Мелкий опт, другой Крупный опт
Разница только в том, на первом сайте продажа поштучно на втором тот же товар, но ед.изм. в упаковках, коробках и т.д.
Возможно ли это реализовать с одной лицензией?
Возможно ли это сделать в облаке?

Закусило Александр пишет:

создайте файл в Вашей теме оформления с таким же содержимым по пути:
/templates/ВАША ТЕМА/moduleview/pricelist/pricebranch.tpl

Его можно редактировать и он меняться не будет.

Работу с шаблонами можно изучить здесь:
http://readyscript.ru/text-blog/Kak-soz … adyScript/

Понял, спасибо! То, что нужно

Закусило Александр пишет:

Укажите путь к шаблону, который нужно скопировать.

Модуль прайс-лист из маркета файл pricebanch.tpl

Подскажите, можно ли как-то скопировать шаблон для модуля.
Т.е. установил модуль "Прайс-лист"
Подправил шаблон как мне нужно было, а потом в какой-то момент смотрю, а моих исправлений нет. Видимо обновили модуль и всё потерялось что делалось, для шаблона сайта проблему решить удается через "Клонировать тему", а как для модуля?
Сайт в облаке

218

(6 ответов, оставленных в Вопросы по работе с системой)

Ярослав пишет:

Решается просто.  В моделе надо навесить обработку события на сохранение товара и на окончание импорта 1с (чтобы раскидать по спецкатегориям, например).

  function init()
    {
        $this
            
            ->bind('exchange.gate.afterimport.all')//событие после импорта 1c
            ->bind('orm.beforewrite.catalog-product');//перехватываем сохранение товара
                           
    }
       

Пример для простановки даты создания товара. Аналогично тут можно сравнить старую и новую цену и сделать еще что-либо

public static function ormBeforewriteCatalogProduct(array $params, \RS\Event\Event $event)
    {
        if ($params['flag'] == \RS\Orm\AbstractObject::INSERT_FLAG) { //Если это добавление товара
            /**
            * Получаем из параметра ORM объект
            * @var \Catalog\Model\Orm\Product
            */
             $product = $params['orm'];
             if (!isset($product->dateof)) $product->dateof=date('Y-m-d H:i:s') ;
                         
           }
    }    

Вот пример того, как раскидать товары по спецкатегориям:

 
     public static function exchangeGateAfterimportAll()

    {  
        $router = \RS\Router\Manager::obj();
       
    
         if (\Setup::$INSTALLED) {
           $config = \RS\Config\Loader::byModule('users');
            $new_days  = 20;//$config['new_days']; пусть будет 20 дней
            $dir_new=2;//id спецкатегории "новинки"
    
             ///добавляем товары в спецкатегории
               //удалим связи с новинками 
              \RS\Orm\Request::make()
                    ->delete()              
                    ->from(new \Catalog\Model\Orm\Xdir()) 
                    ->where("dir_id in (".$dir_new.")")
                    ->exec();

             $xdir_table =  \RS\Orm\Tools::getTable( new \Catalog\Model\Orm\Xdir() ); 
                      $product_table = \RS\Orm\Tools::getTable( new \Catalog\Model\Orm\Product() );
            

                      \RS\Db\Adapter::sqlExec( "INSERT IGNORE INTO {$xdir_table} (product_id, dir_id) SELECT wp.id,{$dir_new} FROM {$product_table} wp WHERE  TO_DAYS(NOW()) - TO_DAYS(wp.dateof) <= ".$new_days);
             
         
                                    
            
        }
      
    }

У нас сайт в облаке. Получается нельзя?

219

(6 ответов, оставленных в Вопросы по работе с системой)

Здравствуйте!

Подскажите как можно отфильтровать (отсортировать) по дате изменения
Т.е.
Необходимо следующее:
После обмена с 1С, товары вновь созданные, которых ещё не было и товары у которых произошли изменения (цена) необходима возможность на сайте выводить эти товары в отдельный блок. Например "Новые поступления", как это сделать?

220

(15 ответов, оставленных в Вопросы по работе с системой)

Подскажите как можно изменить формат цены, которая добавляется в title?
Объясняю:
По умолчанию в RS цена форматируется так 10 000 - когда 10 т.р.
В шаблоне удалось поколдовать и вывести так как нужно, если 2350 руб. - то 2350 , а если 4,5 руб. - то 4,50
А TITLE добавляется 2 350 соответственно при цене 2350 руб.

221

(1 ответов, оставленных в Вопросы по работе с системой)

Здравствуйте!

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

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

Можете ли Вы то сделать?
ОЧЕНЬ не удобно каждый раз удалять watermark из настроек системы, а потом снова загружать

222

(3 ответов, оставленных в Вопросы по работе с системой)

Закусило Александр пишет:

Это не характеристики. Это отдельным модулем было сделано на заказ. Там есть и специальный раздел с вводом значений и специальными страницами. Там добавляется специальное поле с выбором из раздела.

Ясно. Интересное решение. Поэтому и спросил, думал может в системе реализовано

Подскажите как в CMS настроить характеристики как "Значение по фэн-шуй" на сайте ониточки http://onitochki.ru/product/arabskie-skakuny-33575/
Или это не характеристики?

224

(3 ответов, оставленных в Вопросы по работе с системой)

Закусило Александр пишет:

Это происходит, т.к. при импорте из 1С у заголовка ещё применяется htmlspecialchars, и поэтому quot добавляется. Внесли исправление. Будет в ближайшем обновлении.

а
nastol-nyy
вместо
nastolnyy
По этой же причине?

225

(3 ответов, оставленных в Вопросы по работе с системой)

Здравствуйте!
Почему 'автоматическая генерация URL' при обмене с 1С
Например товар называется Сувенир настольный "Ангелочки" 15см
делает URL
такой suvenir-nastol-nyy-quot-angelochki-quot-15sm-52207
а если зайти в карточку товара и нажать на кнопку "Транслитерировать заново"
получается suvenir-nastolnyy-angelochki-15sm

Меня волнует вопрос не по ID в конце, а по генерации слова настольный и КАВЫЧКИ->quot
Как настроить систему, что бы URL генерировался
такой suvenir-nastolnyy-angelochki-15sm-52207