Использование 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

Javascript inArray

04.06.2014 javascript

function inArray(needle, haystack) {
    var length = haystack.length;
    for(var i = 0; i < length; i++) {
        if(haystack[i] == needle) return true;
    }
    return false;
}

Бесконечный setTimeout();

31.05.2014 javascript

function resize(){
	alert(1)
	setTimeout(function(){resize()},1000);
}

подписать авторизованного пользователя 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"]
	)
);

Определение браузера js

29.05.2014 javascript No comments ,

var nVer = navigator.appVersion;
var nAgt = navigator.userAgent;
var browserName  = navigator.appName;
var fullVersion  = ''+parseFloat(navigator.appVersion); 
var majorVersion = parseInt(navigator.appVersion,10);
var nameOffset,verOffset,ix;

// In Opera, the true version is after "Opera" or after "Version"
if ((verOffset=nAgt.indexOf("Opera"))!=-1) {
 browserName = "Opera";
 fullVersion = nAgt.substring(verOffset+6);
 if ((verOffset=nAgt.indexOf("Version"))!=-1) 
   fullVersion = nAgt.substring(verOffset+8);
}
// In MSIE, the true version is after "MSIE" in userAgent
else if ((verOffset=nAgt.indexOf("MSIE"))!=-1) {
 browserName = "Microsoft Internet Explorer";
 fullVersion = nAgt.substring(verOffset+5);
}
// In Chrome, the true version is after "Chrome" 
else if ((verOffset=nAgt.indexOf("Chrome"))!=-1) {
 browserName = "Chrome";
 fullVersion = nAgt.substring(verOffset+7);
}
// In Safari, the true version is after "Safari" or after "Version" 
else if ((verOffset=nAgt.indexOf("Safari"))!=-1) {
 browserName = "Safari";
 fullVersion = nAgt.substring(verOffset+7);
 if ((verOffset=nAgt.indexOf("Version"))!=-1) 
   fullVersion = nAgt.substring(verOffset+8);
}
// In Firefox, the true version is after "Firefox" 
else if ((verOffset=nAgt.indexOf("Firefox"))!=-1) {
 browserName = "Firefox";
 fullVersion = nAgt.substring(verOffset+8);
}
// In most other browsers, "name/version" is at the end of userAgent 
else if ( (nameOffset=nAgt.lastIndexOf(' ')+1) < 
          (verOffset=nAgt.lastIndexOf('/')) ) 
{
 browserName = nAgt.substring(nameOffset,verOffset);
 fullVersion = nAgt.substring(verOffset+1);
 if (browserName.toLowerCase()==browserName.toUpperCase()) {
  browserName = navigator.appName;
 }
}
// trim the fullVersion string at semicolon/space if present
if ((ix=fullVersion.indexOf(";"))!=-1)
   fullVersion=fullVersion.substring(0,ix);
if ((ix=fullVersion.indexOf(" "))!=-1)
   fullVersion=fullVersion.substring(0,ix);

majorVersion = parseInt(''+fullVersion,10);
if (isNaN(majorVersion)) {
 fullVersion  = ''+parseFloat(navigator.appVersion); 
 majorVersion = parseInt(navigator.appVersion,10);
}

document.write(''
 +'Browser name  = '+browserName+'<br>'
 +'Full version  = '+fullVersion+'<br>'
 +'Major version = '+majorVersion+'<br>'
 +'navigator.appName = '+navigator.appName+'<br>'
 +'navigator.userAgent = '+navigator.userAgent+'<br>'
)

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

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;
}

Чистит строку: убирает спец символы из строки и конвертит в win1251

16.05.2014 php скрипты ,

if (!function_exists("yandex_text2xml"))
{
 function yandex_text2xml($text, $bHSC = false, $bDblQuote = false)
 {
  global $APPLICATION;

  $bHSC = (true == $bHSC ? true : false);
  $bDblQuote = (true == $bDblQuote ? true: false);

  if ($bHSC)
  {
   $text = htmlspecialcharsbx($text);
   if ($bDblQuote)
    $text = str_replace('&quot;', '"', $text);
  }
  $text = preg_replace("/[\x1-\x8\xB-\xC\xE-\x1F]/", "", $text);
  $text = str_replace("'", "&apos;", $text);
  $text = $APPLICATION->ConvertCharset($text, LANG_CHARSET, 'windows-1251');
  return $text;
 }
}

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

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/