События

Подписка пользователя на рассылку при регистрации BITRIX

23.06.2014 Bitrix , ,

Нужно создать свойство checkbox UF_SUBSCR, вывести в форме регистрации и вставить этот код в init.php

AddEventHandler("main", "OnAfterUserUpdate", Array("EventHandlerClass", "OnAfterUserUpdateHandler"));
class EventHandlerClass
{
	function OnAfterUserUpdateHandler(&$arFields)
    {
		
		global $USER;
		 // условие атоподписки, если пользователь подтверждает регистрацию или если admin редактирует пользователя
		if(
			($arFields['RESULT'] && $_GET['confirm_user_id'] > 0 && $_GET['confirm_code'] && $_GET['confirm_user_id'] == $arFields['ID']) || 
			$USER->IsAdmin()
		){	
				// поиск польщователя
				$filter = Array(
					"ID" => $arFields['ID'],
				);
				
				// выбираем EMAIL и свойство UF_SUBSCR
				$rsUsers = CUser::GetList(
					($by="id"), 
					($order="desc"), 
					$filter,
					array(
						'FIELDS' => array('ID', 'EMAIL'),
						'SELECT' => array('UF_SUBSCR')
					)
				);
				if($usParam = $rsUsers->Fetch()){

					CModule::IncludeModule("subscribe");
					$subscr = new CSubscription;
					
					// если свойство заполнено то полписываем
					if($usParam['UF_SUBSCR']){
					
						// поиск подписчика по mail
						$subscription = CSubscription::GetByEmail($usParam['EMAIL']);
						
						if($arSub = $subscription->Fetch()){			
							// если майл есть в подписчиках, то активируем подписку
							$res = $subscr->Update($arSub['ID'], array(
								"ACTIVE"		=> "Y",
								"USER_ID"		=> $usParam['ID'],
								"RUB_ID"		=> array(G_SUBSCRIPTION),// id подписки
								)
							);
						
						}else{
							// если нет подписки, то добавляем его
							$arFieldFiltr = Array(
								"RUB_ID"		=> array(G_SUBSCRIPTION),// id подписки
								"USER_ID"		=> $usParam['ID'],
								"FORMAT"		=> "text",
								"EMAIL"			=> $usParam['EMAIL'],
								"ACTIVE"		=> "Y",
								"SEND_CONFIRM"	=> 'N'
							);
							$ID = $subscr->Add($arFieldFiltr);							
							// поиск подписчика по mail, что бы получить код потверждения
							$subscription = CSubscription::GetByEmail($usParam['EMAIL']);				
							if($arSub = $subscription->Fetch()){		
								$arResult['DATA_SUB_USSER']	= $arSub;
							}
							
							// подтверждаем подписку
							$res = $subscr->Update($ID, 
								array(
									"CONFIRMED"		=> "Y",
									"CONFIRM_CODE"	=> $arResult['DATA_SUB_USSER']["CONFIRM_CODE"]
								)
							);
							unset($arResult);
						}
					}else{
						// если при обновлении пользователя свойство пустое, то деактивируем подписчика 
						$subscription = CSubscription::GetByEmail($usParam['EMAIL']);
						if($arSub = $subscription->Fetch()){			
							// активируем подписку
							$res = $subscr->Update($arSub['ID'], array(
								"ACTIVE"		=> "N",
								)
							);						
						}					
					}
				}
			}
	}
}

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

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

			}
		}

Отложенные функции как в BITRIX

16.03.2013 php, php скрипты , ,

header.php

$GLOBALS['TITLE'] = ''; //тут будет храниться заголовок страницы
//тут мы пишем наш код всех нужных нам компонентов
function settitle ($title) {
	// global $GLOBALS['TITLE'];
	$GLOBALS['TITLE'] = $title;
}
function showtitle () {
	echo "{TITLE}"; //выводим временный костыль для автозамены буферизированного контента
}
ob_start();
echo "<html><head><title>";
showtitle (); //выводим заголовок страницы
echo "</title></head><body>";

index.php

<?include('header.php')?>
<?php
settitle("Пример  gfbfdg fdgdfgfdgотложенных функций"); //обратите снивание заголовок наш уже вывелся выше
//но он был временно буферизирован и не попал на страничку
?>
<?include('footer.php')?>

footer.php

$content=ob_get_clean();//получаем весь буфер и очищаем его
//а теперь самое интересное замена титла на последний установленній
$content=preg_replace("!{TITLE}!", $GLOBALS['TITLE'], $content);
//выводим буферизированный контент
echo $content;

Транслитерация и создание символьного кода свойства

25.10.2012 Bitrix No comments , , ,

AddEventHandler("iblock", "OnBeforeIBlockPropertyAdd", Array("IblockModifer", "OnBeforeIBlockPropertyAddHandler"));
AddEventHandler("iblock", "OnBeforeIBlockPropertyUpdate", Array("IblockModifer", "OnBeforeIBlockPropertyUpdateHandler"));

class IblockModifer
{
    public function OnBeforeIBlockPropertyAddHandler(&$arFields)
    {
        if($arFields['IBLOCK_ID'] == 10 and empty($arFields["CODE"])){
            $arParams = array("replace_space"=>"_","replace_other"=>"_", 'change_case' => 'U', 'max_len' => 20);
            $tempCode = Cutil::translit($arFields['NAME'],"ru",$arParams);
            $arFields['CODE'] = $tempCode;
        }
    }

    public function OnBeforeIBlockPropertyUpdateHandler(&$arFields)
    {
            if($arFields['IBLOCK_ID'] == 10 and empty($arFields["CODE"])){
            $arParams = array("replace_space"=>"_","replace_other"=>"_", 'change_case' => 'U', 'max_len' => 20);
            $tempCode = Cutil::translit($arFields['NAME'],"ru",$arParams);
            $arFields['CODE'] = $tempCode;
        }
    }
}

Вставка баннеров в закешированный контент

25.10.2012 Bitrix 2 комментария , ,

AddEventHandler("main", "OnEndBufferContent", "ShowBannerInsideNews");
function ShowBannerInsideNews(&$content){
	if (CModule::IncludeModule("advertising")){
		if (strpos($content, '#BANNER_INSIDE_INSTS_LIST#') !== false){
			$crop_content = explode('<span>#BANNER_INSIDE_INSTS_LIST#</span>',$content);
			$aEarsAdv = array();
			for($i=0,$j=1; $i<$j; $i++){
				$sAdv = CAdvBanner::GetRandom('insts_list');
				if(!empty($sAdv)){
					$AdvWeightSort[] = $sAdv['WEIGHT'];
					$AdvIdSort[] = $sAdv['ID'];
					$aEarsAdv[] = $sAdv;
					$j++;
				}
				else
					break;
			}

			array_multisort($AdvWeightSort,SORT_ASC,$AdvIdSort,SORT_ASC,$aEarsAdv);

			$content = null;
			foreach($crop_content as $croped_key=>$croped){
				$banner = CAdvBanner::GetHTML($aEarsAdv[$croped_key]);
				$content .= $croped.$banner;
			}
		}
	}
}