Битрикс: фотогалерея 2.0
[info]mccim
Возникла необходимость подгружать в инфоблок фотографии группой.
В панели управления это сделать не получится, но можно воспользоваться соответствующим компонентом.
В свойствах компонента можно задать как размеры превьюшек так и самого фото.
Только вот обрабатываются эти размеры, в частности, для превью не совсем привычно.
Если в свойствах инфоблока можно задать ограничение либо по ширине либо по высоте фото, то в случае с компонентом задается один параметр ("THUMBS_SIZE" => "250"), а другой рассчитывается автоматически. Что это значит?
Берется большая сторона фото и ей присваивается это значение, другая автоматом получает пропорциональное значение. Следовательно если грузишь "горизонтальные" и "вертикальные" фото получается, что превьюшки при выводе не совсем красиво стоят, что уж говорить безобразно просто.
Я сначала полез в модуль, посмотрел скрипты, шаблоны, функции написанные с применением ООП, подумал может найти нужную функцию и переписать модуль. Только вот зачем? Пусть грузяться превьюшки с размеров 250 по большей стороне.
Их все равно можно вывести красиво.
Я делаю таким образом, чтобы у всех превьюшек высота была одинакова.
Например 100 px.


<?
require($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/prolog_before.php"); 
CModule::IncludeModule("iblock");
$gal = CIBlockElement::GetList(array('SORT'=>'DESC'),array('IBLOCK_ID'=>$IBLOCK_ID,'ACTIVE'=>'Y','SECTION_ID'=>$SECTION_ID),false,false,array());
while($img = $gal->GetNext()){
$rsFile=CFile::GetByID($img['PREVIEW_PICTURE']);
$arFile = $rsFile->Fetch();
$newwidth = intVal((100*($arFile['WIDTH']))/($arFile['HEIGHT'])); // функция intVal преобразует значение в целое число
echo '<img src="http://www.site.ru/upload/'.$arFile['SUBDIR'].'/'.$arFile['FILE_NAME'].'" width="'.$newwidth.'" height="100" />' ;
}
?>

  • Add to Memories

Иконка livejournal на сайте
[info]mccim
Если ваш сайт использует кодировку windows-1251, то могут возникнуть проблемы с передачей кириллических символов ЖЖ.
Чтобы этого избежать можно воспользоваться функцией php, iconv.

Выглядит это следующим образом.

<?
$ljtitle = iconv("windows-1251", "UTF-8", "А здесь заголовок который будет преобразовываться из кодировки window-1251в utf-8");
?>
<a
style = "text-decoration:none; "
rel = "nofollow"
href = "http://www.livejournal.com/update.bml?event=http://www.site.ru<?=$_SERVER['REQUEST_URI']?>&subject=<?=$ljtitle?>" target = "_blank"
title = "Опубликовать в своем блоге livejournal.com">
<img src = "/images/lj.jpg" alt = "Опубликовать в своем блоге livejournal.com" width = "92" height = "22"/> </a>

В качестве значения event не обязательно может выступать адрес, это может быть и текст. Тогда его также необходимо перевести в читабельный для ЖЖ вид с помощью этой же функции.
  • Add to Memories

Битрикс: Добавление данных веб-формы в инфоблок
[info]mccim
Иногда бывают задачи при которых необходимо, чтобы данные формы сохранялись в инфоблоке.
Например, если часть данных впоследствии планируется публиковать на сайте, то удобнее эти данные брать непосредственно из инфоблока.
Решить подобный вопрос при помощи визуальной работы с компонентами в ПУ битрикса не получится (по крайней мере мне об этом ничего не известно).
Однако, данная задача решается довольно просто при помощи php и встроенных функций битрикса.

К чему я это все?
Есть небольшие нюансы если у нас в форме присутствют такие поля как радио кнопки, выпадающий список, чекбокс, файл.
О них и пойдет речь.

В соответствующей папке на сервере создаем файл index.php 

<? require ( $_SERVER [ "DOCUMENT_ROOT" ]. "/bitrix/header.php" );
$APPLICATION -> SetTitle ( "Форма" );
CModule::IncludeModule ( "iblock" );

//Если в форме есть обязательные поля (а они скорее всего есть) формируем блок ошибок, которые сообщят пользователю про что он забыл.

$arErrors = array ();
if ( $_SERVER [ 'REQUEST_METHOD' ]== 'POST' ){
if ( empty ( $_REQUEST [ 'name' ])){ $arErrors [] = 'Не указано имя' ;
}


if ( empty ( $_REQUEST [ 'email' ])){
$arErrors [] = 'Не указан E-mail' ;
}


if (! preg_match ( '/^(([^<>()[\]\\.,;:\s@"\']+(\.[^<>()[\]\\.,;:\s@"\']+)*)|("[^"\']+"))@((\[\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\])|(([a-zA-Z\d\-]+\.)+[a-zA-Z]{2,}))$/' , $_REQUEST [ 'email' ]) && ! empty ( $_REQUEST [ 'email' ])){
$arErrors [] = 'Введите корректный E-mail' ;
}


if (! $APPLICATION -> CaptchaCheckCode ( $_POST [ "captcha_word" ], $_POST [ "captcha_sid" ])) {
$arErrors []= 'Неверный код CAPTCHA' ;
}


/*Если есть необходимость раскладывать элементы по папкам, используем следующий код.
Здесь
$NAME - переменная, по значению которой создается папка.
Необходимо предусмотреть дополнительно, чтобы значения данной переменной не повторялись.*/


if ( count ( $arErrors )== 0 ){ //если нет ошибок
$arFilter = Array ( 'IBLOCK_ID' => $IBLOCK_ID , 'ACTIVE' => 'Y' , 'NAME' => $NAME ]);
$db_list = CIBlockSection::GetList ( Array (), $arFilter , true );
$section = $db_list -> GetNext ();

if(empty($section['ID']))
{

$bs = new CIBlockSection;
$arFields = Array (
"ACTIVE" => 'Y' ,
"IBLOCK_SECTION_ID" => 0 ,
"IBLOCK_ID" => $IBLOCK_ID ,
"NAME" => $NAME
);
$SECTION_ID = $bs -> Add ( $arFields );
}

else
{
$SECTION_ID = $section [ 'ID' ];
}


//Создаем новый элемент
$el = new CIBlockElement;
$PROP = array ();
//определяем свойства
$PROP [ 'name' ] = $_REQUEST[ 'name' ];
//Если записываем в поле html/text, type может также принимать значение html
$PROP [ 'text' ] = array ( 'VALUE' => array ( 'TYPE' => 'text' , 'TEXT' => $_REQUEST [ 'text' ]));

//Если есть поле файл, тогда

$arIMAGE = $_FILES [ 'file' ];
$PROP [ 'file' ] = CFile::SaveFile ( $arIMAGE , "folder" ); //Указывается папка относительно папки upload

//Если чекбокс

$checkbox = array ();
$checkbox = $_REQUEST [ 'form_checkbox_nomik' ]; $PROP [ 'checkbox' ] = $checkbox ;

//Если радиокнопки
$PROP [ 'theother' ] = $_REQUEST [ 'theother' ];
$PROP [ 'radio' ] = $_REQUEST [ 'radio' ];

//Если выпадающий список
$PROP [ 'select' ] = $_REQUEST [ 'select' ];

//Далее данные из формы записываются в массив, с помощью которого мы и создандим элемент инфоблока $arLoadProductArray = Array (
"IBLOCK_SECTION" => $SECTION_ID , // элемент лежит в корне раздела
"IBLOCK_ID" => $IBLOCK_ID ,
"PROPERTY_VALUES" => $PROP ,
"NAME" => $_REQUEST [ 'fio' ],
"ACTIVE" => "Y"
);

//Можно также создать почтовое событие, которое будет информировать нас, что пользователь заполнил форму, например

if($infoblock = $el -> Add ( $arLoadProductArray )){ //Здесь и создается элемент инфоблока
$arEventFields = array (
'fio' => $_REQUEST [ 'fio' ],
'company' => $PROP [ 'company' ],
'email' => $PROP [ 'email' ],
'phone' => $_REQUEST [ 'phone' ]
);


CEvent::Send ( "FORM_NAME" , "site_name" , $arEventFields );
LocalRedirect ( 'ok.php' ); //сообщаем пользователю, что все прошло успешно
}
}
}


//Выводим ошибки, если они есть
if ( count ( $arErrors )> 0 )
{

echo '<ul>' ;
foreach ( $arErrors as $error ){
echo '<p style="color:red;font-weight:bold">- ' . $error . '</p>' ;
}

echo '</ul>' ;
}
?>


<form enctype = "multipart/form-data" action = "index.php?ID= <?= $_REQUEST [ 'ID' ]?> " method="POST">

<label> Чекбокс </label>

<input type = "checkbox" id = "255" name = "form_checkbox_name[]" id = "form_checkbox_name[]" value = "255" >
<label> Первый </label>


<input type = "checkbox" id = "256" name = "form_checkbox_name[]" id = "form_checkbox_name[]" value = "256" >
<label> Второй </label>
<input type = "checkbox" id = "257" name = "form_checkbox_name[]" id = "form_checkbox_name[]" value = "257" >
<label>Третий </label>
<!--

Обратите внимание на цифры, они взяты не случайным образом, а представляют собой id значения в инфоблоке (см. картинку ниже) 
Конечно можно сделать вызов свойств из инфблока как показано ниже с радио кнопками, кому как удобнее
-->


<label>Радио кнопки </label>
<?
/*На Javascript реализован простой пример как может появляться и скрываться дополнительное текстовое поле, если оно необходимо. На jQuery можно сделать элегантнее, это как вы сами решите*/

$res = CIBlockPropertyEnum::GetList ( Array ( 'SORT' => 'ASC' ), Array ( "IBLOCK_ID" => $IBLOCK_ID , "CODE" => "radio" ));
while ( $radio = $res -> GetNext ())
{
if ( $radio [ 'VALUE' ] != 'Другое' )
{
echo '<input type="radio" onclick="document.getElementById(\'fh\').style.display=\'none\';" name="radio" value="' . $radio [ 'ID' ] . '"> ' . $radio [ 'VALUE' ] . '<br/>' ;
}
else
{
echo '<input type="radio" onclick="document.getElementById(\'fh\').style.display=\'block\';"name="radio" value="' . $radio [ 'ID' ] . '"> ' . $radio [ 'VALUE' ]. '<br/> <input id="fh" style="display:none" class="tx_big" name="theother" value="' . $_REQUEST [ 'theother' ] . '" type="text" />' ;
}
}
?>


<label> Выпадающий список </label>
<select name = "select" >
<?
$res = CIBlockPropertyEnum::GetList ( Array ( 'SORT' => 'ASC' ), Array ( "IBLOCK_ID" => $IBLOCK_ID , "CODE" => "select" ));
while ( $select = $res -> GetNext ())
{
$selected = ( $select [ 'VALUE' ] == $_POST [ 'select' ]) ? ' selected="selected"' : '' ;
$selected = (! $_POST [ 'select' ] && $_SESSION [ 'USER_SELECT' ]== $select [ 'ID' ]) ? ' selected="selected"' : '' ;
echo '<option value="' . $select [ 'VALUE' ] . '"' . $selected . '>' . $select [ 'VALUE' ] . '</option>' ;
}
?>

</select>
</form>


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

На картинке показано, где находится id значения свойства 

  • Add to Memories

Разоблачение радаров
[info]mccim
  • Add to Memories

Замена антифриза Hyundai Verna
[info]mccim
1. В салоне установите регулятор температуры отопителя в максимальное положение.
2. Открывать крышку радиатора нужно при холодном двигателе иначе можно получить ожог.
Открывайте аккуратнее, у меня не пролить не получилось.



2. Залезаем под машину и находим сливную пробку зеленого цвета (от грязи она, конечно, не совсем зеленая).



Подставляем ведро, отворачиваем. У меня пробка упала в ведро, возможно вы окажетесь проворнее.



Ждем пока все вытечет.

3. Из бачка тоже нужно слить. Отворачиваем три болта.



Я просто поднял бачок вверх, отсоединив провода от прищепок. Из бачка все стекло, я даже крышку не открывал.





4. Не забываем закрутить сливную пробку перед тем как заливать новый антифриз.

4. Лично я считаю, что промывать систему при первой замене антифриза не нужно. Антифриз вылился чистый. Да и заливал я тот же самый антифриз. Mobil Extra, концентрат, цвет сине-зеленый, больше скорее зеленый. Развел концентрат дистиллированной водой в отношении 1:1.

5. Заливаем ОЖ в бачок до отметки "F". Заливаем ОЖ в радиатор до основания заливной горловины. Включаем двигатель. Ждем когда откроется термостат. Если честно я так и не понял где термостат и как он открывается. Я подождал пока прогреется двигатель. Количество ОЖ в радиаторе уменьшилось. Я выключил двигатель и долил ОЖ.

Готово!
  • Add to Memories

Замена масла Hyundai Verna
[info]mccim
Менял в выходные масло.
За 200р. договорился со сторожем ближайшего гаража, чтобы заехать на эстакаду.
Последовательность следующая:
1. Необходимо прогреть двигатель
2. Снимаем крышку маслозаливной горловины и лезем под машину.

Поддон выглядит так:



Синий цилиндр это масляный фильтр.

3. Отворачиваем сливную пробку ключом на 17 и сливаем масло. Рекомендую подвесить ведро на крючок.







4. Отворачиваем масляный фильтр. Я отвернул руками. В магазине предлагали ключ тройник за 500р., но я предпочел обойтись. На самом деле ключ для снятия фильтра стоит 50-100р., а не 500.
Когда отворачиваешь фильтр вытекает еще немного масла так что тоже не мешало бы подставить ведро.
Можно все на тот же крючок.



5. Смазываем чистым маслом новый фильтр,заворачиваем его.
6. Заворачиваем сливную пробку.
7. Заливаем масло на половину, ждем минут 10, доливаем еще.
Важно не перелить масла за отметку "F".
Будьте внимательны.
8. Греемся, выключаем двигатель, ждем 5 минут пока масло стечет в поддон и проверяем уровень.
9. При необходимости доливаем.

Готово!
  • Add to Memories

Огуречный блеф
[info]mccim
Утверждать ничего не буду, обвинять тоже.
Задам простой вопрос.
Кому выгодно, чтобы Европа была экономически слабой?
Любой мало-мальски грамотный агроном знает, что кишечная палочка сама по себе в овощи попасть не может.
Кто следующий?
  • Add to Memories

Недоступное будущее
[info]mccim
Смотрел сегодня с утра новости. В Бельгии запустили новый поезд на солнечных батареях, стоимостью 16 млн. евро. Данный состав даже в пасмурную погоду, имея мощность в два раза меньшую чем в солнечную, разгоняется до 300 км/ч.
В Бельгии 21 век, в России - жопа.
Один состав Сапсана стоил в два раза дороже без учета тех денег, которые в течение 30 лет наша страна заплатит за обслуживание. Получается, что поездов могло быть в два раза больше, но у нас не бывает крупных проектов с которых бы не пиздили деньги, наши деньги.
При этом покататься на Сапсане стоит как полетать на самолете. На безопасности по маршруту Сапсана тоже сэкономили, сколько людей уже погибло.
Слов нет, одни эмоции.
  • Add to Memories

You are viewing [info]mccim's journal