2,051

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

Евгений пишет:

еще такая штука, в 1С описания товаров забиты в html, при выгрузке товаров кодом и вставляется вот так (<p align="justify"><b>Лук севок Стригуновский местный</b> - cорт скороспелый (от всходов семян до созревания севка - 65-110 суток). Малогнездный. Луковица округлая с небольшим сбегом вверх и вниз. Окраска сухих чешуй желтая, иногда с розовым оттенком, сочных чешуй - белая.</p>) где что поменять?

Там у Вас должен быть в 1С при редактировании товара флажок "Дополнительное описание номенклатуры в формате HTML" на вкладке описание. По крайней мере в 10.3 так. Его надо включить у товаров с таким описанием как у Вас.
Ну вообще конечно описание немного не удобно на мой взгляд вести в 1С. Лучше я думаю хранить его на сайте и в настройках блока "Обмен данными с 1С" поставить флажок не обновлять поле описание. Тогда будет и визуально описание товара хорошо заполнять.

2,052

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

Евгений пишет:

Как тогда быть с доставкой, теряется смысл обмена заказами, в битриксе в заказах точно доставка фигурирует да и в других cms

Хорошо. Мы разберёмся и посмотрим их формат. И дадим ответ. Ожидайте.

2,053

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

Она и не должна. По формату обмена CommercеML её нет.

2,054

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

Без правки CSS нет. Так как там действует media query. А значит при изменении ширины будет использована инструкция CSS под своё разрешение из своего файла. Оберните в шаблоне главной каким либо CSS классом  оборачиющий всю страницу тег и поиграйтесь с CSS.

Как узнать программно главная это или нет?

{if $router->getCurrentRoute()->getId()=='main.index'}
  //Это главная
{/if}

2,055

(13 ответов, оставленных в Вопросы по созданию тем оформления)

Через Управление->Шаблоны. Точно также ищем во wrapper

2,056

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

Плохо смотрите. Вы же неправльно условие скопировали.
Вы сделали:

{if $product->getCost(null, null, false)}

А я привёл:

{if !$product->getCost(null, null, false)}

И перенесите строку которая отвечает за отображение Валюты в нужное условие

2,057

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

Виталий пишет:

Это совсем не то, выводит просто есть цена и нет цены.

Ну это же Ведь для примера.
Вот полный код, который я думаю Вас устроит:

{if !$product->getCost(null, null, false)}
   <span style="color:red;">Цена по запросу</span>
{else}
   {$product->getCost()} {$product->getCurrency()}   
{/if}

1. Простой способ. Перейдите в режим отладки на сайте в публичной части(под админом слева вверху рычажок). Наведитесь на блок, который выводит категории, появится возможность настройки. Укажите в качестве корневого элемента вашу корневую категорию. В админ панели у данной категории снимите флаг публичности. Сбросьте кэш.
2. Сложный способ. А что вам мешает, проимпортировать полностью один раз. Настроить категории как Вам надо (перетаскивая и перемещая на сайте). Затем в настройках модуля импорта и экспорта из 1С, указать, чтобы не обновлялись старые категории (новые добавятся). Тем самым можно строить иерархию как Вам угодно.

Не за что, приятно видеть человека, который активно разрабатывает на нашем продукте. Так держать. smile

2,060

(12 ответов, оставленных в Вопросы по Маркетплейсу)

Петр пишет:

А какой будет путь до фотки? Важно в плане индексации вывести фотки в топ. Нужно получить сайт фотогалерея .jpg

А какой путь к фотке Вам нужен?

2,061

(12 ответов, оставленных в Вопросы по Маркетплейсу)

Вы можете заказать разработку такого модуля галереи у нас на сайте на helpdesk.readyscript.ru или у сторонних разработчиков.

Ну и что? Повесьтесь  на событие сохранения заказа и просто поправьте этот адрес, на тот что будет выбран в качестве пункта самовывоза. Ну или поправьте его при выборе данного пункта. Или ещё лучше просто после сохранения у таких заказов удалите адрес, который создастся. Вот и всё.

Событие orm.afterwrite.shop-order

Хуки в ReadyScript

0 и заполнить поля какими-нибудь своими данными, если выбрал на этапе ввода адреса Вашу галочку с самовывозом. Иначе просто оставлять поля пустыми. Просто если пользователь новый, то у него всегда будет 0 и надо записать адрес. И пусть приходит как какой-нибудь Ваш адрес записанный для данного пользователя. Он всё равно не будет этого видеть.
Единственное, я не знаю использует ли Ваша доставка индекс города. Скорее всего да. Но это можно обойти просто отправив запрос на Ваш обработчик внутри класса доставки и там уже заказу, при выборе пункта самовывоза передать значение выбранного индекса. Ну или поставить какой-нибудь свой индекс. Или оставить поле индекса. Вообщем вариантов много.

Ну запишите в куку выбор через jquery cookie, например.
http://stackoverflow.com/questions/1458 … ith-jquery.

А на странице доставки проверьте это значение. И если нужно выбрать радиокнопку на этапе доставки, то просто вызовите событие клика. И всё.

$('селектор нужной радио кнопки').click();

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

<input type="text" name="order_extra['Любое имя, можно и по русски']" value="{$order.order_extra.address['Любое имя, можно и по русски']}"/>

<pre>
{$order.order_extra}
</pre>

Но я думаю это вам вряд ли понадобится.

Хорошо. Ждём решения. Если нужна помощь и с административной частью, то мы поможем:) Обращайтесь.

2,066

(1 ответов, оставленных в Предложения по улучшению системы)

Можно, но это нужно просто тему оформления немного переделать. У нас предпросмотр сейчас всплывает, только для многомерных комплектаций Вы можете заказать для себя платную доработку на helpdesk.readyscript.ru.

Отпишитесь если нужна помощь пожалуйста.

2,068

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

Это всё делается на хостинге. Прозвоните им они увеличат значения max_post_size, upload_max_filesize как и писалось выше. Либо если у Вас своя VPS, то это должен сделать Ваш администратор.

Всё гораздо проще чем Вы думаете. Никакого контроллера делать не нужно у нас всё для этого предусмотрено.
Вам надо отловить событие когда пользователь меняет пункт выдачи. После чего сделать запрос на фронт контроллер:

/shop/controller/front/checkout.inc.php он же в качестве маршрута shop-front-checkout (смотрите файл handlers.inc.php в модуле shop)
Соответственно url для обращения будет /checkout/useract/

Там есть метод actionUserAct. Он позволяет вызвать пользовательский метод из Вашего класса доставки или оплаты. В Вашем случае доставки.

Он принимает несколько параметров:
1. module - Имя модуля (По умолчанию Shop, у Вам соответственно Ваше название папки модуля)
2. typeObj - (0 или 1)  0 - доставка (DeliveryType), 1 - оплата (PaymentType)
3. typeId - id доставки или оплаты
4. class - Класс для обращения, т.е. класс который будет вызван.
5. userAct - Статический метод который нужно вызвать
6. params - Дополнительные параметры для передачи в метод
Описание типов переменных и, то что они принимают можно посмотреть в самом файле я думаю проблем не возникнет.

Соответственно мы можем сформировать запрос через AJAX, вот пример кода для доставки axiomus:

var $_this = $(this);
$.ajax({
                url  : $_this.data('url'),
                type : 'POST',    
                dataType : 'json',    
                data : {
                    module  : 'Axiomus',
                    typeObj : 0, //Доставка
                    typeId  : $_this.data('delivery-id'),
                    'class' : 'Axiomus',
                    userAct : 'getChangedDelivery',
                    params  : {
                        order : { //Объект заказа
                            way   : $_this.data('way'),
                            key   : $_this.data('key'),
                            value : office
                        }
                    }
                },
                success : function(response){
                   if (response.success){
                       $(data.options.axiomusCostId + $_this.data('delivery-id')).html(response.data);
                   } 
                }
            });

Мы в шаблоне добавляем там свой js который обслуживает обработку этих событий и следит за выбором пользователя.

{addjs file="%axiomus%/delivery/axiomus_widjet.js"}

Поэтому я дополнительно скину код javascript самого модуля доставки Axiomus. Он не решит Ваших всех проблем, но там можно подсмотреть реализацию.

(function( $ ){
   $.AxiomusWidjetCreator = function( method ) {
        //Найдём ближайший input c выбором
        var closestRadio = $('input[name="delivery"]:eq(0)');        
        var form         = closestRadio.closest('form'); //найдем форму
       
        var defaults = {            
           axiomusDiv      : '.axiomusDeliveryBlock', //Контейнер куда будет вставлятся информация Axiomus
           axiomusAdress   : '.axiomusAdress', //Куда вставляется адрес
           axiomusSchedule : '.axiomusSchedule', //Блок с расписанием работы
           axiomusCostId   : '#scost_' //Идентификатор блока с ценой за доставку
        },
        
        $this = form,
        data  = $this.data('axiomusInfo');
        
        if (!$this.length) return;
        if (!data) { //Инициализация
            data = { options: defaults };
            $this.data('axiomusInfo', data);
        }
        
        //public
        var methods = {
            /**
            * Инициализация плагина
            * 
            * @param initoptions - введённые пераметра для записи или перезаписи
            */
            init: function(initoptions) 
            {
                data.options = $.extend(data.options, initoptions);
                
                //Навесим все события
                presetAxiomusRadioEvents();
                
                //Если контент обновился (для заказа на одной странице)
                $('body').on('new-content',function(){
                    //Навесим события на переключатели
                    presetAxiomusRadioEvents();
                    
                    //Проверим выбор sheepla и если она выбрана, то вызовем соответсвующий метод
                    var selectedCheckbox = $('input[name="delivery"]:checked');
                    if (typeof(selectedCheckbox.data('axiomus-div-id'))!='undefined'){ 
                    //  setOrClearAxiomusInfo(null, selectedCheckbox); 
                    }
                });
            },
            
            /**
            * Открывает доступность Axiomus для выбора
            * 
            * @param checkBoxObj  - объект с функциями Axiomus
            */
            showAxiomus : function (checkBoxObj)
            {       
                var parent   = checkBoxObj.data('axiomus-div-id');
                $("select",$(parent)).prop('disabled',false).change();
            },
            
            /**
            * Убирает доступность Axiomus для выбора из всех вариантов
            * и скрывает поля
            * 
            */
            clearAxiomus : function ()
            {       
               $(data.options.axiomusDiv+" select").prop('disabled',true); 
            }
        }
        
        //private
        
        /**
        * Срабатывает при нажатии на выбранную доставку.
        * Если у этой доставки есть признак что если есть признак, что это Axiomus,
        * то ничего не делаем. Если нет признака, что подгружалось, 
        * 
        */
        var setOrClearAxiomusInfo = function (Event, item) 
        {
            if (Event === null){ //Если вызвали программно
                var $_this = item;
            }else{ //Если событие
                var $_this = $(this);
            }
            
            var dataAxiomusDiv = $_this.data('axiomus-div-id');
            if ( typeof(dataAxiomusDiv) != 'undefined' ) { //Если это радиокнопка Axiomus
               methods.showAxiomus($_this);  //Стартуем            
            }else{
               methods.clearAxiomus();  //Очищаем    
            }
        },
        
        /**
        * Устанавливает события для обработки
        */
        presetAxiomusRadioEvents = function()
        {
            //Смена адреса доставки в выпадающем списке
            $(data.options.axiomusDiv+" select",$this).off('change.axiomus').on('change.axiomus', changeAxiomusAdress);
            $(data.options.axiomusDiv+" input[type='radio']", $this).off('change.axiomusradio').on('change.axiomusradio', changeAxiomusRadio);
            
            //Пройдёмся по контейнерам СДЕК
            $(data.options.axiomusDiv,$this).each(function(i){
                 //Найдём и отметим подходящие радиокнопки, которые относятся к СДЕК  
                 var deliveryId = $(this).data('delivery-id');
                 var radio      = $('input[name="delivery"][value="'+deliveryId+'"]');
                 //Перенесём данные к выборанной радио кнопке, чтобы можно было манипулировать
                 radio.data('axiomus-div-id',"#"+$(this).attr('id'));
                 if (radio.prop('checked')){
                     $("select", $(radio.data('axiomus-div-id'))).prop('disabled',false).change();
                 }
            });

            //Получим все радио кнопки
            var radioboxes = $('input[type="radio"][name="delivery"]',$this); //найдем radio
            
            //Навесим переключение радиокнопок 
            radioboxes.each(function(){
                $(this).off('click.axiomus').on('click.axiomus', setOrClearAxiomusInfo);
            });
            $(data.options.axiomusDiv+" input[type='radio']:checked", $this).trigger('change.axiomusradio');
        },
        
        
        /**
        * Смена адреса доставки в выпадающем списке
        * 
        */
        changeAxiomusAdress = function()
        {
            var parent = $(this).closest(data.options.axiomusDiv);
            var info   = $("option:selected",$(this)).data('info');
            
            if (typeof(info.address)!='undefined'){
                $(data.options.axiomusAdress, $(parent)).html("Адрес: "+info.address); 
            }
            if (typeof(info.schedule)!='undefined'){
                $(data.options.axiomusSchedule, $(parent)).html(info.schedule);
            }
            
            var office = $(this).val();
            var $_this = $(this);
            $.ajax({
                url  : $_this.data('url'),
                type : 'POST',    
                dataType : 'json',    
                data : {
                    module  : 'Axiomus',
                    typeObj : 0,
                    typeId  : $_this.data('delivery-id'),
                    'class' : 'Axiomus',
                    userAct : 'getChangedDelivery',
                    params  : {
                        order : { //Объект заказа
                            way   : $_this.data('way'),
                            key   : $_this.data('key'),
                            value : office
                        }
                    }
                },
                success : function(response){
                   if (response.success){
                       $(data.options.axiomusCostId + $_this.data('delivery-id')).html(response.data);
                   } 
                }
            })
        },
        
        /**
        * Смена переключателя типа забора для DPD
        * 
        */
        changeAxiomusRadio = function ()
        {
            var parent = $(this).closest(data.options.axiomusDiv);
            var val    = $(this).val();
            
            if (val=="1"){
               $("select", parent).prop('disabled', false); 
            }else{
               $("select", parent).prop('disabled', true);  
            }
        } 
        
       
        if ( methods[method] ) {
            methods[ method ].apply( this, Array.prototype.slice.call( arguments, 1 ));
        } else if ( typeof method === 'object' || ! method ) {
            return methods.init.apply( this, arguments );
        }
   }     
})( jQuery );

$(document).ready(function(){
    $.AxiomusWidjetCreator();
});

Послав запрос система сделает обращение к публичному статическому метод (public static function) Вашей доставки. В который передадутся несколько параметров. Например для случая с Axiomus и методом getChangedDelivery:

\Axiomus\Model\Deliverytype\Axiomus::getChangedDelivery($order - объект заказа, $delivery_id - id доставки, $params - Ваши дополнительные параметры, которые Вы передадите)

Теперь, что касается заказа. Заказ во время его оформления находится в сессии постоянно, поэтому Вы можете в него записывать "на лету" сразу и данные сохранятся, просто присвоив нужные значения не вызывая при этом insert или update. Эти методы системе понадобятся только один раз при создании самого заказа, когда пользователь подтвердил его создание.
Мы для записи данных рекомендуем использовать метод addExtraKeyPair у объекта заказа.

$order->addExtraKeyPair('ключ по которому можно достать данные', 'Значение для записи можно массив');

А потом доставать данные с помощью:

$order->getExtraKeyPair('ключ по которому можно достать данные');

Т.к. в таком случае эти данные можно будет достать и после физической записи заказа.

У заказа также есть метод addExtraInfoLine он позволит не только записать данные в заказ, но и инфомация будет доступна для отображения в админке при редактировании товара.

2,070

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

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

2,071

(12 ответов, оставленных в Вопросы по Маркетплейсу)

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

Вы можете настроить вывод товаров в данном блоке при помощи CSS. Это файл style.css в вашей теме оформления. Только отклонируйте тему оформления, чтобы она не сбрасывалась при обновлении (Управление->Шаблоны->Справа вверху кнопка "Клонировать тему оформления"). Только не забудьте на Вашу тему оформления переключится после клонирования.

2,073

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

Нужно поправить шаблон добавив условие проверки.
Если цена 0 то выводить такую строчку. Например:

{if !$product->getCost(null, null, false)}
   Нет цены
{else}
   Есть цена
{/if}

Всё мне кажется гораздо проще. Включите флаг публичности у складов, если Вам нужен выбор при оформлении заказа. А затем поправьте шаблон отвечающий за вывод карточки товара (product.tpl) и просто уберите из него вывод складов. Я думаю этот вариант Вам должен подойти.

2,075

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

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

Уточните ошибку. Потому как там ничего не понятно.

2. У нас в выгрузке около 2500 позиций с характеристиками и сама выгрузка выполняется около 10-15 минут, на это время все цены на сайте равны "0" - так и должно быть? Просто мы делаем выгрузку в 20:00 после того как закрывается наш розничный магазин, чтобы "подбить" верные остатки.

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