Rose debug info
---------------

О веб-разработке

Изменить отправщика (от кого) почтовых уведомлений (писем) Битрикс событием (хуком, фильтром).

<?php

use Bitrix\Main;

$eventManager = Main\EventManager::getInstance();
$eventManager->addEventHandler('main', 'OnBeforeMailSend', static function (Main\Event $event) {
    $arMailParams = $event->getParameter(0);
    $arMailParams['HEADER']['FROM'] = 'no-reply@' . $_SERVER['SERVER_NAME'];

    $event->addResult(new Main\EventResult(Main\EventResult::SUCCESS, $arMailParams));
});

Битрикс. Как массово изменить получателей в почтовых шаблона

Пример кода, как можно массово изменить данные в почтовых шаблонах

require($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/prolog_before.php");

$list = CEventMessage::GetList($by="site_id", $order="desc", ["SITE_ID" => "s1"]);

while($template = $list ->GetNext())
{
    echo $template["EMAIL_TO"]." ".$template["BCC"]."<br>";
    $templateID = $template['ID'];

    $em = new CEventMessage;

    $arFields = Array(
        "EMAIL_FROM"    => "noreply@site.com",
        "EMAIL_TO"      => "info@site.ru, info2@site.com, site@yandex.ru",
        "BCC"           => ""
    );

    $res = $em->Update($templateID, $arFields);
}

Как показать сообщение клиенту 1 раз на JQUERY

Для того чтобы показать сообщение клиенту только один раз с использованием jQuery, вы можете использовать функцию localStorage для сохранения состояния и проверки, было ли сообщение уже показано.

Вот пример кода:

$(document).ready(function() {
  // Проверяем, было ли уже показано сообщение
  if (!localStorage.getItem('messageShown')) {
    // Если сообщение не было показано, показываем его
    alert('Привет, это сообщение будет показано только один раз!');
    
    // Сохраняем состояние в localStorage
    localStorage.setItem('messageShown', 'true');
  }
});

Этот код выполняется при загрузке страницы. Он проверяет значение в localStorage с ключом ’messageShown’. Если значение отсутствует (то есть сообщение еще не было показано), то код выводит сообщение с помощью alert() и сохраняет значение ’true’ в localStorage. Теперь при последующих загрузках страницы сообщение не будет показываться.

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

Битрикс АспроМакс своя форма Купить в 1 клик

  1. Копируем форму «Задать вопрос» в Сервисах.
  2. Редактируем поля и шаблон письма.
  3. Необходимо вмешательство в код самого решения Аспро \bitrix\modules\aspro.max\lib\functions\CAsproMax.php ищем функцию showItemOCB
  4. Меняем параметры у span на свой для вывода формы.
<span class="btn btn-transparent-border-color <?=$class;?> type_block transition_bg one_click"
        data-event="jqm" data-param-form_id="12" data-name="click">
	<span><?=\GetMessage('ONE_CLICK_BUY')?></span>
</span>

Где data-param-form_id — ID вашей формы

Поиск файлов по названию PHP

Неточный поиск (по наличию слова в названии):

<?php
	header("Content-Type: text/html; charset=utf-8");
	$path = $_SERVER["DOCUMENT_ROOT"];
	$directory = new \RecursiveDirectoryIterator($path);
	$iterator = new \RecursiveIteratorIterator($directory);

	foreach ($iterator as $info) {

		$name_file = substr($info->getfileName(), 0, strrpos($info->getfileName(), "."));
		$name_search = array("robots", "www_pandoge_com"); // Список файлов
		foreach($name_search as $key_name) {
			if(preg_match("/".$key_name."/", $name_file)) {		
				echo $info->getPathname()."<br>";
			}
		}
	}
?>
 Нет комментариев    87   10 мес   php

Битрикс. Создание профиля покупателя при регистрации пользователя

Задача следующая — при регистрации пользователя на сайте автоматически создавать профиль покупателя с данными, которые были указаны при регистрации. После этого пользователю не потребуется вводить какие-то дополнительные данные при оформлении заказа, которые, возможно, уже были введены в форме регистрации, т. е. у него сразу будет готовый профиль покупателя.

Задача решается написанием обработчика события OnAfterUserRegister:

<?
AddEventHandler("main", "OnAfterUserRegister", "OnBeforeUserRegisterHandler"); 

    function OnBeforeUserRegisterHandler(&$arFields)
    {
      //создаём профиль
      //PERSON_TYPE_ID - идентификатор типа плательщика, для которого создаётся профиль
      $arProfileFields = array(
         "NAME" => "Профиль покупателя (".$arFields['LOGIN'].')',
         "USER_ID" => $arFields['USER_ID'],
         "PERSON_TYPE_ID" => 1
      );
      $PROFILE_ID = CSaleOrderUserProps::Add($arProfileFields);
      
      //если профиль создан
      if ($PROFILE_ID)
      {
         //формируем массив свойств
         $PROPS=Array(
         array(
               "USER_PROPS_ID" => $PROFILE_ID,
               "ORDER_PROPS_ID" => 3,
               "NAME" => "Телефон",
               "VALUE" => $arFields['WORK_PHONE']
            ),
         array(
               "USER_PROPS_ID" => $PROFILE_ID,
               "ORDER_PROPS_ID" => 1,
               "NAME" => "Ф.И.О.",
               "VALUE" => $arFields['LAST_NAME'].' '.$arFields['NAME'].' '.$arFields['SECOND_NAME']
            )
         );
         //добавляем значения свойств к созданному ранее профилю
         foreach ($PROPS as $prop)
            CSaleOrderUserPropsValue::Add($prop);
      }
    }
?>

В данном примере:
Создаётся профиль покупателя со значениями 2-х свойств — ФИО и Телефон. Предварительно эти свойства заказа были созданы и их идентификаторы использовались в обработчике для присвоения им значений в профиле покупателя. Для регистрации нужно использовать компонент main.register, в настройках параметров данного компонента выбрать поля «Телефон», «Фамилия», «Имя» и «Отчество».
Свойств профиля покупателя, конечно, можно создавать больше, главное ассоциировать их с полями регистрационной формы и соответственно в обработчике присваивать значение этих полей свойствам свеженького профиля покупателя.

Свои выражения в количественном остатке товаров «мало», «достаточно», «много

Можно изменить в классе: /bitrix/modules/aspro.max/classes/general/CMax.php

Со строки 6733 меняем код на следующий:

if($totalCount < 10 AND $totalCount > 0) {
  $indicators = 1;
  $totalAmount = "Очень мало";
}
if($totalCount < 100 AND $totalCount >= 10) {
  $indicators = 1;
  $totalAmount = "Мало";
}
if($totalCount < 1000 AND $totalCount >= 100) {
  $indicators = 2;
  $totalAmount = "Достаточно";
}
if($totalCount >= 1000) {
  $indicators = 3;
  $totalAmount = "Много";
}

Sitemap.xml в EVO CMS через плагин

Чтобы не отображать ресурс для sitemap.xml в дереве, можно генерировать карту через плагин.
Создаем плагин, на событие OnPageNotFound и прописываем следующий код:

switch($_GET['q']) {
case 'sitemap.xml':
		header('Content-Type: application/xml; charset=utf-8');
		echo $modx->runSnippet('DLSitemap');
		die();
		break;
}

Битрикс. Как получить все данные из вкладки SEO для элемента

Получить все данные из вкладки SEO для элемента можно следующим образом.

$ipropValues = new \Bitrix\Iblock\InheritedProperty\ElementValues($IBLOCK_ID,$ELEMENT_ID); 
$IPROPERTY = $ipropValues->getValues();

В результате будет получен следующий массив например:

Array
(
    [ELEMENT_META_TITLE] => Балконная защёлка купить оптом с доставкой 
    [ELEMENT_META_DESCRIPTION] => Балконная защёлка купить оптом в любом объёме по низкой цене (с любой формой оплаты) и с быстрой доставкой по всей РФ.
    [ELEMENT_PAGE_TITLE] => Балконная защёлка
    [ELEMENT_PREVIEW_PICTURE_FILE_ALT] => Балконная защёлка купить оптом с доставкой 
    [ELEMENT_PREVIEW_PICTURE_FILE_TITLE] => Балконная защёлка купить оптом в любом объёме по низкой цене (с любой формой оплаты) и с быстрой доставкой по всей РФ.
    [ELEMENT_DETAIL_PICTURE_FILE_ALT] => Балконная защёлка купить оптом с доставкой 
    [ELEMENT_DETAIL_PICTURE_FILE_TITLE] => Балконная защёлка купить оптом в любом объёме по низкой цене (с любой формой оплаты) и с быстрой доставкой по всей РФ.
    [SECTION_PAGE_TITLE] => Балконная защёлка
)
Ранее Ctrl + ↓