Tag: Bitrix

Наложение водяного знака средствами битрикс

В Битрике есть возможность реализовать наложение водяного знака на изображения. Можно наносить как изображения, так и текст. Чтобы нанести водяной знак на фотографию достаточно передать параметры фильтра:

$arFilter_watermark = Array(Array('name' => 'watermark',   'position' => 'br', 'size'=>'real',   'type'=>'image',   'alpha_level'=>'10',   'file'=>$_SERVER['DOCUMENT_ROOT'].'/img/watermark.png',    ),);

Возможные значения параметров:
position — указание расположения водяного знака на изображении возможно в двух нотациях:
tl | tc | tr | ml | mc | mr | bl | bc | br
или
topleft | topcenter | topright | centerleft | center | centerright | bottomleft | bottomcenter | bottomright

size — big | medium | small | real, для произвольного изменения масштаба возможно указание коэффициента через параметр ‘coefficient’, параметр ‘real’ применим только для изображений (‘type’=>’image’)
type — text | image
alpha_level — прозрачность от 0 до 100, где 0 = прозрачно, 100 = непрозрачно
text — текст водяного знака
font — путь к файлу с TTF-шрифтом
color — цвет в HEX-формате

Пример реализации:

$arFilters = Array(array("name" => "watermark", "position" => "right", "size"=>"real", 'type'=>'image', "file"=>$_SERVER['DOCUMENT_ROOT']."/images/watermark.png"));

Вместо /images/watermark.png подставляете свой путь к изображению водяного знака.

Далее при ресайзе изображения добавляете вывод фильтра $arFilters

$PICTURE = CFile::ResizeImageGet($arResult["PREVIEW_PICTURE"], Array('width'=>455, 'height'=>315), BX_RESIZE_IMAGE_EXACT, true, $arFilters);

Далее следует разместить код вывода нашего изображения с водяным знаком:

<img src="<?=$PICTURE["src"]?>" alt="<?=$arResult["NAME"]?>" title="<?=$arResult["NAME"]?>" />

Битрикс капча — bitrix CAPTCHA

Как подключить капчу в битриксе к своим скриптам? Да очень просто. Все расписано в документации. И так подключаем капчу битрикс в свой скрипт.

Сначала генерируем капчу:

include_once($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/classes/general/captcha.php");
$cpt = new CCaptcha();
$captchaPass = COption::GetOptionString("main", "captcha_password", "");
if(strlen($captchaPass) <= 0){
	$captchaPass = randString(10);
	COption::SetOptionString("main", "captcha_password", $captchaPass);
}
$cpt->SetCodeCrypt($captchaPass);

Легким движением выводим капчу:

<input name="captcha_code" value="<?=htmlspecialchars($cpt->GetCodeCrypt());?>" type="hidden">
<img src="/bitrix/tools/captcha.php?captcha_code=<?=htmlspecialchars($cpt->GetCodeCrypt());?>">
<input id="captcha_word" name="captcha_word" type="text">

Проверяем капчу на вшивость:

if($APPLICATION->CaptchaCheckCode($_POST["captcha_word"], $_POST["captcha_code"])){
    echo 'капча валидная';
}

Формирование меню из элементов инфоблока в Битрикс

Задача: сформировать левое меню на сайте работающем на битриксе из элементов информационного блока.

Решение: создаем файл .left.menu_ext.php в директории в котором должно выводиться меню и наполняем следующим кодом

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

global $APPLICATION;

if(CModule::IncludeModule("iblock")) {

    $IBLOCK_ID = 6; // указываем инфоблок с элементами

    $arOrder = Array("SORT"=>"DESC");
    $arSelect = Array("ID", "NAME", "IBLOCK_ID", "DETAIL_PAGE_URL");
    $arFilter = Array("IBLOCK_ID"=>$IBLOCK_ID, "ACTIVE"=>"Y");
    $res = CIBlockElement::GetList($arOrder, $arFilter, false, false, $arSelect);

    while($ob = $res->GetNextElement()) // наполняем массив меню пунктами меню
    {
        $arFields = $ob->GetFields();
        $aMenuLinksExt[] = Array(
            $arFields['NAME'],
            $arFields['DETAIL_PAGE_URL'],
            Array(),
            Array(),
            ""
        );
    }   
}

$aMenuLinks = array_merge($aMenuLinksExt, $aMenuLinks); // меню сформировано
?>

mbstring битрикс и jommla

Столкнулся с такой проблемой. Как известно для полноценной работы нужен

mbstring.func_overload 2
mbstring.internal_encoding UTF-8

Но в моем случае случилось так, что на хосте стоит несколько сайтов на джумле и при этих параметрах они просто выдают 500 ошибку. Проблему решил следующим образом: в хосте сайта на битрикса вписываем две строчки

php_admin_value mbstring.func_overload 2
php_admin_value mbstring.internal_encoding UTF-8

и все работает на УРА!!!

Права доступа bitrix на рабочем сервере.

Частая проблема прав доступа к файлам через админку битрикса и через фтп. При разворачивании битрикса права доступа устанавливаются для веб пользователя www-data, но через фтп доступ идет напривер через пользователя buser. Вот в этом то и проблема, через фтп редактировать файлы нет возвожности. Решаем эту проблему методом присвоения файлам и папкам нужные права.
find site.ru/ -type f -exec chmod 666 {} \;
find site.ru/ -type d -exec chmod 777 {} \;

Вот и все теперь редактировать файлы можно и через фтп

Резайл (Thumbnail) изображения в bitrix №2

Метод создает уменьшенную копию изображения sourcePath.

bool
CreateThumbnail( 
 string sourcePath,
 string previewPath,
 int maxWidth,
 int maxHeight
);
sourcePath Абсолютный путь к исходному изображению, для которого необходимо сделать уменьшенную копию.
previewPath Абсолютный путь к файлу, в который будет сохранена уменьшенная копия изображения.
maxWidth Максимальная ширина уменьшенного изображения.
maxHeight Максимальная высота уменьшенного изображения
<?
require($_SERVER["DOCUMENT_ROOT"]."/bitrix/header.php");
require_once($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/classes/general/wizard.php");

$success = CWizardUtil::CreateThumbnail($_SERVER["DOCUMENT_ROOT"]."/big.gif",$_SERVER["DOCUMENT_ROOT"]."/small.gif", 100, 100);

require($_SERVER["DOCUMENT_ROOT"]."/bitrix/footer.php");
?>

access denied: /bitrix/modules/main/admin/define.php

Вот пришли опять люди ко мне  с поисковиков по запросу «access denied: /bitrix/modules/main/admin/define.php»

Дорогие горе разработчики! Хватит вбивать в запросы «access denied: /bitrix/modules/main/admin/define.php» Мне кажется тут логично поставить права на запись в файл и все у Вас заработает.

Ресайз изображений Bitrix

Ресайз изображений Bitrix

Встала задача делать миниатурки из изображений загруженных в анонсе и изображений загруженных в дополнительное свойство PHOTO.
В этом нам поможет CFile::ResizeImageGet. Синтаксис у него таков

array CFile::ResizeImageGet(
    mixed file,
    array arSize,
    const resizeType = BX_RESIZE_IMAGE_PROPORTIONAL,
    bool bInitSizes = false
);

file — сомо изображение
arSize — массив с размерами для изображения
resizeType — тип масштабирования:
—— BX_RESIZE_IMAGE_EXACT — масштабирует в прямоугольник $arSize без сохранения пропорций
—— BX_RESIZE_IMAGE_PROPORTIONAL — масштабирует с сохранением пропорций, размер ограничивается $arSize
—— BX_RESIZE_IMAGE_PROPORTIONAL_ALT — масштабирует с сохранением пропорций, размер ограничивается $arSize, улучшенна обработка вертикальных картинок.

Пример работы на свойстве PHOTO

$e=CIBlockElement::GetProperty($arResult["IBLOCK_ID"],$arResult['ID'],array(),array("CODE"=>"PHOTO"));
while($xx=$e->Fetch())
{	if($x=CFile::GetFileArray($xx['VALUE']))
	{	$y=CFile::ResizeImageGet(
			$xx['VALUE'],
			array("width" => 150, "height" => 150),
			BX_RESIZE_IMAGE_EXACT,
			false
		);
		$k=$xx["DESCRIPTION"];
		echo'<a href="'.$x['SRC'].'"><img src="'.$y["src"].'" alt="'.$k.'" title="'.$k.'"/></a>';
	}
}

Привер на превьюшке из анонса

$renderImage = CFile::ResizeImageGet($arElement["PREVIEW_PICTURE"], Array("width" => 114, "height" => 114), BX_RESIZE_IMAGE_EXACT, false);
echo '<img title="'.$arElement["NAME"].'" alt="'.$arElement["NAME"].'" src="'.$renderImage["src"].'" />';