• Как получить значение переменной из одного класса в другой?

    AlexeyGfi
    @AlexeyGfi
    YouTube >>> Битриксоид из Колхоза
    Во-первых, у вас путаница в коде
    38663631d8e1456a9544977bd362537e.jpg
    .

    Во-вторых (по сути вопроса), исходя из очерёдности наступления событий:
    — сначала вызовется
    CEvent::Send( 'THANKS', $arrSite, $arSend );
    — потом наступит событие
    OnBeforeEventAdd
    — которое вызовет функцию
    OnBeforeEventAddHandler ( &$event, &$lid, &$arFields )

    При чём в этой ветке вызовов:
    &$event УЖЕ равно'THANKS' и значит его не нужно переопределять (а даже можно добавить проверку, чтобы не резались все почтовые события поголовно);
    &$arFields будет содержать ссылку на массив $arSend, в который вы и можете поместить нужную переменную. Использовать как вам нужно и почистить (или не чистить — поля, которых нет в почтовом шаблоне просто проигнорируются).

    В-третьих: что-то мне не нравится такая логика (либо не очевидно то, что вы пытаетесь сделать). Если $WORKEREMAIL задумано как одно из полей в письме, его нужно просто учесть в почтовом шаблоне и передать сразу в
    CEvent::Send( 'THANKS', $arrSite, $arSend ); без последующего перехвата.

    Сюда же: $arSend составлен неправильно. Тут должен быть массив ключ–значение.
    Ответ написан
  • Есть ли возможность вывода товаров с торговыми предложениями?

    AlexeyGfi
    @AlexeyGfi
    YouTube >>> Битриксоид из Колхоза
    Два экземпляра одного и того же компонента, но с разными шаблонами.
    В первом выводится список без товарных предложений и предоставляется выбор.
    Второй по фильтру отбирает конкретный товар с товарными предложениями, но в шаблоне отображаете только список предложений.
    Ответ написан
    Комментировать
  • Правильная настройка ЧПУ Битрикс?

    AlexeyGfi
    @AlexeyGfi
    YouTube >>> Битриксоид из Колхоза
    Через обработку адресов + настройку шаблонов ссылок непосредственно в инфоблоке.

    Обработка адресов:
    /bitrix/admin/urlrewrite_list.php
    + курс

    Шаблоны ссылок в инфоблоке:
    первый скриншот
    Ответ написан
  • Не выводится ни один компонент IncludeComponent в Битриксе: как починить?

    AlexeyGfi
    @AlexeyGfi
    YouTube >>> Битриксоид из Колхоза
    В каких файлах задается работа IncludeComponent?

    /bitrix/modules/main/*
    Конкретно —
    /bitrix/modules/main/classes/general/main.php

    лицензия истекла

    Желательно иметь точную сборку согласно версии, некоторые фичи могут быть несовместимы с ядром.

    Я написал бы в техподдержку.
    Ответ написан
    Комментировать
  • Показывает не ту кнопку на мобильных устройствах?

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

    Это могут быть стили и браузер, а может с бекенда приходит так.
    Можно подключить смартфон через USB и отладчиком chrome проинспектировать HTML-код.
    Если выдача разная — искать в компонентах, почему так.
    В этом случае идеальным будет xdebug "на лету" при просмотре сайта с устройства, а инспектированием на компьютере.
    Ответ написан
    Комментировать
  • Добавить поле "Ответ" в почтовый шаблон веб фомы?

    AlexeyGfi
    @AlexeyGfi
    YouTube >>> Битриксоид из Колхоза
    Отслеживаем почтовое событие и вклиниваемся в письмо
    Ответ написан
  • Как избавиться от дублей разделов в 1С-Битрикс?

    AlexeyGfi
    @AlexeyGfi
    YouTube >>> Битриксоид из Колхоза
    Насколько я понимаю, это будет ручное указание.
    Я бы:
    1. Завёл пользовательское свойство разделу, строка. Например UF_CANONICAL_TO.
    2. Прописал тем разделам, которые нужно «склеить», адрес канонической страницы в это свойство.
    3. В шаблоне компонента (в его папке, имеется в виду) создал component_epilog.php (чтобы кеш не перебивал мне добавление строки) и там проверял: если свойство установлено, прописывал каноникал.

    [+]
    Добавить свою строку в шапку изнутри:
    \Bitrix\Main\Page\Asset::getInstance()->addString( '<link rel="canonical" href="УРЛ" />' );


    [+]
    Чтобы «пробросить» arResult-параметры в component_epilog:
    в шаблоне компонента создаём result_modifier.php и внутри код:
    $cp = $this->__component; // объект компонента
    
    if (is_object($cp)) {
        $cp->SetResultCacheKeys( array_keys( $arResult ) );
    }
    Ответ написан
    Комментировать
  • Как подсветить каждый дублирующий "br"?

    AlexeyGfi
    @AlexeyGfi Автор вопроса
    YouTube >>> Битриксоид из Колхоза
    Неожиданно нашёлся теоретический ответ. Возможно в будущем можно будет применять этот способ.

    https://drafts.csswg.org/selectors-4/#has-pseudo
    Цитата примера:
    The following selector matches a <dt> element immediately followed by another <dt> element:
    dt:has(+ dt)
    Ответ написан
    Комментировать
  • Где менять заголовок блока новостей в Битриксе?

    AlexeyGfi
    @AlexeyGfi
    YouTube >>> Битриксоид из Колхоза
    Скорее всего используется кастомизированный шаблон, в нём и найти эту строку.
    Из неё станет понятно, как оно выводится.
    Ответ написан
    5 комментариев
  • 1c Bitrix - свойства товаров. Как поменять их местами в выводе в карточке товара?

    AlexeyGfi
    @AlexeyGfi
    YouTube >>> Битриксоид из Колхоза
    Ещё можно создавать свои наборы закладок и свойств в них.
    Группируя однотипные и одно-смысловые и скрывая то, что контент-менеджеру видеть не нужно.

    643ecbc0dc3d42348ab8dcd52dc48f14.png
    Ответ написан
    Комментировать
  • Как скрыть элемент раздела, не деактивируя его?

    AlexeyGfi
    @AlexeyGfi
    YouTube >>> Битриксоид из Колхоза
    Завести новое свойство элемента, например: hide_in_section_page

    Это свойство-флаг. Логика поведения: если оно не установлено — элемент показывается (там где вам нужно), если установлено — не показывается. Например, пускай это будет числовое поле. Если пустое или ноль == флаг не установлен, если единица — флаг установлен.

    На странице со списком элементов в настройках компонента прописываете, в какой переменной будет храниться дополнительный фильтр. В этой переменной передаётся массив, который будет склеен с фильтром, который передаётся в CIBlockElement::GetList.

    Пусть будет переменная, заданная в параметрах компонента по-умолчанию: arFilter.
    Перед вызовом компонента нужно инициализировать массив.

    Для нашего случая:
    $GLOBALS[ 'arFilter' ]= array(
    	'!PROPERTY_hide_in_section_page' => 1
    );
    Ответ написан
    Комментировать
  • 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

    Принимаем сигнал и начинаем отладку.
    Ответ написан
    Комментировать
  • Как закрепить вкладку мобильного браузера Chrome?

    AlexeyGfi
    @AlexeyGfi
    YouTube >>> Битриксоид из Колхоза
    >>> Видимо из-за скролла вверх-вниз. Вкладка то выезжает, то прячется. А речь скорее всего идёт по какой-то фиксд слой
    Антон Алексеевич: совершенно верно; может, Вы знаете, как можно это решить?

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

    Соответственно, нужно сделать так, чтобы при открытии Слоя содержимое документа... перестало иметь скролл (так вот косноязычно) — например переключалось на overflow: hidden, а Слой соответственно перехватывал скролл и не пропускал его дальше, если пользователь доскроллил и упёрся вниз/вверх содержимого.

    Может пригодиться применение preventDefault через js, а можно выкрутиться и без него.
    https://learn.javascript.ru/default-browser-action
    Ответ написан
  • Битрикс.Как передать ссылку за пределы компонента?

    AlexeyGfi
    @AlexeyGfi
    YouTube >>> Битриксоид из Колхоза
    В настройках инфоблока шаблоны ссылок прописаны?
    Если на странице партнеров список акций выводится стандартным компонентом, в arResult список элементов должен содержать ссылки.
    Если вывод через API (старое), в выборке нужно указать Select поля DETAIL_PAGE_URL, а отбирать элементы через GetNext или GetNextElement.
    Ответ написан
  • Вывод описания каталога на определенной странице?

    AlexeyGfi
    @AlexeyGfi
    YouTube >>> Битриксоид из Колхоза
    Компонент bitrix.catalog.section
    или через API:
    https://dev.1c-bitrix.ru/api_help/iblock/classes/c...
    Ответ написан
    Комментировать
  • Переход из 1С в web-разработчики (PHP ) в 35 лет. С чего начать и реально ли?

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

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

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

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

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

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

    AlexeyGfi
    @AlexeyGfi
    YouTube >>> Битриксоид из Колхоза
    В настройках правил работы с корзиной чекбокс
    "Прекратить дальнейшее применение правил"
    Ответ написан
    Комментировать
  • Как задать свойства у элементов раздела в битриксе?

    AlexeyGfi
    @AlexeyGfi
    YouTube >>> Битриксоид из Колхоза
    В обсуждении, откуда взят скриншот, есть ссылка на разъяснение:
    https://dev.1c-bitrix.ru/community/blogs/product_f...

    Ключевой момент: работает только с торговыми каталогами.
    Ответ написан
    Комментировать