Bitrix

BigVideo.js видео в background

14.06.2014 Bitrix, jQuery плагины

http://dfcb.github.io/BigVideo.js/

Использование SEO данных инфоблока через API

06.06.2014 Bitrix ,

Получить поля SEO для элемента можно так:

CModule::IncludeModule("iblock");
 
$rsSection = CIBlockSection::GetList(
    array(),
    array(
        "IBLOCK_ID" => $arParams['IBLOCK_ID'],
        "ACTIVE"=>"Y",
        "=CODE"=>$arParams["SECTION_CODE"]),
    false);
 
if($arSection = $rsSection->GetNext()){
 
$ipropValues = new \Bitrix\Iblock\InheritedProperty\ElementValues(
        $arSection["IBLOCK_ID"],
        $arSection["ID"]
    );
    $arSection["IPROPERTY_VALUES"] = $ipropValues->getValues();
    echo '<pre>'; print_r($arSection["IPROPERTY_VALUES"]); echo '</pre>';
}

Поля SEO для раздела можно получить похожим способом:

CModule::IncludeModule("iblock");
 
$rsSection = CIBlockSection::GetList(
    array(),
    array(
        "IBLOCK_ID"=>$arParams['IBLOCK_ID'],
        "ACTIVE"=>"Y",
        "=CODE"=>$arParams["SECTION_CODE"]),
        false
        );
 
if($arSection = $rsSection->GetNext()){
 
$ipropValues = new \Bitrix\Iblock\InheritedProperty\SectionValues(
    $arSection["IBLOCK_ID"],
    $arSection["ID"]
    );
     
    $arSection["IPROPERTY_VALUES"] = $ipropValues->getValues();
    echo "<pre>"; print_r($arSection); echo '</pre>';
}

Оригинал статьи тут http://yournet.kz/blog/bitrix/ispolzovanie-seo-dannyx-v-infobloke-cherez-api

подписать авторизованного пользователя bitrix

29.05.2014 Bitrix

CModule::IncludeModule("subscribe");
$arFields = Array(
	"RUB_ID"		=> array($arParams['ID_SUB']), // id рассылки должен быть массив!
	"USER_ID"		=> $USER->GetID(),
	"FORMAT"		=> "text",
	"EMAIL"			=> $USER->GetEmail(),
	"ACTIVE"		=> "Y",
	"SEND_CONFIRM"	=> 'N'
);
$ID = $subscr->Add($arFields);


$subscription = CSubscription::GetByEmail($USER->GetEmail());				
if($arSub = $subscription->Fetch()){		
	$arResult['DATA_SUB_USSER']	= $arSub;
}

// подтверждаем подписку
$res = $subscr->Update($ID, 
	array(
		"CONFIRMED"		=> "Y",
		"CONFIRM_CODE"	=> $arResult['DATA_SUB_USSER']["CONFIRM_CODE"]
	)
);

Настройка композитный сайт Битрикс

21.05.2014 Bitrix, Технология Композитный сайт No comments

Предварительно включите композитный сайт в настройках сайта
1) в dbconn.php в конец файла дописать

define("BX_COMPOSITE_DEBUG", true);
define("LOG_FILENAME", $_SERVER["DOCUMENT_ROOT"]."/log.txt");

Теперь в режиме инкогнито запускаем сайт (начните с главной страницы). Обновляем страницу, и идем смотреть в наш log.txt
в файле вот это 0-0

Host: bxd24.itracker.ru
Date: 2014-05-21 16:55:57
Module: composite
Template: /bitrix/templates/books/components/bitrix/menu/horizontal_multilevel/template.php
Request URI: /
Script: /index.php
    CBitrixComponentTemplate::__IncludePHPTemplate < CBitrixComponentTemplate::IncludeTemplate < CBitrixComponent::showComponentTemplate < CBitrixComponent::includeComponentTemplate < include
	/srv/www/bx-dev/bxd24/public_html/bitrix/modules/main/classes/general/component_template.php:584
	/srv/www/bx-dev/bxd24/public_html/bitrix/modules/main/classes/general/component.php:615
	/srv/www/bx-dev/bxd24/public_html/bitrix/modules/main/classes/general/component.php:564
	/srv/www/bx-dev/bxd24/public_html/bitrix/components/bitrix/menu/component.php:373
	/srv/www/bx-dev/bxd24/public_html/bitrix/modules/main/classes/general/component.php:480
----------

Этот текст нам говорит: «Уважаемый, вот этот шаблон
Template: /bitrix/templates/books/components/bitrix/menu/horizontal_multilevel/template.php
против композитного сайта…».

Тут два варианта, либо этому шаблону говорим, что он будет отдаваться статикой, либо динамикой.
Для отдачи статикой

$this->setFrameMode(true); 
// если передать  $this->setFrameMode(false);, то шаблон
// будет вечно против композитного сайта

если весь компонент нужно отдать динамикой:

    $this->setFrameMode(true);
    $this->createFrame()->begin('Загрузка');

или так

$frame = $this->createFrame("COMPOSIT_AUTH", false)->begin("Загрузка...");
$frame->end();

или так

   $frame = $this->createFrame()->begin();
         // статический и динамический контент
   $frame->end();

можно сделать динамическую область и статическую область

   <span id="sale-basket-basket-line-container"> 
        <?$frame = $this->createFrame("sale-basket-basket-line-container", false)->begin(); ?>
           <div>// динамическая область</div>
        <?$frame->beginStub();?>
           <div>// статическая область</div>
        <?$frame->end();?>
   </span>  

Если нужно сделать динамическую область в шаблоне сайта

Bitrix\Main\Page\Frame::getInstance()->startDynamicWithID("test-b");
// тут может быть компонент или вывод времени...
Bitrix\Main\Page\Frame::getInstance()->finishDynamicWithID("test-b", "");


\Bitrix\Main\Page\Frame::getInstance()->startDynamicWithID("ololo");
    $APPLICATION->ShowViewContent('ololo');
\Bitrix\Main\Page\Frame::getInstance()->finishDynamicWithID("ololo", "", "ID_OLOLO");

<div id="ID_OLOLO"></div>

Самостоятельно вставить данные дин. области можно на вот этих событиях:
событие происходит перед началом цикла вставки дин. блоков

	BX.addCustomEvent("onFrameDataReceivedBefore", function(json) {} );

событие происходит перед вставкой каждого блока. Если для конкретного блока в шаблоне компонента было указано $frame->setAutoUpdate(false), то вставка динамического блока не происходит

BX.addCustomEvent("onBeforeDynamicBlockUpdate", function( block, fromCache) {});

событие происходит после цикла вставки дин. блоков

BX.addCustomEvent("onFrameDataReceived", function(json) {});

где json — это все данные, которые пришли в композитном ajax-хите
block — это данные по конкретному блоки (id, контент и другие)
fromCache — равен true, когда данные вставляют из локальной SQL-базы.

        BX.addCustomEvent('onAjaxSuccess', function(){
            $(".checkbox, .radio").uniform();
        });
	BX.ready(function(){
		BX.addCustomEvent("onFrameDataReceived", function(json) {
				console.log(json)
		});
	});

Отсюда https://dev.1c-bitrix.ru/community/blogs/Docs_and_other/course-composite-website.php

Подробней тут http://dev.1c-bitrix.ru/learning/course/index.php?COURSE_ID=39&INDEX=Y

Данная информация является моей шпаргалкой, писал в основном ее для себя.

Вот тут есть еще много полезного Композитный сайт: tips & tricks

Расстояние между двумя точками

16.05.2014 Bitrix

/*
* Расстояние между двумя точками
* $φA, $λA - широта, долгота 1-й точки,
* $φB, $λB - широта, долгота 2-й точки
*/
function calculateTheDistance ($φA, $λA, $φB, $λB) {
define('EARTH_RADIUS', 6372795);

// перевести координаты в радианы
$lat1 = $φA * M_PI / 180;
$lat2 = $φB * M_PI / 180;
$long1 = $λA * M_PI / 180;
$long2 = $λB * M_PI / 180;

// косинусы и синусы широт и разницы долгот
$cl1 = cos($lat1);
$cl2 = cos($lat2);
$sl1 = sin($lat1);
$sl2 = sin($lat2);
$delta = $long2 - $long1;
$cdelta = cos($delta);
$sdelta = sin($delta);

// вычисления длины большого круга
$y = sqrt(pow($cl2 * $sdelta, 2) + pow($cl1 * $sl2 - $sl1 * $cl2 * $cdelta, 2));
$x = $sl1 * $sl2 + $cl1 * $cl2 * $cdelta;

//
$ad = atan2($y, $x);
$dist = $ad * EARTH_RADIUS;

return $dist;
}

Обновление свойств инфоблока

29.04.2014 Bitrix

Строка, привязка к файлу на сервере

$value = "Строка";
$value = array("Строка", "Строка 2");
$value = array(
				array("VALUE"=>"Строка", "DESCRIPTION"=>"Описание строки"),
				array("VALUE"=>"Строка 2", "DESCRIPTION"=>"Описание строки 2")
			);
[/php]

Число, привязка к элементам, привязка к разделам, привязка к пользователю

$value = 1;
$value = array(1, 2);
$value = array(
				array("VALUE"=>1, "DESCRIPTION"=>"Описание"),
				array("VALUE"=>2, "DESCRIPTION"=>"Описание 2")
			);

Оригинал статьи тут http://alexvaleev.ru/iblock-prop-update/

Хороший шарнинг

25.04.2014 Bitrix

http://share.pluso.ru/

Обрезать PREVIEW_TEXT с html тегами

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

 preg_replace('/\s[^\s]+$/', '', substr(strip_tags($arItem["PREVIEW_TEXT"]), 0, 40)).'...';
$obParser = new CTextParser;
		if($arParams["PREVIEW_TRUNCATE_LEN"] > 0){
			$arItem["PREVIEW_TEXT"] = $obParser->html_cut($arItem["PREVIEW_TEXT"], $arParams["PREVIEW_TRUNCATE_LEN"]);	
		}

Bitrix постраничка для массива 2

17.12.2013 Bitrix ,

/* 
 component params
*/
"NEWS_COUNT" => "2",
"PAGER_TITLE" => "", 
"PAGER_SHOW_ALWAYS" => "N", 
"PAGER_TEMPLATE" => "", 
"PAGER_DESC_NUMBERING" => "N", 
"PAGER_DESC_NUMBERING_CACHE_TIME" => "36000", 
"PAGER_SHOW_ALL" => "Y",


/* 
 component
*/
$rs = new CDBResult;
$rs->InitFromArray($arResult["ITEMS"]);
$rs->NavStart($arParams["NEWS_COUNT"]);

$arResult["NAV_STRING"] = $rs->GetPageNavStringEx($navComponentObject, $arParams["PAGER_TITLE"], $arParams["PAGER_TEMPLATE"], $arParams["PAGER_SHOW_ALWAYS"]);
$arResult["NAV_CACHED_DATA"] = $navComponentObject->GetTemplateCachedData();
$arResult["NAV_RESULT"] = $rs;

$arResult["ITEMS"] = array();
while($arSection = $rs->Fetch()){
 $arResult["ITEMS"][] = $arSection;
}


/*
 template
*/
<?if($arParams["DISPLAY_BOTTOM_PAGER"]):>
 <?=$arResult["NAV_STRING"]?>
<?endif;?>

Картинки

06.09.2013 Bitrix

$arImg = CFile::ResizeImageGet($arUser["PERSONAL_PHOTO"], array('width'=>125, 'height'=>125), BX_RESIZE_IMAGE_PROPORTIONAL, true);
	$fileInfo = CFile::GetFileArray($arrSction["PICTURE"]);		
	$arImg = CFile::ResizeImageGet($fileInfo , array('width'=>300, 'height'=>180), BX_RESIZE_IMAGE_PROPORTIONAL, true);
	if($arImg['src']){
		$fileInfo['SRC'] = $arImg['src'];
		$fileInfo['HEIGHT'] = $arImg['height'];
		$fileInfo['WIDTH'] = $arImg['width'];
		$arrSction['PICTURE'] = $fileInfo;
	}else{
		$arrSction['PICTURE'] = $fileInfo;		
	}