Перейти к содержанию
Официальный форум поддержки Simpla

jonny008

Пользователь
  • Публикаций

    143
  • Зарегистрирован

  • Посещение

Сообщения, опубликованные jonny008

  1. $_SESSION['last_1c_imported_product_num'] - переменная, которая УЖЕ используется и ее в новом функционале использовать нельзя.

    Заменяйте на что-то типа  $_SESSION['last_1c_imported_zakazs_num'].

     

    Дело было не в этом. Странно почему не встаёт в поле id поле из XML - Документ->Ид

  2. Здравствуйте. Сделал сервис по проверки статуса заказ наряда (добавил поля в БД, интерфейс в админке, импорт через csv, клиентская часть -  здесь всё отлично). Не совсем правильно прогружаются поля в БД через 1С. Делал по подобию импорта товаров. Иногда парсится нормально, иногда только 4-5 позиций. Никак не хочет в id заказ наряда встать внешний id из 1С. Если полностью очистить таблицу, то первая выгрузка проходит отлично. Дальше через раз. Вот код:

     

    if($simpla->request->get('type') == 'usc' && $simpla->request->get('mode') == 'checkauth')
    {
    	print "success\n";
    	print session_name()."\n";
    	print session_id();
    }
    if($simpla->request->get('type') == 'usc' && $simpla->request->get('mode') == 'init')
    {
    	$tmp_files = glob($dir.'*.*');
    	if(is_array($tmp_files))
    	foreach($tmp_files as $z)
    	{
        	unlink($z);
        }
    	unset($_SESSION['last_1c_imported_product_num']);
    	print "zip=no\n";
    	print "file_limit=1000000\n";
    }
    if($simpla->request->get('type') == 'usc' && $simpla->request->get('mode') == 'file')
    {
    	$filename = basename($simpla->request->get('filename'));
    	$f = fopen($dir.$filename, 'ab');
    	fwrite($f, file_get_contents('php://input'));
    	fclose($f);
    	print "success\n";
    } 
    if($simpla->request->get('type') == 'usc' && $simpla->request->get('mode') == 'import')
    {
    	print "success\n";
    	$filename = basename($simpla->request->get('filename'));
    	echo $filename;
    	if($filename === 'usc_exchange.xml')
    	{
    	// Заказ наряды	
    		$z = new XMLReader;
    		$z->open($dir.$filename);
    		while ($z->read() && $z->name !== 'Документ');
    		// Последний заказ-наряд, на котором остановились
    		$last_product_num = 0;
    		if(isset($_SESSION['last_1c_imported_product_num']))
    			$last_product_num = $_SESSION['last_1c_imported_product_num'];
    		// Номер текущего товара
    		$current_product_num = 0;
    	while($z->name === 'Документ')
    		{
    			if($current_product_num >= $last_product_num)
    			{
    				$xml = new SimpleXMLElement($z->readOuterXML());
    				// Товары
    				import_zakaz($xml);
    				$exec_time = microtime(true) - $start_time;
    				if($exec_time+1>=$max_exec_time)
    				{
    					header ( "Content-type: text/xml; charset=utf-8" );
    					print "\xEF\xBB\xBF";
    					print "progress\r\n";
    					print "Выгружено заказ-нарядов: $current_product_num\r\n";
    					$_SESSION['last_1c_imported_product_num'] = $current_product_num;
    					exit();
    				}
    			}
    			$z->next('Документ');
    			$current_product_num ++;
    		}
    		$z->close();
    		print "success";
    		print "Выгружено заказ-нарядов: $current_product_num\r\n";
    		//unlink($dir.$filename);
    		unset($_SESSION['last_1c_imported_product_num']);
    	}
    }	
    function import_zakaz($xml)
    {
    	global $simpla;
    	global $dir;
    	global $full_update;
    	// Товары0
    	//  Id товара и варианта (если есть) по 1С
    	@list($usc_1c_id) = explode('#', $xml->Ид);
    	if(empty($usc_1c_id))
    		$usc_1c_id = '';
    	// Подгатавливаем вариант
    	$zakaz_id = null;
    	$zakaz = new stdClass;
    	$zakaz->sku = (string)$xml->Номер;
    	$zakaz->id = $usc_1c_id;
    	// Ищем заказанаряд
    	$simpla->db->query('SELECT id FROM __zakazs WHERE id=?', $usc_1c_id);
    	$id = $simpla->db->result('id');
    		if(empty($id))
    	{
    		$id = $simpla->zakazs->add_zakaz(
    								array(
    									'id'=>$usc_1c_id, 
    									'name'=>$xml->name, 
    									'sku'=>$xml->Номер, 
    									'equipment'=>$xml->equipment, 
    									'status'=>$xml->status 
    								)
    							);
    	}
    	else
    	{
    	if($full_update)
    		{
    			$z = new stdClass();
    			$z->id = $usc_1c_id;
    			$z->sku = $xml->Номер;
    			$z->name = $xml->name;
    			$z->equipment = $xml->equipment;
    			$z->status = $xml->status;
                $id = $simpla->zakazs->update_zakaz($id, $z);
    		}
    	}
    }
    

     

    и содержимое xml (блок Документ)

     

    <Документ>
    		<ТипДокумента>ЗаказНаряд</ТипДокумента>
    		<Ид>618c5c27-17b2-11e9-8066-002590597037</Ид>
    		<Номер>Ц0000528790</Номер>
    		<sku>0528790</sku>
    		<Дата>2019-01-14</Дата>
    		<ХозОперация>Ремонт</ХозОперация>
    		<Роль>Продавец</Роль>
    		<Контрагенты>
    			<Контрагент>
    				<Ид>618c5c18-17b2-11e9-8066-002590597037</Ид>
    				<Наименование>Мавлеева Наиля Исламгалеевна</Наименование>
    				<ПолноеНаименование>Мавлеева Наиля Исламгалеевна</ПолноеНаименование>
    				<Роль>Покупатель</Роль>
    			</Контрагент>
    		</Контрагенты>
    		<name>Мавлеева Наиля Исламгалеевна</name>
    		<equipment>СТИРАЛЬНАЯ МАШИНА BOSCH </equipment>
    		<publish_date>2019-01-14</publish_date>
    		<Время>09:34:44</Время>
    		<Комментарий>Позвонить за 1 час!!!!     Модель не знают</Комментарий>
    		<status>Утверждено</status>
    		<ЗначенияРеквизитов>
    			<ЗначениеРеквизита>
    				<Наименование>НомерПо1С</Наименование>
    				<Значение>Ц0000528790</Значение>
    			</ЗначениеРеквизита>
    			<ЗначениеРеквизита>
    				<Наименование>ДатаПо1С</Наименование>
    				<Значение>2019-01-14</Значение>
    			</ЗначениеРеквизита>
    			<ЗначениеРеквизита>
    				<Наименование>ПометкаУдаления</Наименование>
    				<Значение>false</Значение>
    			</ЗначениеРеквизита>
    			<ЗначениеРеквизита>
    				<Наименование>Проведен</Наименование>
    				<Значение>true</Значение>
    			</ЗначениеРеквизита>
    		</ЗначенияРеквизитов>
    	</Документ>
    

     

     

     

     
  3. Здравствуйте, подскажите как правильно добавить доп параметры согласно ФФД 1.05 Нужно передать paymentMethod и paymentObject

     

    $orderBundle['cartItems']['items'][$key]['itemAttributes']  = [
    				
    				
    				"attributes" => [
    				
    				"name" => 'paymentMethod',
    				"value" => $this->payment_settings['sbr_paymentMethod'],
    				"name" => 'paymentObject',
    				"value" => $this->payment_settings['sbr_paymentObject']
    				]
    				]; 
    

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

     

    На сайте https://habr.com/post/434066/

     

    Приведён пример: 

     

    {
      "orderCreationDate": 1544553466000,
      "customerDetails": {
        "email": "test@222.ru",
        "phone": "42",
        "contact": "Max"
      },
      "cartItems": {
        "items": [
          {
            "positionId": 1,
            "name": "FFD 1.05",
            "quantity": {
              "value": 1,
              "measure": "ed"
            },
            "itemCode": "item_1",
            "tax": {
              "taxType": 0,
              "taxSum": 0
            },
            "itemPrice": 100000,
            "itemAttributes": {
              "attributes" : [
                {
                  "name": "paymentMethod",
                  "value": "1"
                },
                {
                  "name": "paymentObject",
                  "value": "4"
                }
              ]
            }
          }
        ]
      }
    } 
  4. Немного другое решение для вывода переменной в шаблон. 

     

    Скачиваем SxGeo.php и SxGeoCity.dat с сайта http://sypexgeo.net/ru/download/

     

    В файле IndexView.php после строки:

     

    $this->design->assign('module', $module);
    

    Пишем:

     

    $client  = @$_SERVER['HTTP_CLIENT_IP'];
    $forward = @$_SERVER['HTTP_X_FORWARDED_FOR'];
    $remote  = @$_SERVER['REMOTE_ADDR'];
     
    if(filter_var($client, FILTER_VALIDATE_IP)) $ip = $client;
    elseif(filter_var($forward, FILTER_VALIDATE_IP)) $ip = $forward;
    else $ip = $remote;
    //echo $ip;
    include("SxGeo.php");
    $SxGeo = new SxGeo('SxGeoCity.dat');
    $data = $SxGeo->get($ip);
    $city = $data['city']['name_ru'];
    $this->design->assign('city', $city);	
    

    В шаблоне выводим переменной {$city}

     

    Определяет город с точностью 99%. 

  5. На сколько я понял это поддержка на стороне кассы, и именно там нужно подкручивать что-то. 

    Если онлайн касса, то спрашивать у сервиса как с этим работать.

     

    В моем модуле все необходимые данные о товарах, ндс и системе налогоображения уже передаются.

     

    Все остальное на стороне кассы.

    https://habr.com/company/scanport/blog/353046/

     

    К вам вообще никаких вопросов, вы молодец. Модуль у вас великолепный. В данном случае Сбер ведёт себя не совсем честно. 

  6. Сбербанк работает по устаревшей версии ФФД 1.0 

    Обещают на конец декабря сделать поддержку ФФД 1.05

     

    Самое интересное, узнал об этом, только после подключения и подписания договора с СБ. Версия 1.0 уже не актуальна. Т.к отсутствует некоторые фискальные признаки - за их отсутствие полагается штраф с 2019г. При этом, не понятно, где нужны изменения под новую версию ФФД - или появятся доп. поля в админке Сбера или нужно через callback передавать данные.   

  7. Спасибо автору. Всё работает. Только проблема, если нажали кнопку "перейти к оплате" и не оплатили (закрыли страницу браузера и т.д), то после нажатия на кнопку, будет выводить - Заказ с таким номером уже обработан

     

    Такая проблема не только у Симплы. Может добавлять текущее время в номер заказа?

     

  8. Доброго дня! 

    В очередной раз понадобилась доработка по увеличению скорость для гугла т.к. после всех модулей упала до 50,  и нужен был поиск по товару в заказах , обратился к Виталий Лис скайп (vitas_159_). Перевел предоплату 1500руб. 19  июля 2018 сказал 2-3 дня и до сих пор нет результата. В конце написал что все сделал и залил. Но как поиска не было так и нет и скорость на том же месте. прилагаю скрин переписки и ссылку на гугл https://developers.google.com/speed/pagespeed/insights/?hl=ru&url=https%3A%2F%2Fyarnstore.by%2F&tab=desktop

    Добавьте в .htaccess 

    
    # сжатие text, html, javascript, css, xml:
    <ifModule mod_deflate.c>
    AddOutputFilterByType DEFLATE text/html text/plain text/xml application/xml application/xhtml+xml text/css text/javascript application/javascript application/x-javascript
    </ifModule>
    
    
    <IfModule mod_expires.c>
        ExpiresActive On
        ExpiresDefault "access 7 days"
        ExpiresByType application/javascript "access plus 1 year"
        ExpiresByType text/javascript "access plus 1 year"
        ExpiresByType text/css "access plus 1 year"
        ExpiresByType text/html "access plus 7 day"
        ExpiresByType text/x-javascript "access 1 year"
        ExpiresByType image/gif "access plus 1 year"
        ExpiresByType image/jpeg "access plus 1 year"
        ExpiresByType image/png "access plus 1 year"
        ExpiresByType image/jpg "access plus 1 year"
        ExpiresByType image/x-icon "access 1 year"
        ExpiresByType application/x-shockwave-flash "access 1 year"
    </IfModule>
    
    # Google PageSpeed Insights модуль PageSpeed,есть не на всех хостингах и не везде может работать, нужно уточнять у хостеров
    <IfModule pagespeed_module>
    ModPagespeed on
    ModPagespeedRewriteLevel CoreFilters
    ModPagespeedEnableFilters make_google_analytics_async
    ModPagespeedEnableFilters prioritize_critical_css
    ModPagespeedEnableFilters defer_javascript
    ModPagespeedEnableFilters sprite_images
    ModPagespeedEnableFilters convert_png_to_jpeg,convert_jpeg_to_webp
    ModPagespeedEnableFilters collapse_whitespace,remove_comments
    </IfModule>
    
    
    # Cache-Control
    <ifModule mod_headers.c>
        # 30 дней
        <filesMatch "\.(ico|pdf|flv|jpg|jpeg|png|gif|swf)$">
            Header set Cache-Control "max-age=2592000, public"
        </filesMatch>
        
        # 30 дней
        <filesMatch "\.(css|js)$">
            Header set Cache-Control "max-age=2592000, public"
        </filesMatch>
    	
    	# 30 дней
        <filesMatch "\.(eot|ttf|otf|woff)$">
            Header set Cache-Control "max-age=2592000, public"
        </filesMatch>
        
        # 2 дня
        <filesMatch "\.(xml|txt)$">
            Header set Cache-Control "max-age=172800, public, must-revalidate"
        </filesMatch>
    
        # 1 день
        <filesMatch "\.(html|htm|php)$">
            Header set Cache-Control "max-age=172800, private, must-revalidate"
        </filesMatch>
        
    </ifModule>
    

    И пересохраните картинки в более сжатом формате.

  9. Все не так...

    Смарти работает на сервере при генерации страницы, а джаваскрипт - в браузере юзера.

    Получилось вот так вывести в переменную:

     

    		$client  = @$_SERVER['HTTP_CLIENT_IP'];
    $forward = @$_SERVER['HTTP_X_FORWARDED_FOR'];
    $remote  = @$_SERVER['REMOTE_ADDR'];
     
    if(filter_var($client, FILTER_VALIDATE_IP)) $ip = $client;
    elseif(filter_var($forward, FILTER_VALIDATE_IP)) $ip = $forward;
    else $ip = $remote;
    echo $ip;
    include("SxGeo.php");
    $SxGeo = new SxGeo('SxGeoCity.dat');
    $data = $SxGeo->get($ip);
    $city = $data['city']['name_ru'];
    $this->design->assign('city', $city);	
    
  10. Здравствуйте.  Подскажите пожалуйста как сделать так, чтобы при выборе способа доставки "Самовывоз" делалась скидка на заказ в размере 10%.  Выбор способа доставки реализован на radio

    <div id="deliveries">
    					<div class="deline">
    			<div class="chk">
    				<input type="radio" name="delivery_id" value="1" checked="" id="deliveries_1">
    				<label for="deliveries_1">
    				Курьерская доставка по Москве			
    				</label>			
    			</div>
    				
    		</div>
    				<div class="deline">
    			<div class="chk">
    				<input type="radio" name="delivery_id" value="2" id="deliveries_2">
    				<label for="deliveries_2">
    				Самовывоз			
    				</label>			
    			</div>
    				
    		</div>
    			
    	<div class="clear"></div>
    </div>
    

    Заранее благодарен за помощь.

    Самое простое, это условие в CartView.php

     

    После: 

    // Скидка
    		$cart = $this->cart->get_cart();
    

    Добавить:

    if($order->delivery_id == 2) {
    	$order->discount = 10;
    }
    

    Сам id можно посмотреть в админке

  11. Не подскажите в чём ошибка : 

     

    Fatal error: Uncaught SoapFault exception: [WSDL] SOAP-ERROR: Parsing WSDL: Couldn't load from 'http://www.cbr.ru/DailyInfoWebServ/DailyInfo.asmx?WSDL' : failed to load external entity "http://www.cbr.ru/DailyInfoWebServ/DailyInfo.asmx?WSDL" in /var/www/html/123.ru/cron.php:14
    
  12. Здравствуйте. 

     

    Пытаюсь назначить город в переменную smarty. 

    <script type="text/javascript">
      window.onload = function () {
         
          var gorod;
          gorod = ymaps.geolocation.city;
          
          {assign var=user_region value = 'gorod'};
          
      }
    
    
    </script>
    
    
    {$user_region}
    

    Вообще никак не работает. Вопрос конечно глупый, но с javascript вообще никак. Подскажите пожалуйста, что не так.

  13. В htaccess 

     

    # Cache-Control
    <ifModule mod_headers.c>
        # 30 дней
        <filesMatch "\.(ico|pdf|flv|jpg|jpeg|png|gif|swf)$">
            Header set Cache-Control "max-age=2592000, public"
        </filesMatch>
        
        # 30 дней
        <filesMatch "\.(css|js)$">
            Header set Cache-Control "max-age=2592000, public"
        </filesMatch>
    	
    	# 30 дней
        <filesMatch "\.(eot|ttf|otf|woff)$">
            Header set Cache-Control "max-age=2592000, public"
        </filesMatch>
        
        # 2 дня
        <filesMatch "\.(xml|txt)$">
            Header set Cache-Control "max-age=172800, public, must-revalidate"
        </filesMatch>
    
        # 1 день
        <filesMatch "\.(html|htm|php)$">
            Header set Cache-Control "max-age=172800, private, must-revalidate"
        </filesMatch>
        
    </ifModule>
    
  14.  

    Надо вместо
    INNER JOIN __categories c
     что-то типа
    LEFT JOIN __categories c ON c.id=pc.category_id
     
    И, скорее всего, в другом месте запроса...

    Спасибо большое. Заработало так: 

     

    // Товары
    $simpla->db->query("SET SQL_BIG_SELECTS=1");
    // Товары
    $simpla->db->query("SELECT
     v.price,
     v.id as variant_id,
     p.name as product_name,
     v.name as variant_name,
     c.efind,
     v.position as variant_position,
     p.id as product_id,
     p.url,
     p.annotation,
     pc.category_id
     , i.filename as image
     
    					FROM __variants v 
    					
    					
    					LEFT JOIN __products p ON v.product_id=p.id
                        LEFT JOIN __products_categories pc ON p.id = pc.product_id AND pc.position=(SELECT MIN(position) FROM __products_categories WHERE product_id=p.id LIMIT 1)	
    					LEFT JOIN __images i ON p.id = i.product_id AND i.position=(SELECT MIN(position) FROM __images WHERE product_id=p.id LIMIT 1)
    					LEFT JOIN __categories c ON c.id=pc.category_id
    					WHERE p.visible AND c.efind >0 AND (v.stock >0 OR v.stock is NULL) GROUP BY v.id ORDER BY p.id, v.position ");
    
  15. Здравствуйте. 

     

    Есть необходимость выгрузить товары некоторых  категории в XML 

     

    Для этого создал в таблице s_categories столбец efind

     

    Далее  в Categories.php в запросе добавил c.efind

     

     

    // Выбираем все категории
    		$query = $this->db->placehold("SELECT c.id, c.parent_id, c.name, c.description, c.url, c.efind, c.meta_title, c.meta_keywords, c.meta_description, c.image, c.visible, c.position
    										FROM __categories c ORDER BY c.parent_id, c.name");
    

    Далее в шаблоне админки и в контроллерах. 

     

    и в самом файле efind.php

     

    // Товары
    $simpla->db->query("SET SQL_BIG_SELECTS=1");
    // Товары
    $simpla->db->query("SELECT
     v.price,
     v.id as variant_id,
     p.name as product_name,
     v.name as variant_name,
     c.efind,
     v.position as variant_position,
     p.id as product_id,
     p.url,
     p.annotation,
     pc.category_id
     , i.filename as image
     
    					FROM __variants v INNER JOIN __categories c
    					
    					LEFT JOIN __products p ON v.product_id=p.id
                        LEFT JOIN __products_categories pc ON p.id = pc.product_id AND pc.position=(SELECT MIN(position) FROM __products_categories WHERE product_id=p.id LIMIT 1)	
    					LEFT JOIN __images i ON p.id = i.product_id AND i.position=(SELECT MIN(position) FROM __images WHERE product_id=p.id LIMIT 1)
    					
    					WHERE p.visible AND c.efind >0 AND (v.stock >0 OR v.stock is NULL) GROUP BY v.id ORDER BY p.id, v.position ");
    

     

    Всё на подобии выгрузки в ЯМ. 

     

    По такому запросы выводятся все товары. Я в запросах полный ноль. 

     

     

  16. В ProductView.php добавляем:

     

    $product->min_price = min(array_map(function($v){return $v->price;}, $product->variants);

     

    Добавлять после того, как уже определены варианты, но $product еще не назначено в шаблон.

    Ну а далее спокойно используем в шаблоне {$product->min_price|convert}.

     

    Актуально для php >= 5.3

    В противном случае откажитесь от использования анонимной функции и напишите функцию для callback'а.

    Всё супер, только скобку пропустили. 

×
×
  • Создать...