Bitrix

при регистрации пользователя, есть птичка (подписаться на новости)

20.03.2013 Bitrix, php скрипты No comments , , , ,

при регистрации пользователя, есть птичка (подписаться на новости)

// Подписка на рассылку при регистрации

AddEventHandler("main", "OnAfterUserAdd", "OnAfterUserAddHandler");

function OnAfterUserAddHandler(&$arFields)
{

   $errors = Array();

   if($arFields["ID"]>0 && $arFields["UF_SUBSCRIBE"])
   {

      if(CModule::IncludeModule("subscribe")) {
      
         $USER_ID = $arFields["ID"];
         $EMAIL = $arFields["EMAIL"];
      
         $arFilter = array(
            "ACTIVE" => "Y",
            "LID" => "s1",
            "VISIBLE"=>"Y",
         );
      
         $rsRubrics = CRubric::GetList(array(), $arFilter);
         $arRubrics = array();
         while($arRubric = $rsRubrics->GetNext()) $arRubrics[] = $arRubric["ID"];
      
         $obSubscription = new CSubscription;
      
         $rsSubscription = $obSubscription->GetList(array(), array("USER_ID" => $USER_ID));
         $arSubscription = $rsSubscription->Fetch();
   
         if(is_array($arSubscription))
         {
            $rs = $obSubscription->Update(
               $arSubscription["ID"],
               array(
                  "FORMAT" => "html",
                  "RUB_ID" => $arRubrics,
               ),
               false
            );
         }
         else
         {
            $ID = $obSubscription->Add(array(
               "USER_ID" => $USER_ID,
               "ACTIVE" => "Y",
               "EMAIL" => $EMAIL,
               "FORMAT" => "html",
               "CONFIRMED" => "Y",
               "SEND_CONFIRM" => "N",
               "RUB_ID" => $arRubrics,
            ));
         }
      
      }
      
   }
   

}

Нарезка картинок для свойства FILE

17.03.2013 Bitrix, php скрипты No comments , ,

id свойства 31, свойство множественное

AddEventHandler("iblock", "OnBeforeIBlockElementAdd",	Array("MyClass",	"OnBeforeIBlockElementAddHandler"));
		class MyClass
		{
			// создаем обработчик события "OnAfterIBlockElementAdd"
			function OnBeforeIBlockElementAddHandler(&$arFields)
			{
				
				if($arFields["IBLOCK_ID"] == 14){
					// dbg($arFields,true);
					foreach($arFields[PROPERTY_VALUES][31] as &$file):
					   CAllFile::ResizeImage(
						 $file, 
						 array("width" => "200", "height" => "200"), 
						 BX_RESIZE_IMAGE_PROPORTIONAL);
					endforeach;
				}

			}
		}

Замена изображений внутри Detail_Text на show_image()

13.03.2013 Bitrix, php скрипты No comments ,

http://dev.1c-bitrix.ru/community/webdev/user/60622/blog/7049/

Доброго времени суток, уважаемое сообщество!!!

Поступила тут одна «хотелка» от клиента. спешу поделиться

Итак: есть сайт, на котором публикуется (точнее пока что планируется к публикации) огромное количество статей. В этих статьях по тексту контент-менеджеры могут накидывать какие-то изображения, поясняющие текст. НО! заниматься подгонкой изображений к читабельному виду для такого количества статей им то ли лень, то ли денег жалко … и захотел клиент, чтобы все-таки изображения ужимались. причем, ужимались сервером, а не браузером клиента.

И вот родилась идея:

в компоненте детального вывода статьи в файле result_modifier создаею обработчик:

<?if(!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED!==true)die(); 
$pattern="/<img[^>]+src=(\"|')(.+?)(\"|')[^>]*>/si"; 
preg_match_all($pattern,$arResult["DETAIL_TEXT"],$matches); 
$startfloat="right"; 
$arResult["DETAIL_TEXT"]=str_replace(SITE_SERVER_NAME,"",$arResult["DETAIL_TEXT"]); 
$arResult["DETAIL_TEXT"]=str_replace(str_replace("http://","http://www.",SITE_SERVER_NAME),"",$arResult["DETAIL_TEXT"]); 
foreach ($matches[0] as $k=>$image) { 
    $imgSrc='<а  class="fancy" href="'.$matches[2][$k].'" >'; 
    $imgSrc.=CFile::ShowImage($matches[2][$k], 300, 300, "style='float:".$startfloat.";margin:5px;'", "", false); 
    $imgSrc.="</а>"; 
    $arResult["DETAIL_TEXT"]=str_replace($image,$imgSrc,$arResult["DETAIL_TEXT"]); 
    if($startfloat=="right") $startfloat="left"; else $startfloat="right"; 
} 
?> 

в итоге, все изображения ужимаются в 300 на 300, а если кто хочет — в fancybox (если конечно к вашему сайту подключена данная библиотека) может посмотреть в полном размере…

Быстрая регистрация пользователя

21.02.2013 Bitrix, php скрипты No comments ,

function simpleRegister($strMail){

 global $APPLICATION, $USER, $DB;
 
 // стандартная процедура регистрации пользователя
 $bConfirmReq = COption::GetOptionString("main", "new_user_registration_email_confirmation", "N") == "Y";

 $arUser["PASSWORD"]     = randString(music);
 $arUser["LOGIN"]           = $strMail;
 $arUser["EMAIL"]           = $strMail;
 $arUser["LAST_NAME"]       = '';
 $arUser["SECOND_NAME"]     = '';
 $arUser["PERSONAL_PHONE"]  = '';
 $arUser["NAME"]            = '';  
 $arUser["CHECKWORD"]       = randString(music);
 $arUser["~CHECKWORD_TIME"] = $DB->CurrentTimeFunction();
 $arUser["ACTIVE"]          = $bConfirmReq? "N": "Y";
 $arUser["CONFIRM_CODE"]    = $bConfirmReq? randString(music): "";
 $arUser["LID"]             = SITE_ID;
 $arUser["USER_IP"]         = $_SERVER["REMOTE_ADDR"];
 $arUser["USER_HOST"]       = @gethostbyaddr($REMOTE_ADDR);
   
 if($arUser["AUTO_TIME_ZONE"] <> "Y" && $arUser["AUTO_TIME_ZONE"] <> "N")
  $arUser["AUTO_TIME_ZONE"] = "";

 $def_group = COption::GetOptionString("main", "new_user_registration_def_group", "");
 if($def_group != "")
  $arUser["GROUP_ID"] = explode(",", $def_group);

 $bOk = true;

 $GLOBALS["USER_FIELD_MANAGER"]->EditFormAddFields("USER", $arUser);

 $events = GetModuleEvents("main", "OnBeforeUserRegister");
 while($arEvent = $events->Fetch())
 {
  if(ExecuteModuleEventEx($arEvent, array(&$arUser)) === false)
  {
  if($err = $APPLICATION->GetException())
   $arErr[] = $err->GetString();
   $bOk = false;
   break;
  }
 }
   
 
 
 if ($bOk)
 {
  $user = new CUser();
  if($ID  = $user->Add($arUser)){
   //$USER->Authorize($ID);
   $event = new CEvent;
   $event->SendImmediate("USER_INVITE", SITE_ID, $arUser);
   if(COption::GetOptionString("main", "event_log_register", "N") === "Y")
    CEventLog::Log("SECURITY", "USER_REGISTER", "main", $ID);
  }  
  return true;
 }else{
  return false;
 }
 
 

}

Функа для проверки пользователя по эл. почте

21.02.2013 Bitrix No comments ,

function checkUserExist($strMail){

 $filter = Array("EMAIL" => $strMail);
 $rsUsers = CUser::GetList(($by="personal_country"), ($order="desc"), $filter); // выбираем пользователей  
 if($user = $rsUsers->GetNext()){
  return true;
 }else{
  return false;
 }

}

robots.txt для битрикса

21.02.2013 Bitrix No comments

User-agent: *
Disallow: /bitrix/
Disallow: /search/
Disallow: /auth/
Disallow: /auth.php
Disallow: /*/search/
Disallow: /*PAGE_NAME=search
Disallow: /*PAGE_NAME=user_post
Disallow: /*PAGE_NAME=detail_slide_show
Disallow: /*/slide_show/
Disallow: /*/gallery/*order=*
Disallow: /*?print=
Disallow: /*&print=
Disallow: /*register=yes
Disallow: /*forgot_password=yes
Disallow: /*change_password=yes
Disallow: /*login=yes
Disallow: /*logout=yes
Disallow: /*auth=yes
Disallow: /*action=ADD_TO_COMPARE_LIST
Disallow: /*action=DELETE_FROM_COMPARE_LIST
Disallow: /*action=ADD2BASKET
Disallow: /*action=BUY
Disallow: /*print_course=Y
Disallow: /*bitrix_*=
Disallow: /*backurl=*
Disallow: /*BACKURL=*
Disallow: /*back_url=*
Disallow: /*BACK_URL=*
Disallow: /*back_url_admin=*

Многоуровневое меню BITRIX

19.02.2013 Bitrix, php скрипты No comments ,

result_modifier.php

if (!function_exists("getChild")){
  function getChild ( $arInput = array(), $parentIndex = 0 ){
    if (!isSet($arInput[$parentIndex])) {
      return $arInput;
    } else {
      if ($arInput[$parentIndex]["IS_PARENT"]){
        $parentDepth = $arInput[$parentIndex]["DEPTH_LEVEL"];
        $index = $parentIndex+1;
        $child = array();
        while (isset($arInput[$index]) && $arInput[$index]["DEPTH_LEVEL"] > $parentDepth){
          $child[] = $arInput[$index];
          unSet($arInput[$index]);
          $index++;
        }
        unSet($index);
        $child = getChild($child);
        $arInput[$parentIndex]["CHILD"] = $child;
        unSet($child);
      }
      $result = array();
      foreach($arInput as $index=>$item){
        $result[] = $item;
      }
      $arInput = $result;
      unSet($result);
      return getChild($arInput, $parentIndex+1);
    }
  }
}

$arResult = getChild($arResult);

template.php

<?if (!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED!==true)die();?>

<?
$generateMenu = function ($arResult = array(), $depth = 1, $maxDepth = 4, $parentTitle = "") use (&$generateMenu){
    if ($depth > $maxDepth || $depth < 1) return false;
    if ($depth == 1){?>
    <ul class="header-navigation-list">
      <?
      foreach ($arResult as $index=>$arItem){
        if ($arItem["DEPTH_LEVEL"] == 1){
          $addClass = "";
          if (!isSet($arResult[$index-1])) {
            $addClass .= " first";
          } elseif (!isSet($arResult[$index+1])){
            $addClass .= " last";
          };
          if ($arItem["SELECTED"]){
            $addClass .= " selected";
          };
          ?>
          <li class="menu-inner<?=$addClass?>"><a href="<?=$arItem["LINK"]?>"><?=$arItem["TEXT"]?></a>
            <?if (isSet($arItem["CHILD"]) && ($depth+1<=$maxDepth))
                $generateMenu($arItem["CHILD"], $depth+1, $maxDepth, $arItem["TEXT"]);?>
          </li>
        <?
        }
      }?>
    </ul>
    <?
    } elseif ($depth == 2) {?>
      <div class="sub-menu-box">
        <div class="sub-menu-bottom-bg">
          <div class="sub-menu-inner">
            <?if (strpos($arResult[0]["LINK"], "services/")) {
              foreach ($arResult as $index=>$arItem){?>
                <div class="sub-menu-list-title">
                  <?=$arItem["TEXT"]?>
                </div>
                <?if (isSet($arItem["CHILD"]) && ($depth+1<=$maxDepth))
                  $generateMenu($arItem["CHILD"], $depth+1, $maxDepth, $arItem["TEXT"]);
              }
            } else {?>
              <div class="sub-menu-list-title"><?=$parentTitle;?></div>
                  <ul class="sub-menu-list">
                    <?foreach ($arResult as $index=>$arItem):?>
                      <li><a href="<?=$arItem["LINK"]?>"><?=$arItem["TEXT"]?></a>
                      <?if (isSet($arItem["CHILD"]) && ($depth+1<=$maxDepth))
                        $generateMenu($arItem["CHILD"], $depth+1, $maxDepth, $arItem["TEXT"]);?>
                      </li>
                    <?endforeach;?>
                  </ul>
            <?
            }
            ?>
          </div>
        </div>
      </div><?
    } else {?>
      <ul class="sub-menu-list">
        <?foreach ($arResult as $index=>$arItem):?>
          <li><a href="<?=$arItem["LINK"]?>"><?=$arItem["TEXT"]?></a>
          <?if (isSet($arItem["CHILD"]) && ($depth+1<=$maxDepth))
            $generateMenu($arItem["CHILD"], $depth+1, $maxDepth);?>
          </li>
        <?endforeach;?>
      </ul><?
    }
  }
?>

<div class="header-navigation-box">
<?if (!empty($arResult))
  $generateMenu($arResult, 1, $arParams["MAX_LEVEL"]);?>
</div>

Делает любой компонент ajax

19.02.2013 Bitrix, javascript No comments , ,

<?require($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/prolog_before.php");?>
<script type="text/javascript" src="/bitrix/js/main/ajax.js"></script>
<?$APPLICATION->IncludeComponent(
 "bitrix:form.result.new",
 "",
 Array(
  "AJAX_MODE" => "Y",  // режим AJAX
  "AJAX_OPTION_SHADOW" => "N", // затемнять область
  "AJAX_OPTION_JUMP" => "Y", // скроллить страницу до компонента
  "AJAX_OPTION_STYLE" => "Y", // подключать стили
  "AJAX_OPTION_HISTORY" => "N",
 ),
false
);?>
<?require($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/epilog_after.php");?>

Содержимое этого файла подключить через include или jQuery().load();

Формат цен BITRIX price

01.02.2013 Bitrix No comments , , ,

 $number = 123465789.45;
 $numbre_format_francais = number_format($number, 2, '.', ' ');  // 123 465 789.45

echo CurrencyFormat(11800.95, "USD");

CCurrencyLang::CurrencyFormat(5000, 'RUB'); // 5 000
CCurrencyLang::CurrencyFormat(5000, 'RUB', true); // 5 000 руб.

лови ссылочку, бро, тут больше инфы
http://dev.1c-bitrix.ru/api_help/currency/functions/currencyformat.php

Из result_modifier.php в component_epilog.php

10.01.2013 Bitrix No comments , ,

Для получения всех данных из шаблона в component_epilog.php

result_modifier.php

<?if(!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED!==true)die();

$cp = $this->__component; // объект компонента

if (is_object($cp))
{
   // добавим в arResult компонента два поля - MY_TITLE и IS_OBJECT
   $cp->arResult['arResult'] = $arResult;
   
   $cp->SetResultCacheKeys(array('arResult'));
   // сохраним их в копии arResult, с которой работает шаблон, если модуль main меньше 10.0
   if (!isset($arResult['arResult']))
   {
      $arResult['arResult'] = $cp->arResult['arResult'];
   }
}?>

component_epilog.php

$arResult = $this->arResult['arResult'];