Йа—Бука

Блог ивановского веб мастера

Год спустя я узнал…

2 мая, 22:19

Ей богу, Битрикс занимательная штука.

Год назад, я увидел использование функции htmlspecialcharsbx и как-то подумал, мол нафига, есть же htmlspecialchars… Но, битрикс любит создавать доп. функции php на основе уже существующих. К примеру, htmlspecialcharsback. Чем htmlspecialchars_decode не угодил я пока не понял.

Так вот, год спустя я столкнулся на клиентском проекте с проблемой: перестала выводиться кирилица в нескольких кастомизированных другим разработчиком компонентах. Ну, понятно дело что кодировка чудит, но с чего вдруг…клиент божится что ничего не менял (хотя, видимо обновили версих php).
Сравнивая битриксовую версию компонентов с тем, что есть, заметил, что у битрикса сделано так:

$arResult['NAME']=htmlspecialcharsbx($arItem['NAME']);

а у моего предшественника так:

$arResult['NAME']=htmlspecialchars($arItem['NAME']);

Быстрый поиск показал, что в php версии 5.4+ у htmlspecialchars убрали 3й параметр, задающий кодировку, а у битрикса с этим бывают ой какие проблемы. Вот поэтому битрикс и ввели htmlspecialcharsbx. Поподробней можно почитать тут.

Ей богу, Битрикс занимательная штука.

Битрикс: просмотренные товары

27 марта, 15:14

Эх, помню ещё те времена, когда на фрилансе спокойно брал заказы на интернет магазы и особо не парился. Функционал минимален, люди обычно более менее знали что хотят, но, сейчас…
Я уже много раз писал, что битриксойды последние хм…n версий занимаются странным геморроем. По сути, развивают только функционал магазинов, забив на более младшие редакции. А там тоже есть что улучшать, да и добавлять. А уж появление бутстрапа везде где только можно, прям бесит. Половину функционала снова внесли в шаблоны, а не в код компонентов.

Так вот, пару месяцев назад, столкнулся я с хотелкой клиента: список просмотренных товаров нада сделать. Раньше, это делалось либо через сессию, либо через кукисы. Но, в битриксе вдруг этот функционал появился, поэтому решил, что всё должно быть просто и элегантно. Ага, хер там. Оказывается, что для работы просмотренных товаров, нужно не просто кинуть компонент catalog.viewed.products и включить настройку в компоненте карточки товара.
Нужно ещё и в шаблоне карточки товара включить код, который будет записывать, что товар просмотрен. Тогда, я нашел такое решение: в component_epilog.php прописать такой код:

use \Bitrix\Catalog\CatalogViewedProductTable as CatalogViewedProductTable;
CatalogViewedProductTable::refresh($arResult['ID'], CSaleBasket::GetBasketUserID());

правда тогда, вываливается ошибка «Class 'CSaleBasket' not found и бла бла бла». Решается оно подключением нужного модуля:

if (!CModule::IncludeModule('sale')) return;

Блиин, какое-то не красивое решение. Поискав ещё, нашел более красивое решение ИМХО. Через JS:

var viewedCounter = {
	path: '/bitrix/components/bitrix/catalog.element/ajax.php',
	params: {
		AJAX: 'Y',
		SITE_ID: '',
		PRODUCT_ID: 'ID элемента',
		PARENT_ID: 'ID элемента'
	}
};
BX.ready(
	BX.defer(function(){
		BX.ajax.post(
			viewedCounter.path,
			viewedCounter.params
		);
	})
);

Почему красивое? Аяксовый запрос идет стороной, и не влияет на скорость загрузки основного контента, а учитывая, что народ жалуется, что добавление/вывод просмотренных товаров на больших сайтах начинает тратить много ресурсов, то уж лучше аякс. C другой стороны, код придется пихать в шаблон компонента, т. е. js будет в коде сайта, а не в отдельном файле, что есть не тру =) Но, ИМХО это меньшее из зол.

Безопасность мать её

17 марта, 1:35

Сегодня узнал от Ильи Бирмана о том, что файл с конфигами блога был доступен через веб. Ахтунг однако.
В «Эгее» этот файл защищается через htacess, но т. к. у меня на сервере апач работает в связке с nginx`ом, то файл с расширением не php отдавался сразу nginx`ом, поэтому защита не работала. Добавил в конфиг nginx`а строчку

location ^~ /path/user			{ deny all; }

и вуаля ничего никому не отдаем.

Получаем описание инфоблока

10 марта, 10:49

SEOшники периодически просят сделать что бы в каталоге товаров в разделе кроме товаров, был бы некий текстовый блок. Решается это просто: Поле «Описание» раздела прекрасно с этим справляется. Но, вот в корне каталога такого поля нет и тут кто как извращается. Кто-то вставляет включаемую область, а кто-то извращается с описанием инфоблока. По хорошему, контент менеджеру/seoшнику давать доступ к этому описанию нельзя, мало ли что он там может сломать. С другой стороны, мало кто парится с правами доступа, да и бэкапы сейчас уже везде делаются каждый день.

Так вот, получить доступ к полям инфоблока можно так:

echo CIBlock::GetArrayByID($IBLOCK_ID,'DESCRIPTION');

Вместо «DESCRIPTION» можно подставить другие поля, к примеру, «NAME».

Ищу работку

9 марта, 18:09

Я тут ищу удалённую работку эм…вээб мастером. Умею верстать, знаю html5, css3, на среднем уровне знаю jQuery. Могу интегрировать всё это дело в Битрикс. Крутым программистом не являюсь, но, кое-что умею, да и 10ти летний опыт работы в сфере разработки есть.
Если кому понадобится, просьба писать на мыло belov@bitrix24.ru пришлю подробное резюме.

Использование своих стилей в визуальном редакторе Битрикс

4 марта, 20:26

Я уже писал давно про это, ещё когда была первая версия ЙО—Буки на самописке о том, что не люблю использовать визивиг редактор при подготовке постов. Исторически сложилось, что мне проще писать аштээмэль (блёё, как звучит то) код вручную. Кстати, по этой же причине я до сих пор не могу заставить себя начать пользоваться популярным бутстрапом. Ну, не дано мне понять классов типа col-md-4 или как там они выглядят. Хотя, признаю, когда сталкиваюсь с готовым проектом, который нада поправить на бутстрапе, очень удобно добавлять простые блоки.

Но, суть не о том. Появилась задачка сделать в «новом» визуальном редакторе битрикса возможность контентщику использовать свои стили. В «новом», потому что, я хз как называть тот, что был до этого, он как бы не старый, ведь были и до этого версии…но, суть думаю понятна. Да, это тот, что аля 21й век.
Ну, думаю, фигня ж добавляю из админки нужные стили, обновляю страницу с редактором и вижу фигу. Не понял…лезу на эсэфтипи (блёёё :-)), проверяю файлик «.styles.php» всё вроде бы так. ничего не понимаю:

Оказывается, новый чудо редактор не поддерживает старый формат «.styles.php» и теперь надобно передавать ему другой массив:

$arStyles = array(
'small' => array('title'=>'Сноски', 'tag'=>'p'),
'intro' => array(«title»=>'Интро', 'tag'=>'p'),
);
return $arStyles;

Несколько почтовых шаблонов в вебформах битрикса

4 марта, 20:14

Как-то так сложилось, что последнее время ничего нового не попадалось в работе. Ну, очередной лендинг, ну, там анимация какая-то, нашел скрипт, кастомизировал, красота. В сети сейчас есть ответы практически на все ответы для типовых сайтов. Это касается как вёрстки, так и кодинга, а уж про шаблоны я вообще молчу. Если раньше ты сидишь, ипешься вроде с простой задачей, проверяешь ту же вёрстку в 3-5 браузерах, материшься на ие6, то сейчас вообще пофиг. Проверил в хроме, фигак 90% что в остальных так же будет выглядеть. Никакого интереса.

Дык вот, сегодня столкнулся с задачей, которая меня малость озадачила: есть форма сделанная через модуль битрикса «Веб формы», есть почтовое событие , есть шаблон, письма уходят, всё ок. Но, заказчик хочет что бы не только админу приходило письмо, но и пользователю. Ну, фигня ж. Делаю ещё один шаблон, привязываю к почтовому событию…а оно не работает. Админу сообщение уходит, а моё — нифига. Перепроверяю всё. Вроде всё так:

Нифига не понимаю, ищу информацию и блёё, оказывается всё очень тупо. У модуля веб форм есть 2 режима «упрощенный» и эм…«продвинутый». И в упрощенном настройка уведомлений выглядит вот так:

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

нам дают выбрать какие почтовые шаблоны отрабатывать.
Где тут логика, я без понятия. Зачем делать «упрощенный» или эм «продвинутый» режимы я тоже не оч. понимаю, всё равно большинство контент манагёров всё равно отдаст настройку форм кодеру, ну или сис. админу =). А самое обидное, что вместо 5 минут потратил минут 15 времени, хоть и сталкивался с этим переключением режимов, правда немного в другой задаче, года 4 назад.

Параноидальная безопасность

1 марта, 21:59

Помнится пару лет назад я страдал «параноидальной безопасностью». Это когда пароли меняешь каждую неделю и от каждого чиха волосы дыбом встают. Но, это прошло, т. к. по сути, кулхацкера всё равно не остановить, а гемороя слишком много. Понятно, что защищаться нада, а лучше всего заранее думать о последствиях тех или иных своих действий. Сразу вспоминается истории про разводы на авито с смс паролями к операциям по сберовским картам.

Дык вот, битрикс рекомендует использовать в паролях к базе спецсимволы, типа «$?/!» и т. д., но, вот никто не подумал, что при восстановление сайта через их же restore.php и введении пароля к базе типа «d#$1J8skLoP» php у большинства хостеров заэкранирует обратным слешем знак $ как минимум и никакого сайта мы не увидим, а полезем в файлы, убирать в конфигах заэкранированные спец.символы, при этом, тот же знак «!» так же усложняет подбор пароля, но спокойно проходит настройки безопасности в php.

Но! Самое интересное в том, что обычно, mysql на 99% хостингов не дает по дефолту удаленного соединения с базой. Поэтому, взлом базы можно осуществить только залив скрипт на сервер. По крайней мере, как я понимаю проблему. Поэтому, куда логичней защищать всеми правдами и неправдами фтп, или админку, mysql тут не самая большая проблема, а учитывая что фтп это одна сплошная дыра на сервер, то о какой тут безопасности речь идет?

За последние полгода ко мне обращались 4 клиента со взломанными сайтами. 3е были на рег.ру, сайты взломаны через фтп, а оттуда уже был доступ куда угодно, правда видимо взлом был автоматический и инклудились файлы с рекламмой/вирусами, которая, кстати, не работала =). В 1м случае был взломан таймвеб и так же фтп, но там действовали целенаправленно: взлом фтп, залит скрипт авторизации под админом битрикса, и слита база покупателей и заказов (ИМ). Поэтому, повторюсь, если кому-то зачем-от сильно понадобится доступ к вашей информации, то ничего вас не спасет.

Кстати, хорошее и забавное видео в тему:

Вот жеж блин

1 марта, 21:23

Чёт фрилансовая жизь меня в край добивает. моск все медленней шевелится. каким-то боком в настройках эгеи убилась настройка уведомлений мне о новых комментах, извиняйте если чего пропустил.

Скорая, но, не помощь…

13 декабря 2015, 22:37

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

Случилась у меня очень…скажем так, неприятная ситуация: у дочери аутиста начались психозы. Если раньше это было очень редко (раз в год—два), то последние 2 недели у нас истерики случаются несколько раз в день. Мы с женой честно сказать к этому просто не были готовы, да и препараты, которые выписывает психиатр не рассчитаны на такие ситуации. Дык вот… В прошлую субботу, у дочери истерика, затянувшаяся на полтора часа. Психдиспансер, где мы наблюдаемся не работает в выходные, Богородское (местная дурка) не принимает «просто так» без бумажек. Выход в голове был один — звонить в скорую. Звоню, объясняю тетеньке на том конце провода ситуацию, она спросила только наблюдается ли ребенок у психиатра, остальные вопросы типовые: возраст, ФИО ребенка, мой номер и заверила что скорая выезжает, ждите. Ок, ждем.

Через минут 20-30 приехала обычная педиатрическая скорая, проводил врача с медсестрой в дом, объяснили ситуацию, на что они мне заявляют, мол: «А мы ничего сделать не можем». Оказывается, препаратов для детей с псих. растройствами у них нет, трогать они её вообще не имеют права, даже в дурку забрать не могут. Только после 16 лет… На мой вопрос: «а чего нам сейчас делать и нафига вы приехали тогда»? Ответ меня просто поразил: ждите понедельника, идите к психиатру, а мы не имеем права отклонить вызов, поэтому и приехали.
Т. е. было потрачено как минимум 30 минут времени бригады скорой, моего времени, просто ради разговора ни о чём! И это вместо того, что бы тетенька по телефону сразу мне сказала что ни чем они мне помочь не могут.

Хорошо, что через 10х знакомых нашел номер психиатра из диспансера, к которой мы иногда попадаем, когда наш врач в отпуске. Она порекомендовала препарат, который я и купил, вроде помог. Кстати, самое крутое, что препарат — нейролептик и продается только по рецепту врача. Правда в аптеке про это, видимо, не знают и продали мне его без всяких бумажек. Видимо, прибыль важней…

Ctrl + ↓ Ранее