img

Картинки

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

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

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

Оригинал статьи http://dev.1c-bitrix.ru/community/blogs/Docs_and_other/7222.php

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

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

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

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

в компоненте детального вывода статьи в файле 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 (если конечно к вашему сайту подключена данная библиотека) может посмотреть в полном размере…

P.S. Спасибо другу моему, Андрею — великому гуру веб-мира, за постоянную помощь с регулярными выражениями (да и не только), с которыми я все никак не подружусь

ДОБАВЛЕНИЕ ОТ 22.03: оставляем у изображений title и alt

текст файла result_modifier немного видоизменился:

<?if(!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED!==true)die();
$patternSRC="/[^>]+src=(\"|')(.+?)(\"|')[^>]*>/si";
$pattern2="/(alt|src|title)=(\"|')(.+?)(\"|')/si";
$pattern="/<img([^>]*)\/?>/si";
preg_match_all($pattern,$arResult["DETAIL_TEXT"],$matches);
$modifiedImages=array();
foreach($matches[1] as $k=>$image){
    preg_match_all($pattern2,$image,$Attrmatches);
    $attributes=array();
    foreach($Attrmatches[1] as $kT=>$Tmp){
     $attributes[$Tmp]=$Attrmatches[3][$kT];
    }
    $modifiedImages[$matches[0][$k]]=$attributes;
}
$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 ($modifiedImages as $image=>$attributes) {
    $imgSrc='<a  class="fancy" href="'.$attributes["src"].'" title="'.$attributes["title"].'" >';
    $imgSrc.=CFile::ShowImage($attributes["src"], 300, 300, "alt='".$attributes["alt"]."' title='".$attributes["title"]."'  style='float:".$startfloat.";margin: 5px;'", "", false);
    $imgSrc.="</a>";
    $arResult["DETAIL_TEXT"]=str_replace($image,$imgSrc,$arResult["DETAIL_TEXT"]);
    if($startfloat=="right") $startfloat="left"; else $startfloat="right";
}
?>

первым шагом выбираем все изображения из текста. А затем уже получаем все атрибуты для конкретного изображения и данные по изображению помещаем в массив.
А потом уже для каждого изображения делаем подмену в детальном тексте

Нарезка картинок для свойства 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 (если конечно к вашему сайту подключена данная библиотека) может посмотреть в полном размере…