• Выгрузка 1с по стандарту СommerceMl2 как это понимать?

    Maksclub
    @Maksclub Куратор тега PHP
    maksfedorov.ru
    О формате
    Тут передаются изображения или иные файлы? Какого они рода?

    • Из 1С передаются 2 файла: import.xml и offers.xml
    • а также картинки, как правило в эту же папку на сервере, куда грузятся и 2 файла с инфой

    import.xml — данные с товарами, категориями, свойствами товаров
    Пример import.xml
    <?xml version="1.0" encoding="UTF-8"?>
    <КоммерческаяИнформация ВерсияСхемы="2.03" ДатаФормирования="2018-01-23">
    	<Классификатор>
    		<Ид>2460763d-004d-11df-8b40-001a4bb12848</Ид>
    		<Наименование>Классификатор (Каталог товаров)</Наименование>
    		<ТипВыгрузки>ПолнаяВыгрузка</ТипВыгрузки>
    		<Группы>
    			<Группа>
    				<Ид>8f55ea2c-1062-11e7-bdde-00155d007103</Ид>
    				<Наименование>Joggy</Наименование>
    				<Группы>
    					<Группа>
    						<Ид>76d5e03d-12c4-11e7-bdde-00155d007103</Ид>
    						<Наименование>Рубашки</Наименование>
    					</Группа>
    					<Группа>
    						<Ид>221c4591-9f47-11e7-8d7f-00155d007103</Ид>
    						<Наименование>Толстовки</Наименование>
    					</Группа>
    					<Группа>
    						<Ид>8f55ea2d-1062-11e7-bdde-00155d007103</Ид>
    						<Наименование>Футболки</Наименование>
    					</Группа>
    				</Группы>
    			</Группа>
    
    		</Группы>
    		<Свойства>
    			<СвойствоНоменклатуры>
    				<Ид>0734a3e9-005f-11df-8b40-001a4bb12848</Ид>
    				<Наименование>Страна</Наименование>
    				<Обязательное>false</Обязательное>
    				<Множественное>false</Множественное>
    				<ИспользованиеСвойства>true</ИспользованиеСвойства>
    			</СвойствоНоменклатуры>
    		</Свойства>
    	</Классификатор>
    	<Каталог>
    		<Ид>2460763d-004d-11df-8b40-001a4bb12848</Ид>
    		<ИдКлассификатора>2460763d-004d-11df-8b40-001a4bb12848</ИдКлассификатора>
    		<Наименование>Каталог товаров</Наименование>
    		<Товары>
    			<Товар>
    				<Ид>6a9f6996-ba02-11e7-9302-00155d007103#f14f4d23-baec-11e7-a79a-00155d007103</Ид>
    				<ШтрихКод>2000000848112</ШтрихКод>
    				<Артикул>049794</Артикул>
    				<ДатаСоздания>1508889600</ДатаСоздания>
    				<Наименование>ADSERY2 Джинсы 6225 (32-42/*7) женщинам</Наименование>
    				<КоличествоВПачке>7</КоличествоВПачке>
    				<БазоваяЕдиница Код="796" НаименованиеПолное="Штука" МеждународноеСокращение="PCE">шт</БазоваяЕдиница>
    				<ХарактеристикиТовара>
    					<ХарактеристикаТовара>
    						<Наименование>Размер</Наименование>
    						<Значение>33</Значение>
    					</ХарактеристикаТовара>
    					<ХарактеристикаТовара>
    						<Наименование>Рост</Наименование>
    						<Значение>32</Значение>
    					</ХарактеристикаТовара>
    				</ХарактеристикиТовара>
    				<ЗначенияРеквизитов>
    					<ЗначениеРеквизита>
    						<Наименование>ВидНоменклатуры</Наименование>
    						<Значение>Товар</Значение>
    					</ЗначениеРеквизита>
    					<ЗначениеРеквизита>
    						<Наименование>ТипНоменклатуры</Наименование>
    						<Значение>Товар</Значение>
    					</ЗначениеРеквизита>
    					<ЗначениеРеквизита>
    						<Наименование>Полное наименование</Наименование>
    						<Значение>Джинсы 6225 (32-42/*7) женщинам</Значение>
    					</ЗначениеРеквизита>
    				</ЗначенияРеквизитов>
    				<Группы>
    					<Ид>6a9f6995-ba02-11e7-9302-00155d007103</Ид>
    				</Группы>
    				<Описание>Утепленные джинсы актуального зауженного покроя. Декор в виде легких потертостей и строчки.</Описание>
    				<ЗначенияСвойств>
    					<ЗначенияСвойства>
    						<Ид>0734a3e9-005f-11df-8b40-001a4bb12848</Ид>
    						<Значение>Китай</Значение>
    					</ЗначенияСвойства>
    					<ЗначенияСвойства>
    						<Ид>074bce28-004f-11e8-9d7b-00155d007103</Ид>
    						<Значение>ADSERY2</Значение>
    					</ЗначенияСвойства>
    				</ЗначенияСвойств>
    			</Товар>
    		</Товары>
    
    	</Каталог>


    offers.xml — предложения (размеры, цвета, варианты и прочее с ценой и остатком) для товаров из предыдущего файла
    Пример offers.xml
    <?xml version="1.0" encoding="UTF-8"?>
    <КоммерческаяИнформация ВерсияСхемы="2.03" ДатаФормирования="2018-01-23">
    	<ПакетПредложений>
    		<Ид>2460763d-004d-11df-8b40-001a4bb12848#</Ид>
    		<Наименование>Пакет предложений</Наименование>
    		<ИдКаталога>2460763d-004d-11df-8b40-001a4bb12848</ИдКаталога>
    		<ИдКлассификатора>2460763d-004d-11df-8b40-001a4bb12848</ИдКлассификатора>
    		<ТипыЦен>
    			<ТипЦены>
    				<Ид>995aa9b6-19f8-11df-bb4e-001a4bb12848</Ид>
    				<Наименование>Розничные</Наименование>
    				<Валюта>руб.</Валюта>
    				<Налог>
    					<Наименование>НДС</Наименование>
    					<УчтеноВСумме>false</УчтеноВСумме>
    				</Налог>
    			</ТипЦены>
    		</ТипыЦен>
    		<Предложения>
    			<Предложение>
    				<Ид>2b478218-df7b-11e5-baeb-00155d007103</Ид>
    				<ШтрихКод>2000000694153</ШтрихКод>
    				<Артикул>030067</Артикул>
    				<ДатаСоздания>1483228800</ДатаСоздания>
    				<Наименование>98 CM Дж. L-7061 (25-30/*6) жен.</Наименование>
    				<КоличествоВПачке>6</КоличествоВПачке>
    				<БазоваяЕдиница Код="796" НаименованиеПолное="Штука" МеждународноеСокращение="PCE">шт</БазоваяЕдиница>
    				<Цены>
    					<ХарактеристикиТовара>
    						<ХарактеристикаТовара/>
    					</ХарактеристикиТовара>
    					<Цена>
    						<Представление>2 590 руб. за шт</Представление>
    						<ИдТипаЦены>995aa9b6-19f8-11df-bb4e-001a4bb12848</ИдТипаЦены>
    						<ЦенаЗаЕдиницу>2590</ЦенаЗаЕдиницу>
    						<Валюта>руб</Валюта>
    						<Единица>шт</Единица>
    						<Коэффициент>1</Коэффициент>
    					</Цена>
    				</Цены>
    				<Количество>0</Количество>
    			</Предложение>




    Готовый код
    ситуация, что вручную обработку этого файла придется писать

    https://github.com/ArtemsWay/commerceml
    https://github.com/gillbeits/commerceml

    Я правда не пользовалмя этими решениями и работаю со штатным решением в одной из CMS — вам оно не подойдет, тк там дергаются методы ядра движка и запросы под определенную структуру БД
    Ответ написан
    Комментировать
  • Как управлять создаваемым типом объекта в методе другого класса?

    Maksclub
    @Maksclub
    maksfedorov.ru
    Паттерн Стратегия

    Делаем общий для объектов Event интерфейс (с головы придумал метод begin() ):
    interface EventInterface
    {
            public function begin();
    }


    и создаем разные events:
    class ConcreteEvent implements EventInterface
    {
            public function begin()
            {
                    // ..
            }
    }
    class OtherEvent implements EventInterface
    {
            public function begin()
            {
                    // ..
            }
    }


    В нашем MyClass создаем свойство $event и для него сеттер и используем его:
    Class MyClass
    {
            private $event;
    
            public function __construct(SomeClass $obj, AnotherClass $obj2)
            {
                    // инициализация с переданными параметрами
            }
            
            public function setEvent(EventInterface $event)
            {
                    $this->event = $event;
            }
    
            private function doSomething()
            {
                    // Работаем с нашим event
                    $someDoing = $this->event->begin();
            }
    }


    Тогда уже в конечном коде нам нужно будет работать так примерно:
    $myObj = new MyClass(SomeClass $obj, AnotherClass $obj2);
    
    // Set Event
    $myObj->setEvent(new OtherEvent);
    
    // Далее работаем с наши готовым объектом, у которого уже есть нужны Event


    ЗАРАНЕЕ ПРИНОШУ ПРОЩЕНИЯ, ЕСЛИ ОШИБСЯ — сам как 3 дня изучаю паттерны
    Возможно вам не подойдет применение далее по реализации — нужно смотреть что и как

    Почему-то думал, что такой вопрос возымеет популярность
    Ответ написан
  • Хочу написать игру на canvas. Какой движок посоветуете ( + физика)?

    @GreatRash
    Из бесплатных - Phaser без вариантов. Физика из коробки:
    • Arcade Physics - только коллизии типа AABB.
    • Ninja Physics - физика для платформеров, коллизии типа AABB, спрайты, тайлы
    • p2.js - полноценная физика а-ля box2d


    Из платных - Impact.js (физика box2d из коробки).
    Ответ написан
    2 комментария
  • Wp_mail не отправляет письма, а функция mail отправляет, в чем проблема?

    xo6a
    @xo6a
    php разработка 5+ лет
    Теоретически письма могут не уходить из-за адреса отправителя. попробуйте изменить их на валидный, который используете в mail, а еще лучше на реальный адрес с тем же доменом с которого отправляете, так как хостинг может блокировать подобные письма. Но это теория.

    как это сделать
    https://wp-kama.ru/function/wp_mail
    Ответ написан
    Комментировать
  • Wp_mail не отправляет письма, а функция mail отправляет, в чем проблема?

    azerphoenix
    @azerphoenix
    Java Software Engineer
    Часто проблема на стороне хостера.
    Попробуйте настроить smtp пересылку писем WP Mail SMTP.
    Проверьте доступность портов 25, 465, 587
    Проверьте корректность настроек ВП и плагина CF 7 (если есть).
    Проверьте работает ли ф-ция рнр майл на хостинге (вне ВП)
    Ответ написан
    Комментировать
  • Есть ли Официальные api сервисы для проверки осаго (примеры внутри)?

    dimonchik2013
    @dimonchik2013
    non progredi est regredi
    официальных нет,
    только типа такого, но тот же API ЕАИСТО несложно эмулировать
    Ответ написан
    1 комментарий
  • Как избавится от знака? , в запросе?

    sergiks
    @sergiks Куратор тега PHP
    ♬♬
    Решается настройкой веб-сервера. Это он должен при отсутствии папки или файла с запрошенным названием «переписывать» запрос и передавать в index.php уже GET-параметрами или иначе запрошенный адрес.

    У вас Nginx или Apache? Такой паттерн называется «front controller».

    Nginx:
    try_files $uri $uri/ /index.php?q=$uri&$args;
    или ещё проще, читайте запрошенную строку из переменной $_SERVER['REQUEST_URI'] и напишите просто try_files $uri $uri/ /index.php;

    Apache:
    RewriteEngine On
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^(.*)$ /index.php?$1 [QSA,L]
    Ответ написан
    1 комментарий
  • Как правильно генерировать конечную цену и строить динамические скидки?

    XXXXPro
    @XXXXPro
    Fullstack Web developer
    Во-первых, я сделал бы интерфейс iPriceCalc, и набор классов, реализующих этот интерфейс, и все расчеты вынес бы в них. (Соответственно, в классе должен быть один метод, в который передается информация о товаре и, на всякий случай, залогиненном пользователе.) Плюс на всякий случай предусмотрел бы для каждого товара предусмотреть возможность указывать в базе, какой именно класс для расчета цены должен использоваться.
    Редактор динамических скидок сделал бы так: таблица, в каждой ее строке несколько selectов. В первом из них выбираем, что именно проверяем (текущее число, текущий день недели, текущее время, цена продукта, категория и т.п.). Во втором — операция проверки (меньше, больше, равно, не равно). В третьем - значение с которым сравниваем.
    В конце таблицы — размер скидки и ее тип (абсолютная в рублях или относительная в процентах).
    Все это сохраняем в массив (с помощью сериализации в PHP или JSON) и передаем классу, осуществляющему расчет цены. Он проходит этот массив последовательно, берет каждую строку, подставляет вместо первого selectа реальное значение, смотрит, какую операцию нужно применить и сравнивает. Если все условия в наборе выполнились, скидка применяется и класс возвращает исправленную цену.
    То есть получаем примерно такой:
    class ConditionPriceCalculator implements iPriceCalc {
    function calc($product,$user) {
    $data = get_file_contents('файл с условиями');
    $conditions = unserialize($data);
    $result = true;
    foreach ($conditions as $condition) {
       // в поле comp_value лежит условное значение из первого selectа, для которого нужно посчитать реальное значение
       if ($condition['comp_value']=='day') $value1==date('d');
       elseif ($condition['comp_value']=='weekday') $value1=date('N');
      // ... и так далее
      $value=$condition['value']; // тут хранится, с чем сравнивать
      if ($condition['op']=='eq') $cur_res = $value1==$value2;
      if ($condition['op']=='ne') $cur_res = $value1!=$value2;
      //  и т.д.
      if (!$cur_res) $result = false; // если условие не выполнилось, общий результат сбрасываем в false, еще можно добавить break;
    }
    if ($result) {
      // если все условия из набора выполнились, рассчитываем новую цену:
    }
    }
    }

    В принципе, можно предусмотреть, чтобы таких наборов условий было несколько и применялся первый сработавший.
    Единственное ограничение — это то, что нельзя в одном наборе условий объединять их по "ИЛИ", а не по "И".
    Ответ написан
    1 комментарий
  • Какие есть варианты редактирования загружаемого word файла на сайте?

    @darksladen
    Используйте библиотеку какую нибудь.
    Вот как вариант, первое что нашел - webodf.org
    Ответ написан
    Комментировать
  • Сколько адекватно должно стоить продление домена на год и куда перейти?

    edalis
    @edalis
    HTML, CSS, JS, Node.js
    Отличные цены и сервис (Регистрация и продление доменов RU и РФ за 169 рублей):
    defin.domains
    Ответ написан
    Комментировать
  • Сколько адекватно должно стоить продление домена на год и куда перейти?

    Зависит от того сколько у Вас доменов. Если их достаточно много, то оптимальным решением будет получить у того же рег.ру статус партнера и партнерские расценки: у них и специальная форма для переноса от 2domains есть.
    Ответ написан
    Комментировать
  • Сколько адекватно должно стоить продление домена на год и куда перейти?

    rework
    @rework
    Помог ответ? В благодарность отметь его решением
    Аналогичная ситуация была, но узнал я об этом за день до того как истекал срок, поэтому пришлось продлить. А так, смотрел варианты, и если у вас есть запас времени, то вы можете подобрать более дешёвый регистратор (например regname24.ru) и перенести домены туда. Инструкцию по переносу можно почитать тут https://pupi-boy.ru/drugoye/perenos-domena-ru-k-dr...
    Ответ написан
    Комментировать
  • Сколько адекватно должно стоить продление домена на год и куда перейти?

    @lehha
    Стоимость продления у всех регистраторов достаточно разная: от 200 до 1500 рублей. Всё зависит от его типа клиентов.

    Регру, понабрав клиентов, может повысить всем цены, что успешно и делает. Часть убежит, а все остальные оплатят по 900 рублей. Profit.

    Посмотрите список аккредитованных регистраторов, благо перенос доменов ru/рф делается в электронном виде за несколько минут:
    https://cctld.ru/ru/registrators/
    Ответ написан
    3 комментария
  • Сколько адекватно должно стоить продление домена на год и куда перейти?

    plin2s
    @plin2s
    IT, инженер
    2domains весьма дешевый регистратор, а по качеству услуг уже стремится к "ниже среднего". Для доменов ru это средняя цена на продление.
    Можете попробовать sweb, у них 370.
    Ответ написан
    6 комментариев
  • Как правильней обрабатывать события, если много условий, а информация может изменяться?

    @BorisKorobkov Куратор тега PHP
    Web developer
    $('.price-line-switcher').on('change', function() {
       var $this = $(this);
       var $id = $this.attr('id');
       switch ($id) {
          ...
       }
    });
    Ответ написан
    2 комментария
  • Как взаимодействовать с 1с, если произошли изменения на сайте, например, сформировался заказ?

    Лучше сделать наоборот. На стороне сайта пилите REST API (ну или другой интерфейс), а 1С раз в N секунд/минут/часов дергает "апишечку" на предмет новых заказов. Так "секурней", и не нужен стабильный канал до базы 1С извне.
    Ответ написан
    5 комментариев
  • Архитектура mvc + модули, как правильно поступить?

    Basim108
    @Basim108
    Full stack .Net программист, архитектор.
    Да, согласен с предыдущим ответом. В таком случаи лучше сделать более умным клиента и регулировать переход на страницу новости через browser history API или router фреймворк, который используете на клиенте.
    т.е. эмитируете переход на новую страницу (и в адресной строке поменялось и в истории браузера добавилась запись) но на самом деле обращения к серверу второй раз не было.
    Ответ написан
    Комментировать
  • Как можно двигать курсор при наборе текст, не используя стандартные клавиши?

    saboteur_kiev
    @saboteur_kiev Куратор тега Программирование
    software engineer
    vi/vim позволяют перемещаться по тексту кучей различных способов, кроме стрелочек.
    Да и вместо стрелочек можно использовать hjkl
    Ответ написан
    Комментировать