Tag: php

Делаем ajax формы в битрикс на страницах и в всплывающих окнах

Рано или поздно, разработчик 1с-битрикс, задается вопросом: а как же мне сделать аякс форму в битриксе?
Не секрет, что в 1с-битрис «режим AJAX» можно включить практически в каждом компоненте в его настройках, но есть и такие компоненты в которых по каким то причинам нет этой настройки.
Попробуем разобраться как это делается на примере компонента «Добавление элементов инфоблока». Читаем дальше…

Read More

Bitrix: вывод не активного элемента в публичной части

Так завелось, что при неактивном элементе, когда снята галочка «Активность» у элемента, то возникает сложность вывести его в публичной части сайта. Для этого забираем компонент в папку с вашими компонентами. Например: копируем /bitrix/components/bitrix/news.detail/ в /bitrix/components/ak/news.detail/
Далее в файле component.php ищем строки

$arFilter = array(
    "IBLOCK_LID" => SITE_ID,
    "IBLOCK_ACTIVE" => "Y",
    "ACTIVE" => "Y",
    "CHECK_PERMISSIONS" => "Y",
    "IBLOCK_TYPE" => $arParams["IBLOCK_TYPE"],
    "SHOW_HISTORY" => $arParams["SHOW_WORKFLOW"]? "Y": "N",
);

и необходимо за комментировать или убрать строку «ACTIVE» => «Y»,

$arFilter = array(
    "IBLOCK_LID" => SITE_ID,
    "IBLOCK_ACTIVE" => "Y",
    "CHECK_PERMISSIONS" => "Y",
    "IBLOCK_TYPE" => $arParams["IBLOCK_TYPE"],
    "SHOW_HISTORY" => $arParams["SHOW_WORKFLOW"]? "Y": "N",
);

Вот и все. Теперь на вашем сайте можно вывести не активный элемент.

1С-Битрикс: страница 404.php (велосипед)

<?
include_once($_SERVER['DOCUMENT_ROOT'].'/bitrix/modules/main/include/urlrewrite.php');
$sapi_type = php_sapi_name();
if ($sapi_type=="cgi") 
   header("Status: 404");
else 
   header("HTTP/1.1 404 Not Found");
@define("ERROR_404","Y");
//Тут уже подключение верней части шаблона и присваивание заголовка
require($_SERVER["DOCUMENT_ROOT"]."/bitrix/header.php");
$APPLICATION->SetTitle("Данная страница не существует!");
//Код страницы
require($_SERVER["DOCUMENT_ROOT"]."/bitrix/header.php");
?>
<style>
	h1 { text-align:center;font-size:16px; }
</style>
<p style="text-align:center;font-size:15px;">Вы можете <a href="/">перейти на главную страницу сайта</a></p>
<?require($_SERVER["DOCUMENT_ROOT"]."/bitrix/footer.php");?>

Узнаем e-mail покупателя по заказу

В Битрикс нельзя просто взять и получить e-mail владельца заказа путем обращения к базе пользователей. Быть может для данного заказа покупатель указал иной e-mail. Вот код, который вернет e-mail покупателя конкретного заказа исходя из всех условий:

 

/*
    * Узнаем e-mail пользователя по заказу.
    */
   private static function getOwnerEmail($order)
   {
      //пробежимся по св-вам заказа, ища e-mail
      $res = CSaleOrderPropsValue::GetOrderProps($order);
      while ($row = $res->fetch()) {
         if ($row['IS_EMAIL']=='Y' && check_email($row['VALUE'])) {
            return $row['VALUE'];
         }
      }
      //если такого не нашли, берем просто mail пользователя
      if ($order = CSaleOrder::getById($order)) {
         if ($user = CUser::GetByID($order['USER_ID'])->fetch()) {
            return $user['EMAIL'];
         }
      }
      return false;
   }

Спасибо.

Количество выбранных элементов в битриксе c SelectedRowsCount

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

$res = CIBlockElement::GetList($arOrder, $arFilter, false, false, $arSelect);
$res->SelectedRowsCount()

Товарищи!!! Не ленитесь читать документацию. В ней даже поиск есть. Удачи Вам.

Если файл в битриксе не вызывается на прямую

Очень часто в коде встречаю, что ребята в файлах которые не вызываются на прямую, а подключается из системы. А это сделать просто. Нужно указать в начале файла строку:

<?if(!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED!==true)die();?>

Файл для запуска через крон в битриксе

Вот шаблон файла для запуска через крон в битриксе:

#!/usr/bin/php
<?php
$_SERVER["DOCUMENT_ROOT"] = "/home/bitrix/www";
$DOCUMENT_ROOT = $_SERVER["DOCUMENT_ROOT"];
define("NO_KEEP_STATISTIC", true);
define("NOT_CHECK_PERMISSIONS", true);
set_time_limit(0);
define("LANG", "ru");
require($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/prolog_before.php");

// мой код...

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

Быстро отправить электронное письмо через почтовые шаблоны в битриксе

Как же быстро отправить электронное письмо в битриксе?

Заходим в админку -> Настройки -> Типы почтовых событий. И там создаем новый, назовем его например «Отправка электронной газеты» и тип задаем такой SUBSCRIBE_GAZETA.

Далее заходим в админку -> Настройки -> Почтовые шаблоны. И в этом разделе создаем новый шаблон с указание «Тип почтового события» нашего нового события «Отправка электронной газеты[SUBSCRIBE_GAZETA]», а в сообщение ставим например такое #TEXT#. И в итоге у нас код будут выглядеть вот так:

$arFields = Array(
    "TEXT"    =>    "Это сообщение которое откправим в письме",
);
CEvent::SendImmediate('SUBSCRIBE_GAZETA', SITE_ID, $arFields,'N');

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

Fatal error: Call to undefined function curl_init() in Bitrix

В битриксе на виртуальной машине после первой установки сайт получил ошибку

Fatal error: Call to undefined function curl_init() in

Лечим:

1. Возможно пакета у Вас нет, ставим его — yum install php-curl

2. Если пакет есть то смотрим — ls /etc/php.d/
скорее всего там будет лежать файл curl.ini.disabled
если это так, то

mv /etc/php.d/curl.ini.disabled /etc/php.d/curl.ini

и

/etc/init.d/httpd restart