Tag: Bitrix

Вывод в bitrix:catalog товаров из нескольких инфоблоков

Имеется тип инфоблока 1c_catalog, а в нем несколько инфоблоков с товарами выгружаемых из разных 1С. Нам нужно вывести все эти товары из всех инфобоков в комплексном компоненте bitrix:catalog. Как не печально, но я не нашел решения этой задачи без кастомизации. Ну и вот, что у меня получилось читайте далее…

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");?>

Быстрое восстановление пароля root на сервер

Как быстро восстановить пароль на root пользователя для mysql.
Для этого выполните пошаговую инструкцию приведенную ниже.

1) Сначала остановите mysql.
 service mysqld stop
 2) И запустите mysql командой:
 /usr/bin/mysqld_safe --skip-grant-tables --user=root &
 3) После чего запустите клиент mysql
 mysql -u root
 4) Сделайте запрос sql
 UPDATE mysql.user SET Password=PASSWORD('newpwd') WHERE User='root';
 где newpwd - новый пароль.
 5) Примените изменения
 FLUSH PRIVILEGES;
 6) Выходим из клиента mysql с помощью команды exit
 7) Прописываем команду
 killall mysqld
 Перезагрузите mysql сервер командой:
 service mysqld restart

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

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

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

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

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

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

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

Ошибка при выгрузке в 1С из Битриксе MySQL Query Error: select ID, ATTRIBUTES from b_xml_tree where

Получил вот такую ошибку на одном из поектов при выгрузки из 1С в Битрикс.

MySQL Query Error: select ID, ATTRIBUTES from b_xml_tree where (ID = 1) and (NAME = 'КоммерческаяИнформация') [Illegal mix of collations (latin1_swedish_ci,IMPLICIT) and (utf8_general_ci,COERCIBLE) for operation '=']

Unknown

Сразу напрашивается вопрос=)  С чем это связано?

С тем, что таблицы в БД в разной кодировке. Приведите к одной кодировке и все заработает. Вот такой SQL коммандой это делается:

alter database имя_бд default character set utf8;

Наложение водяного знака средствами битрикс

В Битрике есть возможность реализовать наложение водяного знака на изображения. Можно наносить как изображения, так и текст. Чтобы нанести водяной знак на фотографию достаточно передать параметры фильтра:

$arFilter_watermark = Array(Array('name' => 'watermark',   'position' => 'br', 'size'=>'real',   'type'=>'image',   'alpha_level'=>'10',   'file'=>$_SERVER['DOCUMENT_ROOT'].'/img/watermark.png',    ),);

Возможные значения параметров:
position — указание расположения водяного знака на изображении возможно в двух нотациях:
tl | tc | tr | ml | mc | mr | bl | bc | br
или
topleft | topcenter | topright | centerleft | center | centerright | bottomleft | bottomcenter | bottomright

size — big | medium | small | real, для произвольного изменения масштаба возможно указание коэффициента через параметр ‘coefficient’, параметр ‘real’ применим только для изображений (‘type’=>’image’)
type — text | image
alpha_level — прозрачность от 0 до 100, где 0 = прозрачно, 100 = непрозрачно
text — текст водяного знака
font — путь к файлу с TTF-шрифтом
color — цвет в HEX-формате

Пример реализации:

$arFilters = Array(array("name" => "watermark", "position" => "right", "size"=>"real", 'type'=>'image', "file"=>$_SERVER['DOCUMENT_ROOT']."/images/watermark.png"));

Вместо /images/watermark.png подставляете свой путь к изображению водяного знака.

Далее при ресайзе изображения добавляете вывод фильтра $arFilters

$PICTURE = CFile::ResizeImageGet($arResult["PREVIEW_PICTURE"], Array('width'=>455, 'height'=>315), BX_RESIZE_IMAGE_EXACT, true, $arFilters);

Далее следует разместить код вывода нашего изображения с водяным знаком:

<img src="<?=$PICTURE["src"]?>" alt="<?=$arResult["NAME"]?>" title="<?=$arResult["NAME"]?>" />