D7 Работа с ExpressionField в getList

10.10.2016 Bitrix, php, php скрипты ,


$resOrder = Bitrix\Sale\OrderTable::getList(
    array(
        'filter' => array('=USER_ID' => 1),
        'group' => array('PAYED'),
        'runtime' => array(           
            new Bitrix\Main\Entity\ExpressionField('IDS', 'GROUP_CONCAT(%s)', array('ID')),
        ),
    )
);

Bitrix d7 получить список пользователей по группам

10.08.2016 Bitrix, php, php скрипты ,

           $arUsers = Bitrix\Main\UserGroupTable::getList(
		array(
			'order'=>array('USER_ID' => 'asc'),
			'group'=>array('USER_ID'),
			'select' => array(
				'USER_ID',
				'USER_DATE_REGISTER' => 'USER.DATE_REGISTER',
				'USER_ACTIVE' => 'USER.ACTIVE',
				'USER_EMAIL' => 'USER.EMAIL',
				'USER_LOGIN' => 'USER.LOGIN',
				'USER_WORK_COMPANY' => 'USER.WORK_COMPANY',
				'USER_NAME' => 'USER.NAME',
				'USER_GROUP_STR',
			),
			'filter' => array(
				'GROUP.ACTIVE' => 'Y',
				'USER.ACTIVE' => 'Y',
				'GROUP_ID' => array(3, 4),
				array(
					'LOGIC' => 'OR',
					'=DATE_ACTIVE_FROM' => null,
					'<=DATE_ACTIVE_FROM' => $nowTimeExpression,
				),
				array(
					'LOGIC' => 'OR',
					'=DATE_ACTIVE_TO' => null,
					'>=DATE_ACTIVE_TO' => $nowTimeExpression,
				),
			),
			'runtime' => array(
				'USER_GROUP_STR' => array(
					'data_type' => 'string',
					'expression' => array('GROUP_CONCAT(%s)', 'GROUP_ID')
				),

			)
		)
	)->fetchAll();

Отпарвка формы с вложенными файлами.

28.07.2016 Bitrix, php ,

function OnOnBeforeEventAdd(&$event, &$lid, &$arFields, &$message_id, &$files){
    if ($event == 'ololo_form_event') {		
        $isFiltered = false;
		$by="s_id";
		$order="desc";
		/// код совойства в которм должны быть файлы
		$arFilterField = Array(
			"SID"	=> "FILE_CODE_QUESTION"
		);
		$rsQuestions = CFormField::GetList(
			$arFields['RS_FORM_ID'], 
			"N", 
			$by, 
			$order, 
			$arFilterField, 
			$isFiltered
		);
		if($isFiltered){		
			if ($arQuestion = $rsQuestions->Fetch()){
				$arFilterAnswer = Array(
					"FIELD_TYPE" => "file",
				);
				$rsAnswers = CFormAnswer::GetList(
					$arQuestion['ID'], 
					$by, 
					$order, 
					$arFilterAnswer, 
					$isFiltered
				);
				if($isFiltered){
					while ($arAnswer = $rsAnswers->Fetch()){
						$file = CFormResult::GetFileByAnswerID($arFields['RS_RESULT_ID'], $arAnswer['ID']);
						if(intval($file['USER_FILE_ID']) > 0){
							$files[] = $file['USER_FILE_ID'];
						}
					}						
				}					
			}				
		}
        return $arFields;
    }
}

Bitrix d7 getList runtime

27.07.2016 Bitrix , , ,

Два разных способа записи runtime сущностей

            if(!class_exists('Bitrix\Sale\Internals\OrderPropsValueTable')){
                CModule::AddAutoloadClasses(
                    "",
                    array(
                        'Bitrix\Sale\Internals\OrderPropsValueTable' => "/bitrix/modules/sale/distr/lib/internals/orderprops_value.php",
                        'Bitrix\Sale\Internals\OrderPropsTable' => "/bitrix/modules/sale/distr/lib/internals/orderprops.php",
                    )
                );
            }

            $arOrder = Bitrix\Sale\OrderTable::getRow(
                array(
                    'filter' => array(
                        '=ID' => 36835, 'LID' => 's1'
                    ),
                    'select' => array(
                        'ID', 'PRICE',
                        'ADDRESS' => 'ADDRESS_ORDER.VALUE'
                    ),
                    'runtime' => array(
                        'ADDRESS_ORDER' => array(
                            'data_type' => 'Bitrix\Sale\Internals\OrderPropsValueTable',
                            'reference' => array(
                                '=ref.CODE' => new Bitrix\Main\DB\SqlExpression('?s', 'ADDRESS'),
                                '=this.ID' => 'ref.ORDER_ID',
                            )
                        ),
                        new Bitrix\Main\Entity\ReferenceField(
                            'ADDRESS_ORDER',
                            'Bitrix\Sale\Internals\OrderPropsValueTable',
                            array(
                                '=ref.CODE' => new Bitrix\Main\DB\SqlExpression('?s', 'ADDRESS'),
                                '=this.ID' => 'ref.ORDER_ID',
                            )
                        )
                    )
                )
            );

Отпарвка письма с влоожениями

07.07.2016 Bitrix, php, php скрипты ,

Подробней тут http://www.spravkaweb.ru/php/sovet/mail/file

        $mailFields = array (
		'TITLE' => 'Тема письма ололо',
		'TEXT' => 'Текст ололо',
	);

	$arFile = array (
		0 => $_SERVER['DOCUMENT_ROOT'].'/upload/test.php',
		1 => $_SERVER['DOCUMENT_ROOT'].'/robots.txt',
	);


	function sendDebugToYouTrack($mailFields, $arFile)
	{
		$subject = '=?windows-1251?B?'.base64_encode($mailFields['TITLE']).'?=';
		// Subject: =?<кодировка текста>?<способ кодирования>?<закодированный Subject>?= 
		// Кодировка текста = windows-1251 или koi8-r или .... смотря в какой кодировке был текст когда ты его (Subject) кодировал.
		// Способ кодирования = Q (quoted_printable) или B (base64)
		// Соответственно функции quoted_printable_encode или base64_encode
		// Но лучше не изобретать велосипед, а использовать iconv_mime_encode (благо тут уже все придумано).

		$comment_mail = $mailFields['TEXT'];

		$arAttachment = array();
		
		if (!empty($arFile)) {
			foreach($arFile as $file) {
				$arFile = CFile::MakeFileArray($file);
				if($arFile){				
					$file = fopen($arFile['tmp_name'], "r");
					$text = fread($file, filesize($arFile['tmp_name']));
					fclose($file);					
					$arAttachment[] = array(
						"attachment" => chunk_split(base64_encode($text)),
						"name" => $arFile["name"],
						"type" => $arFile["type"],
						"arFile" => $arFile,
					);
				}
			}
		}
		
		$boundary = '#####' . time();
		$sStartOrEndLetter = '--';
		$sImplode = "\r\n";
		
		$sHeader = '';
		$sHeader.= 'From: "Ололий" <ololo@ololo.com>'.$sImplode;	
		$sHeader.= 'To: ololo@ololo.com'.$sImplode;						
		$sHeader.= 'Subject: '.$subject.$sImplode;		
		$sHeader.= 'Mime-Version: 1.0'.$sImplode;	
		$sHeader.= 'Content-Type: multipart/mixed; boundary="'.$boundary.'"'.$sImplode;	
		
		$sMessage = '';
		$sMessage.= $sStartOrEndLetter.$boundary.$sImplode;
		$sMessage.= 'Content-type: text/plain; charset="windows-1251"'.$sImplode;
		$sMessage.= 'Content-Transfer-Encoding: quoted-printable'.$sImplode;
		$sMessage.= "\n";
		$sMessage.= $comment_mail;
		$sMessage.= "\n\n";
		
		
		if(count($arAttachment) > 0){
		
			foreach($arAttachment as $attachment){
				$sMessage.= $sStartOrEndLetter.$boundary.$sImplode;		
				$sMessage.= 'Content-Type: application/x-rar-compressed; name="'.$attachment['name'].'"'.$sImplode;
				$sMessage.= 'Content-Transfer-Encoding:base64'.$sImplode;
				$sMessage.= 'Content-Disposition:attachment;'.$sImplode;
				$sMessage.= $sImplode;
				$sMessage.= $attachment['attachment'];
				$sMessage.= $sImplode;		
			}
			
		}

		$sMessage.= $sStartOrEndLetter.$boundary.$sStartOrEndLetter.$sImplode;
		
		// echo "<pre>";
			// print_r($sHeader);	
			// print_r($sMessage);
		// echo "</pre>";

		if(mail('ololo@ololo.com', $subject, $sMessage, $sHeader) ){
			print_r('cool');
		}else{
			print_r('bad');
		}
	}

Bitrix Загрука файла, ресайз, сохранение в базу

27.06.2016 Bitrix, php, php скрипты ,

require $_SERVER['DOCUMENT_ROOT'] . '/bitrix/modules/main/include/prolog_before.php';
	$arFileToUploads = $_FILES['userfile'];
	CAllFile::ResizeImage(
		&$arFileToUploads, // путь к изображению, сюда же будет записан уменьшенный файл
		array(
			"width" => 1000,  // новая ширина
			"height" => 5000 // новая высота
		),
		BX_RESIZE_IMAGE_PROPORTIONAL // метод масштабирования. обрезать прямоугольник без учета пропорций
	);
	$arFileToUploads['MODULE_ID'] = 'iblock';	
	$sPathToSave = 'posts';
	if(intval($USER->GetID()) > 0){
		$sPathToSave .= '/user_'.intval($USER->GetID());
	}
	$iFileId = CFile::SaveFile($arFileToUploads, $sPathToSave);	
	$arFile = CFile::GetFileArray($iFileId);
exit;

CacheEngineFiles — механизм хранения кеша в файлах.

16.06.2016 Bitrix

//$arAllVars	Закешированный результат.
//$baseDir	Базовая директория для кеша (обычно /bitrix/cache).
//$initDir	Директория для кеша без базы.
//$filename	Имя файла.
//$TTL	Период экспирации в секундах.
$arResult = array();
$baseDir = '/bitrix/cache';
$initDir = '/ololo/';
$filename = 'ololo_file.php';
$TTL = 3600;
$strDocumentRoot = \Bitrix\Main\Application::getInstance()->getContext()->getServer()->getDocumentRoot();
$obCahce = new Bitrix\Main\Data\CacheEngineFiles();
//$obCahce->clean($baseDir.$initDir);
echo "<pre style='color:#3ea1ed;'> isCacheExpired <br>";
var_dump($obCahce->isCacheExpired($strDocumentRoot . $baseDir . $initDir . $filename));
echo "</pre>";
echo "<pre style='color:#dd25ed;'>isAvailable <br />";
var_dump($obCahce->isAvailable());
echo "</pre>";
$isKashe = $obCahce->read($arResult, $baseDir, $initDir, $filename, $TTL);
echo "<pre style='color:#dd25ed;'> \$isKashe = ";
var_dump($isKashe);
echo "</pre>";
echo "<pre style='color:#dd25ed;'>getCachePath <br />";
var_dump($obCahce->getCachePath());
echo "</pre>";
echo "<pre style='color:#dd25ed;'>getReadBytes <br />";
var_dump($obCahce->getReadBytes());
echo "</pre>";
if ($isKashe === true) {
    echo "<pre style='color:#008000;'>";
    var_dump($arResult);
    echo "</pre>";
}
if ($isKashe === false) {
    $arAllVars = array(345, 523, 499);
    $obCahce->write($arAllVars, $baseDir, $initDir, $filename, $TTL);
    echo "<pre style='color:#dd25ed;'>getCachePath <br />";
    var_dump($obCahce->getCachePath());
    echo "</pre>";
    echo "<pre style='color:#4427ed;'>getWrittenBytes <br />";
    var_dump($obCahce->getWrittenBytes());
    echo "</pre>";
}
echo "<pre style='color:#ed1886;'>";
var_dump($arResult);
echo "</pre>";
echo "<pre style='color:red;'>";
var_dump(get_class_methods($obCahce));
echo "</pre>";

Интеграция с 1с

16.02.2016 Bitrix, Bitrix - 1c

Список ссылок по теме:

http://dev.1c-bitrix.ru/learning/course/index.php?COURSE_ID=42&CHAPTER_ID=1158

 

Как сэкономить на месте и ускорить выгрузку из 1С

http://dev.1c-bitrix.ru/learning/course/index.php?COURSE_ID=42&LESSON_ID=6626

 

Итак, как все сказанное выше на словах выглядит технически:

(далее…)

Bitrix отгрзки

01.02.2016 Bitrix

Данные хранятся в таблице b_sale_order_delivery

Class Bitrix\Sale\Internals\ShipmentTable;

geo ip example

28.01.2016 php скрипты , ,

<?
$ip = '192.168.11.5';
if($ch = curl_init()){		
	$url = "http://freegeoip.net/json/". $ip; 
	$headers = array(
		"Content-type: application/json",
		"Accept: application/json",
		"Accept-Language:ru-RU,ru;q=0.8,en-US;q=0.6,en;q=0.4"
	); 
	$ch = curl_init();
	curl_setopt($ch, CURLOPT_URL,$url);
	curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
	curl_setopt($ch, CURLOPT_TIMEOUT, 30);
	curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);	
 
	$data = curl_exec($ch); 
 
	if (curl_errno($ch)) {

		// curl_error($ch);         

	  
	} else {		         
		$arData = json_decode($data, true) ; 
	}
	
	curl_close($ch);  
}
print_r($arData);
?>