php скрипты

Замена изображений внутри 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;
 }
 
 

}

Многоуровневое меню 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>

Вывод размер в КБ, МБ, ГБ

29.01.2013 php, php скрипты No comments ,

function fSize($file){
    $file = $_SERVER['DOCUMENT_ROOT'].$file;
    $FZ = ($file && @is_file($file)) ? filesize($file) : NULL;
    $FS = array("B","kB","MB","GB","TB","PB","EB","ZB","YB");
    return number_format($FZ/pow(1024, $I=floor(log($FZ, 1024))), ($i >= 1) ? 2 : 0) . ' ' . $FS[$I];
}
function fSize($FZ){
    $FS = array("B","kB","MB","GB","TB","PB","EB","ZB","YB");
    return number_format($FZ/pow(1024, $I=floor(log($FZ, 1024))), ($i >= 1) ? 2 : 0) . ' ' . $FS[$I];
}

array_map_deep

25.01.2013 php, php скрипты 1 comment

Пробегает по все элементам массива

function array_map_deep($array, $callback) { 
    $new = array(); 
    foreach ($array as $key => $val) { 
        if (is_array($val)) { 
            $new[$key] = array_map_deep($val, $callback); 
        } else { 
            $new[$key] = call_user_func($callback, $val); 
        } 
    } 
    return $new; 
}

CSV Выгрузка

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

<?
require($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/prolog_before.php");

	CModule::IncludeModule("iblock");

		$handle = fopen("tb.csv", "r");
		$csv    = array();

		while ( !feof( $handle ) ) {

			$line  = fgets($handle);
			$data  = explode(";", $line);
			$csv[] = $data;

		}

		$rs = new CDBResult;
		$el = new CIBlockElement;

		$rs->InitFromArray($csv);
		$rs->NavStart(1);

		$naumberPageGet = $rs->NavNum;
		$thisPage       = $_GET["PAGEN_".$naumberPageGet];

		if( !isset( $_GET["PAGEN_".$naumberPageGet] ) ){

			$nextPge = "PAGEN_".$naumberPageGet."=2";

		}else{

			if($rs->NavPageCount > $thisPage){
				$thisPage+=1;
				$nextPge = "PAGEN_".$naumberPageGet."=".$thisPage;
			}

		}

		if($rs->IsNavPrint())
		{
			 echo "<p>"; $rs->NavPrint("Элементы"); echo "</p>";
		}

		####
		$clearArray = array();

		$el = new CIBlockElement;

		while($test = $rs->Fetch()){

			$PROP = array();
			$PROP['RATE_GROUP']     = $test[0];
			$PROP['SUM']            = $test[1];
			$PROP['COEFF_DAMAGE'][] = Array("VALUE" => $test[2],"DESCRIPTION" => "");
			$PROP['COEFF_DAMAGE'][] = Array("VALUE" => $test[3],"DESCRIPTION" => "");
			$PROP['COEFF_DAMAGE'][] = Array("VALUE" => $test[4],"DESCRIPTION" => "");
			$PROP['COEFF_DAMAGE'][] = Array("VALUE" => $test[5],"DESCRIPTION" => "");
			$PROP['COEFF_DAMAGE'][] = Array("VALUE" => $test[6],"DESCRIPTION" => "");
			$PROP['COEFF_DAMAGE'][] = Array("VALUE" => $test[7],"DESCRIPTION" => "");

			$arLoadProductArray     = Array(
				"MODIFIED_BY"       => $USER->GetID(), // элемент изменен текущим пользователем
				"IBLOCK_SECTION_ID" => false,          // элемент лежит в корне раздела
				"IBLOCK_ID"         => 34,
				"PROPERTY_VALUES"   => $PROP,
				"NAME"              => $test[0],
				"ACTIVE"            => "Y",            // активен
			);

			// if($PRODUCT_ID = $el->Add($arLoadProductArray))
				// itdbg("New ID: ".$PRODUCT_ID);
			// else
				// itdbg("Error: ".$el->LAST_ERROR,true);

			itdbg($arLoadProductArray,false,2);
			echo '<pre>';
			var_dump($arLoadProductArray);
			echo '</pre>';

		}
		###

		$nPage = $rs->NavPageNomer;

		if($thisPage == $nPage){
			itdbg('exi',true, 2);
		}
?>
		<script>
		function second_passed() {
			window.document.location.href = "<?=$APPLICATION->GetCurPageParam($nextPge, array("PAGEN_".$naumberPageGet,"MUS_IMPORT","MUS_TYPE_PROCEDURE")); ?>";
		}
		setTimeout(second_passed, 1000);
		</script>

BITRIX копирование ИБ

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


require($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/prolog_before.php");
CModule::IncludeModule("iblock");
    if(intval($_REQUEST["IBLOCK_ID_FIELDS"])>0){
        $bError = false;
        $IBLOCK_ID = intval($_REQUEST["IBLOCK_ID_FIELDS"]);
        $ib = new CIBlock;
        $arFields = CIBlock::GetArrayByID($IBLOCK_ID);
        $arFields["GROUP_ID"] = CIBlock::GetGroupPermissions($IBLOCK_ID);
        $arFields["NAME"] = $arFields["NAME"]."_new";
        unset($arFields["ID"]);
        if($_REQUEST["IBLOCK_TYPE_ID"]!="empty")
            $arFields["IBLOCK_TYPE_ID"]=$_REQUEST["IBLOCK_TYPE_ID"];
        $ID = $ib->Add($arFields);
            if(intval($ID)<=0)
                $bError = true;        
        if($_REQUEST["IBLOCK_ID_PROPS"]!="empty")
            $iblock_prop=intval($_REQUEST["IBLOCK_ID_PROPS"]);
        else
            $iblock_prop=$IBLOCK_ID;

        $iblock_prop_new = $ID;
        $ibp = new CIBlockProperty;
        $properties = CIBlockProperty::GetList(Array("sort"=>"asc", "name"=>"asc"), Array("ACTIVE"=>"Y", "IBLOCK_ID"=>$iblock_prop));
        while ($prop_fields = $properties->GetNext()){
            if($prop_fields["PROPERTY_TYPE"] == "L"){
                $property_enums = CIBlockPropertyEnum::GetList(Array("DEF"=>"DESC", "SORT"=>"ASC"), Array("IBLOCK_ID"=>$iblock_prop, "CODE"=>$prop_fields["CODE"]));
                while($enum_fields = $property_enums->GetNext()){
                    $prop_fields["VALUES"][] = Array(
                      "VALUE" => $enum_fields["VALUE"],
                      "DEF" => $enum_fields["DEF"],
                      "SORT" => $enum_fields["SORT"]
                    );
                }
            }
            $prop_fields["IBLOCK_ID"]=$iblock_prop_new;
            unset($prop_fields["ID"]);
            foreach($prop_fields as $k=>$v){
                if(!is_array($v))$prop_fields[$k]=trim($v);
                if($k{0}=='~') unset($prop_fields[$k]);
            }
            $PropID = $ibp->Add($prop_fields);
            if(intval($PropID)<=0)
                $bError = true;
        }
        if(!$bError && $IBLOCK_ID>0)
            LocalRedirect($APPLICATION->GetCurPageParam("success=Y",array("success","IBLOCK_ID_FIELDS")));
        else 
            LocalRedirect($APPLICATION->GetCurPageParam("error=Y",array("success","IBLOCK_ID_FIELDS")));
    }
    $str .='<form action='.$APPLICATION->GetCurPageParam().' method="post"><table>';    
    if($_REQUEST["success"]=="Y") $str .='<tr><td colspan="2"><font color="green">ИБ успешно скопирован</font><br/></td></tr>';
    elseif($_REQUEST["error"]=="Y") $str .='<tr><td colspan="2"><font color="red">Произошла ошибка</font><br/></td></tr>';
    $str .='<tr><td colspan="2"><b>Копируем мета данные ИБ в новый ИБ</b><br/></td></tr>';
    $res = CIBlock::GetList(Array(),Array(),true);
        while($ar_res = $res->Fetch())
            $arRes[]=$ar_res;
    $str .='<tr><td>Копируем ИБ:<br><select name="IBLOCK_ID_FIELDS">';
    foreach($arRes as $vRes)    
        $str .= '<option value='.$vRes['ID'].'>'.$vRes['NAME'].' ['.$vRes["ID"].']</option>';
    $str .='</select></td>';
    $str .='<td>Копируем в новый ИБ свойства другого ИБ: *<br><select name="IBLOCK_ID_PROPS">';
    $str .='<option value="empty">';
    foreach($arRes as $vRes)    
        $str .= '<option value='.$vRes['ID'].'>'.$vRes['NAME'].' ['.$vRes["ID"].']</option>';
    $str .='</select></td></tr>';
    $str .='<tr><td colspan="2">Копируем ИБ в тип:<br><select name="IBLOCK_TYPE_ID">';
    $str .='<option value="empty">';
    $db_iblock_type = CIBlockType::GetList();
    while($ar_iblock_type = $db_iblock_type->Fetch()){
       if($arIBType = CIBlockType::GetByIDLang($ar_iblock_type["ID"], LANG))
          $str .= '<option value='.$ar_iblock_type["ID"].'>'.htmlspecialcharsex($arIBType["NAME"])."</option>";
    }
    $str .='</select></td></tr>';
    $str .='<tr><td colspan="2"><br/>* если значение не указано мета данные ИБ секции "Свойства" берутся из ИБ первого поля</td></tr>';
    $str .='<tr><td colspan="2"><input type="submit" value="копируем"></td></tr>';
    $str .='</table></form>';    
    echo $str;

Регулярка для телефона

19.10.2012 php, php скрипты No comments

^((8|\+7)[\- ]?)?(\(?\d{3,5}\)?[\- ]?)?[\d\- ]{5,10}$

BITRIX 404

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

AddEventHandler("main", "OnEpilog", "Redirect404");
function Redirect404() {
	if(defined('ERROR_404')){
		@define("PATH_TO_404", "/404.php");
	}
	
    if(!defined('ADMIN_SECTION') &&  defined("ERROR_404") &&  defined("PATH_TO_404") &&  file_exists($_SERVER["DOCUMENT_ROOT"].PATH_TO_404))
	{
        //LocalRedirect("/404.php", "404 Not Found");
        global $APPLICATION;
        $APPLICATION->RestartBuffer();
        CHTTP::SetStatus("404 Not Found");
        include($_SERVER["DOCUMENT_ROOT"].SITE_TEMPLATE_PATH."/header.php");
        include($_SERVER["DOCUMENT_ROOT"].PATH_TO_404);
        include($_SERVER["DOCUMENT_ROOT"].SITE_TEMPLATE_PATH."/footer.php");
    }
}

Расчет по формуле php

26.09.2012 php, php скрипты No comments ,

Расчет по формуле php

function calculated_formula($elements_formula=array(), $formula='',$default=0){
	if(count($elements_formula)>0 && strlen($formula)>0){		
		$pattern = "/\[([A-Za-z_0-9]*?)\]/i";
		preg_match_all($pattern, $formula, $matches);
		foreach($matches[1] as $elemFormula){
			if(!isset($elements_formula[$elemFormula]) || empty($elements_formula[$elemFormula])){
				$elements_formula[$elemFormula] = $default;
			}
		}
		$replacement = "\$elements_formula$0";
		$result = preg_replace($pattern, $replacement, $formula);
		return eval("return $result;");
	}
}
$test['test1'] = '';
$test['test2'] = 3;
echo calculated_formula($test, '[test1]+[test2]+1',1);