Оптимизирую работу сайтов и вывожу в зелёную зону Google PageSpeed.
Разрабатываю и обслуживаю сайты на Битрикс: "дописать", "допилить", "переделать", "разработать функционал".
Сайт с нуля – проектирование, дизайн, вёрстка, программирование, хостинг.

Если я возьмусь за работу, я доведу её до конца.
Если у меня нет возможности взяться за работу или я не могу её выполнить, я сразу об этом скажу и не буду морочить голову.
Я во фрилансе с декабря 2006 года (https://www.fl.ru/users/AlexeyGfi/) и ни один заказчик не может упрекнуть меня в том, что я недобросовестный или безответственный.
У меня в распоряжении личный сервер, который я арендую в Германии; все работы, требующие хостинга, я провожу у себя.
===
Ютуб: https://www.youtube.com/channel/UC-SdIyehZgex0nMBl...
Телеграм: https://t.me/bitrixoid_iz_kolhoza
===
Модули:
• Полноценные Комментарии D7;
• Ускоритель сайтов по Google Pagespeed.
marketplace.1c-bitrix.ru/partners/detail.php?ID=81...
Контакты

Достижения

Все достижения (4)

Наибольший вклад в теги

Все теги (30)

Лучшие ответы пользователя

Все ответы (133)
  • Переход из 1С в web-разработчики (PHP ) в 35 лет. С чего начать и реально ли?

    AlexeyGfi
    @AlexeyGfi
    YouTube >>> Битриксоид из Колхоза
    Больше 10 лет работаю под Битриксом. Мне очень нравится то, что в этой работе нужен целый стек знаний. Начиная от настройки апача и нжинкса (у меня свой сервер на Хетцнере) и до вёрстки. Прям прёт от кайфа.

    Этот год начал вникать в новое ядро (а там уже ORM), начал восполнять недостаток знаний. Ниточка за ниточкой... — просмотрев видео-курс по Ларавел понял, что моё мировоззрение дало трещину. Насколько там всё строго и по полочкам, в противовес анархии внутри Битрикса. Но у битрикса шикарное лицо. CMS прокачана так, что удобно как заказчику, так и обслуживающей команде. Вряд ли какая CMS сможет угнаться. Но внутренности... Мама дорогая. Хочется скрестить Ларавел и Битрикс (CMS).

    Есть надежда, что новое ядро привнесёт какую-то строгость, но, увы, Битриксы не культивируют "эко-культуру". То есть тренда быть стильным, правильным, структурным — нет. Порог входа опущен настолько, что можешь писать лапшой, можешь прикручивать свои шаблонизаторы. Вообще твори что хочешь. Битрикс ограничивается необязательными рекомендациями.

    Ища выход стремлению "хочу большего" завёл профиль на апворке и логично задумался: а что я могу предложить? То есть сначала была шальная мысль выходить на full-stack заказы c Битриксом, но, блин, после Ларавелл я уже не уверен. Если переходить (менять тех заказчиков, которые уже есть), то на солидный уровень (по задачам, в первую очередь). А для этого нужно понимание: к чему душа лежит (выбор технологии) и что востребовано (однозначно могу сказать, что буду копать Ларавел — уже и мини-проекты придумал; из фронт-энда буду пробовать пилить Вью, но пока что нет жёсткой мотивации: чистый css/js никто не отменял). А значит метод проб и ошибок. Пока не определился — держать ушки на макушке и анализировать входящий поток, не особо отвлекаясь от текущих дел, потому что так можно и загнуться (а на плечах семья, дети).

    Пытаясь понять, «как оно», — запустил и небольшой оффлайн бизнес с продажей через Интернет. Есть опыт запуска своих проектов и этот путь мне кажется наиболее перспективным для удовлетворения жизнью: сразу делаешь то, что легко согласовывать (с самим собой =), за ошибки платишь сам, можно делать неспеша (некоторые решения должны вызреть внутри), а можно упасть и прям не вставать пока не закончил — делаешь-то для себя, а это совсем другой настрой.

    Но чем хорошо (полезно) по-фрилансивать: остаёшься в курсе новинок, не оседаешь в своей тине и не разучиваешься шевелиться. По сабджу — держать нос по ветру, пробовать разные задачки, пока не придёт чёткое понимание.
    Ответ написан
  • С чего начать ребёнку программировать?

    AlexeyGfi
    @AlexeyGfi
    YouTube >>> Битриксоид из Колхоза
    Моему 10, задатки есть, но пару моих попыток не увенчались успехом. Я не наседаю, просто время от времени придумываю какой-то ход и пробую. Например выбирал простенькие примеры и на css+js показывал, что можно делать... В таком стиле, в общем.
    Что пошло: игровой движок Construct2, при чем он у меня в закладках лежал, пока сын не спросил, какие есть игровые движки.
    Разбирался сам по урокам, я буквально в нескольких моментах принимал участие.
    Сейчас у него заготовок 6-7. Небольшие работающие игровые кусочки.
    https://www.scirra.com/construct2
    Там в основном алгоритмы и события, но без прямого программирования.
    Ответ написан
  • Как отфильтровать каталог по значению поля типа highload?

    AlexeyGfi
    @AlexeyGfi
    YouTube >>> Битриксоид из Колхоза
    Выбирать нужно по XML_ID.
    Заглянем внутрь.

    База данных:
    79c8f320d8624c4c85f6b2a4fb177fea.png

    HL-блок. Я хз, почему оно названо одинаково (два поля ID). Его можно переименовать, но так делает система и нам сейчас важна стандартная комплектация):
    0b144c46bbb44baabfe89b2b88003335.png

    Ну и наш запрос:
    \Bitrix\Main\Loader::includeModule( 'highloadblock' );
    \Bitrix\Main\Loader::includeModule( 'iblock' );
    
    $el_Filter= [
            'IBLOCK_ID' => 5,
            'INCLUDE_SUBSECTIONS' => 'Y', 
            'PROPERTY_BRAND' => 46361
    ];
    
    $el_Nav= [ 'nTopCount' => 10 ];
    
    $el_Select= [ 'IBLOCK_ID', 'ID', 'NAME', 'PROPERTY_BRAND' ];
    
    $el_res= CIBlockElement::GetList( false, $el_Filter, false, $el_Nav, $el_Select );
    while ( $el_arr= $el_res->Fetch() ) {
    	...
    }
    Ответ написан
  • Eclipse PDT / PHPStorm — как настроить полноценные подсказки?

    AlexeyGfi
    @AlexeyGfi Автор вопроса
    YouTube >>> Битриксоид из Колхоза
    Сам спросил, сам отвечаю =)
    Мучил техподдержку, но разговор похож на теннис — перебрасывание мячика с поля на поле.

    Настроил отладку через xdebug и в вотчере всё увидел.
    Вот как это выглядит в дебагере:
    145d7304f9b846eabb6eb93c43ef0924.png

    ================ Удалённый дебаггинг (remote debug, xdebug) ================
    Инструкция (для тех, кто попадёт сюда с поиска).
    Что нужно для настройки дебаггинга удалённо (потому что, блин, пришлось поковыряться).
    Ниже даны секции по PHPStorm и Eclipse PDT.

    Дано:
    Компьютер №1:
    Windows + PhpStorm.

    Компьютер №2:
    Debian + Апач удалённо.

    Задача: организовать синхронный дебаггинг между компьютерами.

    Важно: шторм будет идти по шагам по вашему файлу, а "слушать" отчёт xdebug, который транслирует, идя по файлам на удалённом сервере.
    Поэтому файл, открытый в шторме, должен быть точной копией того, что выполняется на сервере.

    Шаги:
    1. На сервере устанавливаем xdebug, настраиваем php.ini
    6ff3e74f4c7747a196772da98976f737.png

    В нём я переменную xdebug.remote_enable отключил, потому что на шторм начинают сыпаться запросы со всех сайтов на сервере =)

    Эту переменную инициализировал через .htaccess именно в той директории, откуда провожу отладку:
    php_flag xdebug.remote_enable on

    (!) в рамках всего сайта:
    Чтобы работало так: для обычных пользователей дебаггинг отключен, а для вас стартует — в htaccess прописываем:
    <If "%{REMOTE_ADDR} == '137.126.15.14'">
    	php_flag xdebug.remote_enable on
    </If>

    ... где 137.126.15.14 — ваш IP адрес (аналог php-переменной $_SERVER[ 'REMOTE_ADDR' ])

    Можно htaccess настроить более тонко, чтобы админка не прерывалась в дебаг (или наоборот).
    Пример конфига (REQUEST_URI не захотело использовать, хз почему — в phpinfo() они определены):
    <If "%{REMOTE_ADDR} == '137.126.15.14' && ! %{THE_REQUEST} =~ m#/bitrix/#">
    	php_flag xdebug.remote_enable on
    	php_flag xdebug.remote_autostart on
    </If>


    Если на сервере / на сайте работают разные программисты, можно разделение дебаг-потоков сделать через трансляцию на разные порты в зависимости от пользователя (IP-адреса клиента):
    <If "%{REMOTE_ADDR} == '137.126.15.14' && ! %{THE_REQUEST} =~ m#/bitrix/#">
    	php_flag xdebug.remote_enable on
    	php_flag xdebug.remote_autostart on
    	php_value xdebug.remote_port 9013
    </If>

    ... соответственно, ориентируясь на IP и запрошенный урл, дебаггер транслирует информацию на определённый порт. Программисту остаётся правильно установить туннель.

    2. Пробрасываем SSH-туннель.
    Задача: сделать так, чтобы на порт 9007 компьютера №1 поступала информация, которая транслируется на порт 9002 компьютера №2.

    Исходя из формулировки, благодаря этому способу можно пробросить туннель, если порты отличаются.
    Например, вам достался сервер, на который у вас есть SSH-доступ, но нет возможности менять порт xdebug. Или локально порт занят и вам нужно какой-то нестандартный.
    То есть реально пробросить например туннель, который на порт 9007 компьютера №1 будет транслировать информацию с порта 9002 компьютера №2. Сервер пушит инфу на 9002, а вы на локальном компьютере слушаете порт 9007 .

    Сделал это через putty:
    ff4ab5092dce4326bca9914a4f7168fc.png

    ...как проверить?
    83cd6ae9cd5549269205de6191acade8.png

    ================ PHPStorm ================
    3. На компьютере ставим слушать порт 9007 (в моём случае):
    Меню File / Settings / Languages & Frameworks / PHP / Debug + кнопочка "Start Listening for PHP Debug Connections"
    7c5b067e84c34c3da9cebdb30d151742.png
    +
    916b5cee651c4283bbc48bf997528376.pngUPD: прослушка порта (вкл/выкл).

    Вот скриншот, которого очень не хватает во всех раскопаных туториалах:
    805110c8b3bb43a19192778aac36aac8.pngРезультат: когда шторм слушает порт и мы в обычном браузере открываем страницу, которая находится в разделе, пинаюшем xdebug.remote_enable, шторм перехватывает сигнал и ведёт его уже через свой дебаггер.
    Нужно только не забыть либо поставить breakpoint, либо опцию Break at first line in PHP script, иначе скрипт просто пролетит и даже не заметишь =)

    По поводу соответствия / несоответствия файлов локально и удалённо: если шторм замечает, что не может сопоставить файлы, он выдаст предупреждение и предложит настроить маппинг:
    7d2f592f1d0343759d9ab296a64c8c26.png

    ================ ECLIPSE PDT ================
    Настройка под Eclipse PDT.
    Шаги на сервере и туннеля остаются те же.

    Переходим в Windows / Preferences / PHP / Servers.

    Там создаём новый сервер:
    8390f852457e43afa51c56194fa26bfb.png

    Заходим в него снова и донастраиваем появившиеся вкладки:
    e3818d1a963541c4ae83e613151be318.png

    Ставим созданный сервер по-умолчанию:
    e76298e9b1ea445d9e7347ac853936e5.png

    Поставим ещё, чтобы дебаггер break-нулся с первой же строчки (потом можно отключить и использовать breakpoints):
    dc558e98f2e74b49b499799e7697c02e.png

    Когда убедимся, что всё работает, — рекомендуется проводить то же, но индивидуально для конкретного проекта: через Property проекта, либо через Debug Configuration:

    f96c1932cb334e39bea70d11952878f8.png

    Всё.
    Теперь, когда на порт 9007 поступит сигнал, Eclipse встрепенётся:
    6c181c46964248f59a57a1d08fcb16b6.png

    Принимаем сигнал и начинаем отладку.
    Ответ написан
  • Как в 1C Битрикс присвоить свои данные к пользователю?

    AlexeyGfi
    @AlexeyGfi
    YouTube >>> Битриксоид из Колхоза
    Вообще, если используется редакция с интернет-магазином и доставка груза основывается на конкретном заказе, у вас есть уже всё для формирования связки:
    заказ–служба доставки–трек-номер;
    заказ–покупатель–пользователь.

    Если нужно по какой-то причине пойти другим путём и всё-таки хранить привязку:
    Вариант 1: Завести пользовательское свойство пользователю, куда писать трек-номер;
    Вариант 2: Завести инфоблок или хайлоадблок, где хранить соответствия кода пользователя трек-номеру. Этот вариант продвинутее тем, что сопровождающие поля можно расширять (добавить дату занесения трек-номера, хранить лог, хранить комментарии или реакцию пользователя, статистику, ...)
    Ответ написан

Лучшие вопросы пользователя

Все вопросы (13)