Сафарли Ельчин, цитаты из книг

28 июля 2015, 22:36

***
Мчащиеся мимо такси, пугливые дворняги, порванные страницы вчерашних газет. Я — тень на фоне спящего города. Пустые улицы, которые через считанные часы накроет волной суетливых людей. Я наблюдаю за временем вокруг себя и понимаю, что, наконец, нашел свой смысл. Ни от кого никогда раньше я не получал внятного ответа о смысле — только заезженные фразы вроде «в любви, конечно, в чем же еще.

***
Так много хочется тебе рассказать, так многим поделиться... Но я не могу писать — это не то. Когда я приеду в твой маленький город беззвучного ветра, я буду тебе рассказывать. С самого начала и потом, каждую главу, до конца.

***
— Мне обидно, что мы часто забываем о настоящем. Я же помню, как не раз, когда мне было сложно, ты, не бросаясь словами, сжимал мне руку. Давал понять, что ты рядом. Помню, как мы долго молчали, не из-за того, что не о чем было говорить... Так хорошо понимали состояния друг друга, что не могли передать их словами. Вот это и есть настоящее, которое легко утратить в толпе. Люди, я думаю, вообще не нуждаются в словах. Достаточно руки в руке и взглядов.

***
Мы способны стремительно распрощаться с любой из вредных привычек — бросить курить, отказаться от спиртного, перестать объедаться сладким перед сном. Но есть такие вещи, не поддающиеся силе воли. Забыть или разлюбить, к примеру. Все, что рождается в сердце, навсегда в нем остается.

***
Отныне я ничего больше не раскрашиваю — принял все, как есть, как было и как должно было быть. С нами случилось время, с нами случилась жизнь, это то, чему еще никто не смог противостоять. Нет, я не смирился с этой разлукой. Просто должен идти дальше, пока не знаю куда, но должен идти. Ведь дорога возникает под шагами идущего.

***
Мы ждем любовь про себя, в тихой заводи своего одиночества, не осознавая, что обманываемся. Что долгожданный стук в дверь не прозвучит, а на пороге не появится спаситель с храбрым сердцем. Это все в книжках, это все в голливудском кино. Там все красиво — жизнь быстрее, чем наша, люди более подтянутые и крепкие, чем мы, декорации новее и дороже, чем те, что окружают нас.

А в настоящей жизни? Красиво иначе, больно иначе. И это совсем не плохо, может, даже хорошо. Мы плачем иначе — солеными и настоящими слезами. Зато у нас есть право на выбор сюжета: мы играем жизнь так, как хотим, и нам не кричат в рупор, требуя повторить в десятый раз дубль. Мы же сами режиссеры своих судеб. Может, истинное счастье в этой свободе?

***
— Я так устал искать все заново...

***
Для чего возвращаться в прошлое, если все равно не заберешь тех, кто там остался?

***
Я верю в отношения, не верю в брак. Мне не по душе торжественная волокита с документами, штампами, подписями своими и подписями свидетелей. Как зафиксировать то, что рождается вне, а зачастую и против законов мира? Моя бабушка говорила, что брак — это общий дом, фундаментом которого обязательно должна быть любовь. По мне, так сегодня брак — такой небоскреб, что его фундамент давно похоронил все хорошее.

***
С годами утрачивается легкость шагов. Не принимая в расчет, что нельзя стать победителем, не научившись проигрывать, — сотню раз измеряем, обдумываем, анализируем, что попросту вредит делу. А полезно напрочь забыть про „можно“ с „нельзя“, и безо всякой задней мысли радоваться чему-то простому, наслаждаясь вкусом жизни.

***
Не очень скучаю по большому городу. Зато не покидает ощущение того, что меня там кто-то ждет. Так всегда, когда находишься на расстоянии. Возвращаешься и понимаешь: все по-прежнему.

***
— Многоточие — это ведь приближающийся конец?
— Совсем нет, сынок.
— Но в нем большая доля сомнений...
— Неопределенности. А даже в самой туманной неопределенности есть надежда.

***
И я вспоминаю нас в бризе утраченного майского утра. Я проснулся от пристального взгляда. Приподнявшись на локте, она смотрела на меня с бесконечным ощущением жизни. В комнате пахло хвоей, остатками теплого рассвета. „У нас будет ребенок“.

***
Я на кухне с открытыми окнами, за ними — продрогший город. Грустит, кашляет. Большой город, в котором твои мечты сбываются у кого-то другого. Пусть. Давно не мечтаю. Я просто делаю шаги. То назад, то вперед.

***
В отношения с людьми мы любим раздавать роли. Требовать актеров строго следовать нашей трактовке. И сами при этом играем самозабвенно. Потом кто-то рано или поздно захочет хотя бы часок побыть собой, а не персонажем. И в этот миг все развалится.

Хорошая метафора нашей жизни

14 декабря 2013, 9:20

Несколько лет назад в Нью-Йорке была хорошая выставка. Фотоаппарат зарядили пленкой, поставили на автоспуск и сбросили с небоскреба. Он летел, вращаясь, и снимал то, что случайно попало в объектив, — окна, людей в окнах, стены, кусок неба. А потом разбился об асфальт. Фотоснимки, сделанные камерой в полете, и стали экспозицией. Мне кажется, что эта фотосессия — хорошая метафора нашей жизни. Нас никто не спрашивал, хотим ли мы рождаться. У этих ли родителей? В этой ли стране? В это ли время?

Нет. Нас просто сбросили с небоскреба — лети. И максимум, на что мы способны, — это сделать фотосессию интересной.

Дмитрий Чернышев — Как люди думают.

Определение города по ip-адресу для вывода в шаблонах 1С-Битрикс

5 июля 2013, 9:55

Иногда на сайтах требуется вывести какой-нибудь блок, сформированный уникально в зависимости от города посетителя. К примеру, если я нахожусь в Екатеринбурге, то в шапке сайта мне выводится телефон офиса в Екатеринбурге, если в Москве, то соответственно другой телефон.

Еще один пример который в последнее время часто используется на интернет-магазинах. В карточке товара выводится блок о доставке товара в город который определяется по ip адресу посетителя.

Итак, чтобы реализовать этот функционал в 1С-Битрикс на вашем сайте заходим по адресу /bitrix/php_interface и открываем файл init.php

Добавляем в него такие функции:

<?
function get_city_by_ip($ip){
  $data = file_get_contents_timeout("http://ipgeobase.ru:7020/geo?ip=".$ip);
  if($data){
    $xml = simplexml_load_string($data);
    return $xml->ip->city;
  }else{
    return "Москва";
  }
}

function file_get_contents_timeout($filename, $timeout=3)
{
  if(strpos($filename,"://")===false) return file_get_contents($filename);
  if(!function_exists("curl_init")) return false;
  $session=curl_init($filename);
  curl_setopt($session,CURLOPT_MUTE,true);
  curl_setopt($session,CURLOPT_RETURNTRANSFER,true);
  curl_setopt($session,CURLOPT_CONNECTTIMEOUT,$timeout);
  curl_setopt($session,CURLOPT_TIMEOUT,$timeout);
  curl_setopt($session,CURLOPT_USERAGENT,"Mozilla/5.0 (compatible)");
  $result=curl_exec($session);
  curl_close($session);
  return $result;
}
?>

Но правильнее будет добавить эти функции не в сам файл init.php, а подключить к нему другой файл, например functions.php и уже в него вставить эти функции.

Подключить файл functions.php можно используя в файле init.php такой код:

<?if (file_exists($_SERVER["DOCUMENT_ROOT"]."/bitrix/php_interface/include/functions.php"))
		require_once($_SERVER["DOCUMENT_ROOT"]."/bitrix/php_interface/include/functions.php");
?>

В данном случае я положил файл functions.php в папку /bitrix/php_interface/include/

Это более правильный подход, так как вы можете подключать множество файлов, которые добавляют различный функционал, к примеру обработчики событий могут лежать в файле events.php, а агенты в файле agents.php

Далее нам осталось вывести результат работы данных функций в любом месте на сайте где это требуется.
Я покажу на примере блока со скриншота.

<div class="order-info">
   <?$city = get_city_by_ip($_SERVER["REMOTE_ADDR"]);?>
   <?if($city=="Москва"){?>
   <p><strong>Бесплатная доставка по Москве!</strong></p>
   <?}else{?>
   <p><strong>Быстрая доставка в город <?=$city?>!</strong></p>
   <?}?>
</div>

Итак, если пользователь в Москве, то ему будет выведено сообщение «Бесплатная доставка по Москве!». Если определился любой другой город, то пользователь увидит сообщение «Быстрая доставка в город {НАЗВАНИЕ ГОРОДА}».

Надеюсь данная информация будет полезна.

Форма отправки данных с любыми полями на 1С-Битрикс «Старт»

24 марта 2013, 21:05

Сегодня расскажу как сделать форму обратной связи с любыми типами полей, используя стандартный функционал и почтовые события 1С-Битрикс. Особенно это актуально для редакции 1С-Битрикс «Старт», так как в ней нет модуля «веб-формы».

Сначала создаем обычную html форму в любом месте на сайте, где она нам нужна. Она может быть во всплывающем окошке или просто на странице сайта, не важно... Ее код может выглядеть примерно как в приведенном примере.

<form id="request-order-form" action="">
    <div>
         <h2>Форма заказа</h2>

        <div class="controls">
            <label>Имя</label>
            <div class="input"> <span class="required">*</span>

                <input type="text" id="form-user-name" />
            </div>
        </div>
        <div class="controls">
            <label>Телефон</label>
            <div class="input"> <span class="required">*</span>

                <input type="text" id="form-user-phone" />
            </div>
        </div>
        <div class="controls">
            <label>E-Mail</label>
            <div class="input"> <span class="required">*</span>

                <input type="text" id="form-user-email" />
            </div>
        </div>
        <div class="controls">
            <label>Комментарий</label>
            <textarea id="textarea" rows="3"></textarea>
        </div>
    </div>
    <div class="actions">
        <button type="submit" class="btn">Отправить</button>
    </div>
</form>

Важно задать стили или идентификаторы форме и элементам, так как необходимо будет обращаться к ним при помощи jQuery.

Далее идем в подключенный файл javascript или можно подключить отдельный файл javascript к шаблону сайта. Вставляем туда код javascript моего примера.

$(document).ready(function(){ 
	orderForm.validform();
});



var orderForm = {
	validform: function(){
        var errors = false;
		
		var regPhone = /^[\(\)\[\]\s\\\/\-0-9\+]{5,250}$/i;
		var regMail = /^([a-z0-9_\-]+\.)*[a-z0-9_\-]+@([a-z0-9][a-z0-9\-]*[a-z0-9]\.)+[a-z]{2,4}$/i;
		
        var highlight = function(type, field){
            switch (type) {
                case 'ok':
                    field.parent("div.input").removeClass("error");
                    break;
                case 'err':
                    field.parent("div.input").addClass("error");
					errors = true;
                    break;
            }
            if(errors){
                field.attr({error: 'yes'});
            }
        }
        // по нажатию submit
        $("#request-order-form button:submit").click(function(){
            $('[error]').removeAttr('error');
			
			var name = $('#request-order-form input#form-user-name');
            if (name.val().length > 1) {
               highlight('ok', name);
            } else {
                highlight('err', name);
            }
			
			var email = $('#request-order-form input#form-user-email');
			if (regMail.test(email.val())) {
               highlight('ok', email);
            } else {
                highlight('err', email);
            }
			
			var phone = $('#request-order-form input#form-user-phone');
			if (regPhone.test(phone.val())) {
               highlight('ok', phone);
            } else {
                highlight('err', phone);
            }	
			
            if (errors) {
                errors = false;
            } else {
				var text = $('#request-order-form textarea#textarea').val();
				
				function onAjaxSuccess(data) {
					alert("Спасибо, Ваш заказ успешно отправлен.");
				}
				$.post('/ajax.php', { 
					name:name.val(),
					email:email.val(),
					phone:phone.val(),
					text:text
				}, onAjaxSuccess);
            }
			return false;
        });
    },
}

Там идут различные проверки валидности заполения формы и формируются переменные из введенных данных для отправки ajax запроса на сервер. Можно создать сколько угодно разных полей в форме, прописать обработчики для них в javascript файле и назначить переменные для отправки ajax запроса.

Далее необходимо создать файл ajax.php в корне сайта, либо в любой другой дирректории. В моем примере, в коде javascript используется корневая дирректория. В этот файл необходимо прописать такой код:

<?
define("NO_KEEP_STATISTIC", true);
define("NOT_CHECK_PERMISSIONS", true);
require($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/prolog_before.php");
if($_SERVER['HTTP_X_REQUESTED_WITH'] == 'XMLHttpRequest') {
	$arSend = array(
		"NAME" => htmlspecialchars($_POST['name']),
		"EMAIL" => htmlspecialchars($_POST['email']),
		"PHONE" => htmlspecialchars($_POST['phone']),
		"TEXT" => htmlspecialchars($_POST['text']),
	);
	CEvent::Send('ORDER',SITE_ID,$arSend);
}
?>

Осталось создать тип события и шаблон отправки письма для него. В моем примере тип события имеет имя ORDER. Заходим в административную часть сайта на 1С-Битрикс, переходим по адресу: Настройки > настройки продукта > почтовые события > типы почтовых событий. Добавляем новый тип с названием которое прописали в файле ajax.php.

Теперь необходимо создать шаблон отправки для этого почтового события. Переходим по адресу Настройки > настройки продукта > почтовые события > почтовые шаблоны. Создаем новый шаблон для нашего почтового события. Переменные в тексте письма можно выводить используя названия заданные в файле ajax.php, в моем примере это будет выглядеть так:

Имя: #NAME#
Контактный телефон: #PHONE#
Контактный e-mail: #EMAIL#
Текст сообщения: #TEXT#

Вот и все, надеюсь кому-нибудь поможет.

1С-Битрикс: Выводим цену товара в компонент поиска по заголовкам

14 февраля 2013, 16:17

На одном из сайтов возникла необходимость выводить цену товара при вводе посетителем запроса в строку поиска. Постараюсь объяснить как ее решить.

Итак, нам нужно отредактировать шаблон вывода компонента search.title.
Копируем его и открываем на редактирование файл ajax.php

Примерно в 20-21 строчке кода ищем ячейку таблицы td class='title-search-item'
И сразу после ссылки вставляем следующий код:

Теперь осталось только оформить вывод цены стилями css и готово.

1C-Битрикс — назначаем класс тегу body в зависимости от раздела сайта

13 февраля 2013, 16:47

Вставляем вот такую функцию в шаблон сайта:

Я вставил в самый верх кода.

Далее к любому тегу применяем эту функцию. Я применил к тегу body, чтоб можно было менять оформление любого элемента на сайте в зависимости от раздела. Это нужно не для всех сайтов, но иногда возникает необходимость. К примеру для подмены фона сайта или изменения цвета каких-нибудь элементов.

Эта функция будет добавлять класс к тегу body с названием равным имени папки раздела сайта.
К примеру в разделе сайта http://site-name.ru/services/ тег body будет иметь класс services.

Подсчет и вывод количества элементов инфоблока в 1С-Битрикс

30 ноября 2012, 15:42

Иногда на сайте требуется вывести статистику, например сколько статей содержится в том или ином разделе сайта...

В 1С-Битрикс это можно сделать используя следующий код:

<?CModule::IncludeModule('iblock'); 
$arFilter = array( 
    'IBLOCK_ID' => 123, // ID инфоблока 
    // любые другие параметры, например 'ACTIVE' => 'Y' 
); 
$res = CIBlockElement::GetList(false, $arFilter, array('IBLOCK_ID')); 
if ($el = $res->Fetch()) 
    echo 'Записей: '.$el['CNT'];?>

Отличный ресайзер изображений для 1С-Битрикс

30 ноября 2012, 15:26

Модуль для изменения размеров изображений в шаблонах битрикса.

http://zebrus.ru/resizer/

С недавних пор начал использовать этот модуль в своих проектах, очень удобно.

После установки модуля в необходимые шаблоны нужно дописать перед переменной url изображения /resize/90x0x90x0x80

Возможные параметры: /resize/WxWRxHxHRxQ

W — Число пикселей. Указываем, когда необходимо масштабирование по ширине. от 10 до 2000
WR — Число пикселей. Оставить область в центре по горизонтали.
H — Число пикселей. Указываем, когда необходимо масштабирование по высоте. от 10 до 2000
HR — Число пикселей. Оставить область в центре по вертикали.
Q — Качество jpeg компрессии генерируемой превью. от 10 до 100. По умолчанию 80

Все параметры обязательно должны быть указаны! Если вам не нужно использовать какой либо параметр просто укажите его значение 0 (например: 100x0x0x0x0).

Конечно модуль не без недостатков. Например нет возможности накладывать водяные знаки на изображения, также нет возможности регулировать резкость. Еще он некорректно обрабатывает прозрачные png изображения, добавляя им черный фон. Надеюсь разработчики не забросят его и доработают, модуль хороший и нужный.

Генерация изображений любого размера в шаблонах вывода 1С-Битрикс

30 ноября 2012, 14:31

Генерация изображения произвольного разрешения из детальной картинки в шаблоне детального просмотра:

Добавляем следующий код в файл result_modifier.php (если этого файла нет, то создаем и кладем в папку шаблона):

<? if(is_array($arResult["DETAIL_PICTURE"]))
{
	$arFilter = '';
	$arFilter = array(array('name' => 'sharpen', 'precision' => 20), 
        array('name' => 'watermark','position' =>'br',
        'size'=>'real','type'=>'image','alpha_level'=>'70',
        'file'=>$_SERVER['DOCUMENT_ROOT'].'/include/watermark_white.png'));

	$arFileTmp = CFile::ResizeImageGet(
		$arResult['DETAIL_PICTURE'],
		array('width' => 762, 'height' => 465),
		BX_RESIZE_IMAGE_EXACT,
		true, $arFilter
	);

	$arResult['DETAIL_PICTURE_762'] = array(
		'SRC' => $arFileTmp['src'],
		'WIDTH' => $arFileTmp['width'],
		'HEIGHT' => $arFileTmp['height'],
	);
}?>

В данном случае применен фильтр резкости, и наложение водяного знака на изображение.

В $arResult формируется массив $arResult['DETAIL_PICTURE_762'].
Для вывода адреса изображения, вставляем в шаблон:
$arResult['DETAIL_PICTURE_762']['SRC']

Генерация изображений произвольного разрешения для множественного свойства типа «файл»

<? if (is_array($arResult['DISPLAY_PROPERTIES']['IMAGES']))
{

	foreach ($arResult['DISPLAY_PROPERTIES']['IMAGES']['FILE_VALUE'] as $key => $arFile)
	{
		$arFilter = '';
		$arFilter = array(array('name' => 'sharpen', 'precision' => 20), 
                array('name' => 'watermark','position' =>'br',       
                'size'=>'real','type'=>'image','alpha_level'=>'70',
                'file'=>$_SERVER['DOCUMENT_ROOT'].'/include/watermark_white.png'));
		$arFileTmp = CFile::ResizeImageGet(
			$arFile,
			array('width' => 762, 'height' => 465),
			BX_RESIZE_IMAGE_EXACT,
			true, $arFilter
		);

		$arFile['PREVIEW_WIDTH'] = $arFileTmp['width'];
		$arFile['PREVIEW_HEIGHT'] = $arFileTmp['height'];

		$arFile['SRC_PREVIEW'] = $arFileTmp['src'];
		$arResult['MORE_PHOTO'][$key] = $arFile;
	}
}
?>

Для вывода в шаблоне детального просмотра, вставляем код:

10 лучших сериалов, мой рейтинг

15 сентября 2012, 15:45

Люблю смотреть разные сериалы, и бывают периоды, когда смотрю из целыми днями и даже несколько одновременно. В этом посте решил поделиться мыслями о лучших сериалах из тех которые я смотрел.

Итак, пожалуй расставлю их следующим образом:

№1. Доктор Хаус (House M.D.)

Это лучший сериал из всех которые я когда-либо смотрел.
Доктор Грегори Хаус (Хью Лори) — выдающийся врач и злой гений, который не отличается проникновенностью в общении с больными и коллегами и с удовольствием избегает и тех, и других, однако при этом способен привести к успеху самые запутанные медицинские случаи.

№2. Остаться в живых (Lost)

Очень интересный сериал с неожиданным развитием сюжета. Ждал каждого нового сезона, хотелось наконец узнать все ответы и разгадать все загадки.
Авиалайнер совершал полет над Тихим океаном и рухнул на один из его островов. С этой минуты остаться в живых станет целью для 48 уцелевших пассажиров. В экстремальной ситуации человек открывается таким, каким его раньше никто не знал. Кажется, все оказываются в общей беде. Но кто-то паникует, а кто-то обнаруживает в себе качества лидера, чтобы повести оставшихся за собой.

№3. Декстер (Dexter)

Еще один обалденный сериал. На этот раз про маньяка-убийцу, который по совместительству еще и полицейский.
Я — Декстер. Декстер Морган. Я работаю судмедэкспертом в полиции Майами. Я не понимаю любви, мне безразличен секс, и у меня нет чувств. А еще я серийный убийца.

№4. Обмани меня (Lie to me)

Этот сериал мне чем-то напоминает Доктора Хауса, некоторые серии мне показались даже более интересными. Жаль что только 3 сезона, сериал закончен.
Талантливый психолог Кэл Лайтман (Тим Рот), глядя на мимику и жесты собеседника, может с легкостью сказать, лжет он или говорит правду. Лайтман всегда безошибочно определяет, что чувствует человек: страх, ревность, гнев или радость.

№5. Спартак: Кровь и Песок (Spartacus: Blood and Sand), Спартак: Боги Арены (Spartacus: Gods of the Arena), Спартак: Месть (Spartacus: Vengeance)

Вообще-то это три разных сериала, но они продолжают друг друга, можно считать, что это 3 сезона одного сериала. Жестокий сериал, много крови, снят потрясающе. Если не ошибаюсь, то в его создании принимали участия люди которые в свое время снимали сериалы «Удивительные странствия Геракла» и «Зена — Королева Воинов».

№6. Шерлок (Sherlock)

Короткий сериал, всего 2 сезона. В каждом сезоне всего по 3 серии, но они длинные, почти как полноценные фильмы. Сериал еще не закончен, думаю будет еще минимум 1 сезон.
Представляет собой современную историю приключений Шерлока Холмса. Несколько изменены и осовременены образы персонажей.

№7. Ходячие мертвецы (Walking Dead)

Сериал про зомби))) Случилась какая-то катастрофа, вирус уничтожил человечество, после смерти люди начали превращаться в зомби. Осталась небольшая группа выживших... Сериал о том как они пытаются жить в этом ужасном мире. На любителя, но мне нравится)

№8. Побег (Prison Break)

Отличный сериал, порой не мог остановиться и смотрел серию за серией... дни и ночи напролет...
Майкл убежден в невиновности брата, осужденного на казнь, и решает сам восстановить справедливость. Он намеренно совершает преступление, за которое попадает в ту самую тюрьму, где сидит брат. Ту самую, которую Майкл хорошо знает, потому что сам же ее и создавал, как инженер-строитель… План спасения гениально прост…

№9. Игра престолов (Game of Thrones)

Офигенный сериал: полностью выдуманный мир, свои цивилизации, государства, короли. Атмосфера чем-то напоминает трилогию «Властелин Колец».
К концу подходит время благоденствия, и лето, длившееся несколько десятилетий, угасает. Вокруг средоточия власти Семи королевств, Железного трона, зреет заговор, и в это непростое время король решает искать поддержки у друга юности Эддарда Старка (Шон Бин). В мире, где все — от короля до наемника — рвутся к власти, плетут интриги и готовы вонзить нож в спину, есть место и благородству, состраданию и любви.

№10. За Гранью (Fringe)

Интересный сериал о сверхъестественных явлениях и параллельных мирах.
Агент ФБР Оливия Данэм расследует гибель всех пассажиров авиарейса следующего из Гамбурга в Бостон. В ходе расследования ранен её напарник Джон Скотт. В отчаянии Оливия понимает, что ей может помочь доктор Уолтер Бишоп, который находится в психиатрической лечебнице. Поговорить с ним можно только при участии его сына Питера.

Ctrl +  Ранее