Архив рубрики: 1C-Битрикс

Как всем товарам в 1С-Битрикс поставить заглушку «изображения нет» ?

Добавление картинки-заглушки для компонента catalog.section:

Код
 <?
 foreach($arResult["ITEMS"] as $key=>$arItem):
  if (!is_array($arItem["PREVIEW_PICTURE"])):
  $arResult["ITEMS"][$key]["PREVIEW_PICTURE"]["SRC"]=SITE_TEMPLATE_PATH."/img/nofoto.png";
  $arResult["ITEMS"][$key]["PREVIEW_PICTURE"]["HEIGHT"]=150;
  $arResult["ITEMS"][$key]["PREVIEW_PICTURE"]["WIDTH"]=150;  
  endif;
 endforeach;

?>

Как вывести стандартные компоненты Битрикс

 

Функция подключения компонента

1.$APPLICATION->IncludeComponent(
2.componentName, // имя компонента
3.componentTemplate, // шаблон компонента, пустая строка если шаблон по умолчанию
4.arParams=array(), // параметры
5.parentComponent=null,
6.arFunctionParams=array()
7.);

Включаемая область для раздела

01.<?$APPLICATION->IncludeComponent(
02."bitrix:main.include",
03."",
04.Array(
05."AREA_FILE_SHOW" => "sect",
06."AREA_FILE_SUFFIX" => "inc",
07."AREA_FILE_RECURSIVE" => "Y",
08."EDIT_MODE" => "html",
09."EDIT_TEMPLATE" => "" //
10.),
11.false
12.);?>

AREA_FILE_RECURSIVE – рекурсивное подключение (Y,N)
EDIT_MODE – режим редактирования (html, php)
EDIT_TEMPLATE – шаблон области по умолчанию, должен лежать в директории page_templates шаблона сайта

Включаемая область для страницы

01.<?$APPLICATION->IncludeComponent(
02."bitrix:main.include",
03."",
04.Array(
05."AREA_FILE_SHOW" => "page",
06."AREA_FILE_SUFFIX" => "inc",
07."EDIT_MODE" => "html",
08."EDIT_TEMPLATE" => ""
09.),
10.false
11.);?>

Включаемый файл шаблона

1.<?$APPLICATION->IncludeFile(
2.$APPLICATION->GetTemplatePath("file.php"),
3.Array(),
4.Array("MODE"=>"html")
5.);?>

Подключается file.php из шаблона

Цепочка навигации

01.<?$APPLICATION->IncludeComponent(
02."bitrix:breadcrumb",
03."",
04.Array(
05."START_FROM" => "0",
06."PATH" => "",
07."SITE_ID" => "-"
08.),
09.false
10.);?>

Горизонтальное меню

01.<?$APPLICATION->IncludeComponent(
02."bitrix:menu",
03."horizontal_multilevel",
04.array(
05."ROOT_MENU_TYPE" => "left",
06."MENU_CACHE_TYPE" => "N",
07."MENU_CACHE_TIME" => "3600",
08."MENU_CACHE_USE_GROUPS" => "Y",
09."MENU_CACHE_GET_VARS" => array(),
10."MAX_LEVEL" => "1",
11."CHILD_MENU_TYPE" => "left",
12."USE_EXT" => "N",
13."ALLOW_MULTI_SELECT" => "N"
14.),
15.false
16.);?>

ROOT_MENU_TYPE – тип меню верхнего уровня
CHILD_MENU_TYPE – тип меню остальных уровней
MAX_LEVEL – максимальный уровень вложенности

Вертикальное меню

01.<?$APPLICATION->IncludeComponent(
02."bitrix:menu",
03."vertical_multilevel",
04.array(
05."ROOT_MENU_TYPE" => "left",
06."MENU_CACHE_TYPE" => "N",
07."MENU_CACHE_TIME" => "3600",
08."MENU_CACHE_USE_GROUPS" => "Y",
09."MENU_CACHE_GET_VARS" => array(),
10."MAX_LEVEL" => "1",
11."CHILD_MENU_TYPE" => "left",
12."USE_EXT" => "N",
13."ALLOW_MULTI_SELECT" => "N"
14.),
15.false
16.);?>

Форма авторизации

01.<?$APPLICATION->IncludeComponent(
02."bitrix:system.auth.form",
03."",
04.Array(
05."REGISTER_URL" => "",
06."PROFILE_URL" => "",
07."SHOW_ERRORS" => "N"
08.),
09.false
10.);?>

REGISTER_URL – путь к странице регистрации
PROFILE_URL – путь к странице профиля пользователя

Форма поиска

1.<?$APPLICATION->IncludeComponent(
2."bitrix:search.form",
3."",
4.Array(
5."PAGE" => "#SITE_DIR#search/index.php"
6.),
7.false
8.);?>

PAGE – путь к странице поиска

Список новостей

01.<?$APPLICATION->IncludeComponent(
02."bitrix:news.list",
03."",
04.Array(
05."DISPLAY_DATE" => "Y",
06."DISPLAY_NAME" => "Y",
07."DISPLAY_PICTURE" => "Y",
08."DISPLAY_PREVIEW_TEXT" => "Y",
09."AJAX_MODE" => "N",
10."IBLOCK_TYPE" => "news",
11."IBLOCK_ID" => $_REQUEST["ID"],
12."NEWS_COUNT" => "20",
13."SORT_BY1" => "ACTIVE_FROM",
14."SORT_ORDER1" => "DESC",
15."SORT_BY2" => "SORT",
16."SORT_ORDER2" => "ASC",
17."FILTER_NAME" => "",
18."FIELD_CODE" => "",
19."PROPERTY_CODE" => "",
20."CHECK_DATES" => "Y",
21."DETAIL_URL" => "",
22."PREVIEW_TRUNCATE_LEN" => "",
23."ACTIVE_DATE_FORMAT" => "d.m.Y",
24."DISPLAY_PANEL" => "N",
25."SET_TITLE" => "Y",
26."SET_STATUS_404" => "N",
27."INCLUDE_IBLOCK_INTO_CHAIN" => "Y",
28."ADD_SECTIONS_CHAIN" => "Y",
29."HIDE_LINK_WHEN_NO_DETAIL" => "N",
30."PARENT_SECTION" => "",
31."PARENT_SECTION_CODE" => "",
32."CACHE_TYPE" => "A",
33."CACHE_TIME" => "3600",
34."CACHE_FILTER" => "N",
35."DISPLAY_TOP_PAGER" => "N",
36."DISPLAY_BOTTOM_PAGER" => "Y",
37."PAGER_TITLE" => "Новости",
38."PAGER_SHOW_ALWAYS" => "Y",
39."PAGER_TEMPLATE" => "",
40."PAGER_DESC_NUMBERING" => "N",
41."PAGER_DESC_NUMBERING_CACHE_TIME" => "36000",
42."PAGER_SHOW_ALL" => "Y",
43."AJAX_OPTION_SHADOW" => "Y",
44."AJAX_OPTION_JUMP" => "N",
45."AJAX_OPTION_STYLE" => "Y",
46."AJAX_OPTION_HISTORY" => "N",
47."AJAX_OPTION_ADDITIONAL" => ""
48.),
49.false
50.);?>

DISPLAY_DATE – показывать дату (Y,N)
DISPLAY_NAME – показывать название (Y,N)
DISPLAY_PICTURE – показывать картинку анонса (Y,N)
DISPLAY_PREVIEW_TEXT – показывать анонс (Y,N)
NEWS_COUNT – количество выводимых новостей

Новостная лента

01.<?$APPLICATION->IncludeComponent(
02."bitrix:news.line",
03."",
04.Array(
05."IBLOCK_TYPE" => "news",
06."IBLOCKS" => "",
07."NEWS_COUNT" => "20",
08."FIELD_CODE" => "",
09."SORT_BY1" => "ACTIVE_FROM",
10."SORT_ORDER1" => "DESC",
11."SORT_BY2" => "SORT",
12."SORT_ORDER2" => "ASC",
13."DETAIL_URL" => "",
14."ACTIVE_DATE_FORMAT" => "d.m.Y",
15."CACHE_TYPE" => "A",
16."CACHE_TIME" => "300"
17.),
18.false
19.);?>

DETAIL_URL – путь к странице детального просмотра, по умолчанию берется из настроек инфоблока
NEWS_COUNT – количество выводимых новостей

Малая корзина

01.<?$APPLICATION->IncludeComponent(
02."bitrix:sale.basket.basket.small",
03."",
04.Array(
05."PATH_TO_BASKET" => "/personal/basket.php",
06."PATH_TO_ORDER" => "/personal/order.php"
07.),
08.false
09.);?> 

Разные шаблоны у главной и у внутренних страниц сайта на Битриксе

Сделайте 2 разных шаблона, удобно путём копирования одного и последующего изменения.

шаблоны главной и внутренних страниц в битрикс (1с-битрикс)

Дальше в настройках сайта (путь смотри в комментарии #152) задайте сначала шаблон для внутренних страниц (без условия), а ниже сделайте условие, что если страница главная, то она будет с другим шаблоном (/index.php). Вот рисунок

разные шаблоны страниц в битриксе

 

После обновления Битрикса сломался сайт (с 11 на 12 версию)

При попытке зайти в админку

Class: CFavorites
File: /home/ИМЯ_САЙТА/ИМЯ_САЙТА/http/bitrix/modules/main/classes/general/favorites.php
Function: GetList
Line: 116
MySQL Query Error: SELECT F.ID, F.C_SORT, F.NAME, F.MENU_ID, F.URL, F.MODIFIED_BY, F.CREATED_BY, F.MODULE_ID, F.LANGUAGE_ID, F.COMMENTS, F.COMMON, F.USER_ID, UM.LOGIN AS M_LOGIN, UC.LOGIN as C_LOGIN, U.LOGIN, F.CODE_ID, DATE_FORMAT(F.TIMESTAMP_X, ‘%d.%m.%Y %H:%i:%s’)    TIMESTAMP_X, DATE_FORMAT(F.DATE_CREATE, ‘%d.%m.%Y %H:%i:%s’)    DATE_CREATE, concat(ifnull(UM.NAME, ») , ‘ ‘ , ifnull(UM.LAST_NAME, »)) as M_USER_NAME, concat(ifnull(UC.NAME, ») , ‘ ‘ , ifnull(UC.LAST_NAME, »)) as C_USER_NAME, concat(ifnull(U.NAME, ») , ‘ ‘ , ifnull(U.LAST_NAME, »)) as USER_NAME FROM b_favorite F LEFT JOIN b_user UM ON (UM.ID = F.MODIFIED_BY) LEFT JOIN b_user UC ON (UC.ID = F.CREATED_BY) LEFT JOIN b_user U ON (U.ID = F.USER_ID) WHERE (1=1 AND ( (F.USER_ID=5 OR F.COMMON=’Y’) ) AND ( F.LANGUAGE_ID = ‘ru’ ) ) ORDER BY F.COMMON ASC, F.C_SORT ASC, F.NAME ASC[Unknown column ‘F.CODE_ID’ in ‘field list’]

в поддержке подсказали, Необходимо выполнить sql-запрос:

alter table b_favorite add CODE_ID int(18)

 

И все починилось!

Конвертация сайта битрикс в кодировку UTF-8 (cp1251 в UTF8)

Подготовка

  • Для работы сайта на битрикс в utf8 абсолютно необходимо наличие модуля mbstring в php (это есть почти на любом хостинге) и установка параметра
    mbstring.func_overload 2

    С этим может быть проблема т.к. с версии php 5.2.8 параметр меняется глобально на весь сервер (http://bugs.php.net/bug.php?id=47187). Уточните вопрос у хостера, но будьте осторожны если вам предложат CGI (см. «как выбрать хостера»).

    На VPS/выделенном сервере параметр без проблем меняется в php.ini.

  • Обязательно сделайте резервную копию работающего сайта, а лучше именно на копии проводите эксперименты. Если что-то пойдёт не так — вы можете потерять данные!

Этапы перехода

  • Подготовить сервер как показано выше
  • Добавить в /bitrix/php_interface/dbconn.php
    define(«BX_UTF», true);
  • Изменить в настройках сайта кодировку с windows-1251 на utf-8
  • Изменить в настройках языка ru кодировку с windows-1251 на utf-8
  • Конвертировать все файлы в utf8
  • Конвертировать БД в utf8
  • Сменить в /bitrix/php_interface/after_connect.php
    $DB->Query(«SET NAMES ‘cp1251′»smile;);

    на

    $DB->Query(«SET NAMES ‘utf8′»smile;);
  • Сбросить весь кеш
  • Выйти и зайти на сайт чтобы обновить данные сессии

Практическая сторона вопроса

После смены кодировки сайта публичная часть принимает вид:

Это нормально, браузер пытается показать данные не в той кодировке. Теперь после всех действий внешний вид восстановится, и мы увидим, что процесс прошёл успешно.

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

Примечание. Часто при использовании внешних программ для конвертации в файлы добавляется специальная последовательность символов, т.н. BOM. Эти символы должны находиться только вначале файла, а поскольку итоговая html страница является составной из нескольких php файлов, то спецсимволы появляются в теле html страницы. Если делаете вручную — не сохраняйте с BOM!

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

Скрипт выполняет операции:

— Конвертировать все файлы в utf8
— Конвертировать БД в utf8

Остальное следует делать вручную по списку в том порядке, как написано.

Можно скачать по ссылке: convert_utf8.php

В итоге получил картинку

Теперь, словно, девушка даже слегка улыбнулась smile:)

Обновление от 20.02.2012

  • Теперь конвертируются все файлы, не только языки. При этом делается авто определение кодировки файла, а значит можно выполнять конвертацию повторно.
  • Для кодировки базы указывается сравнение utf8_unicode_ci (требуется продуктом).
  • Исправлены ошибки конвертации базы.
  • Шаг конвертации файлов можно пропустить.

Как убрать Время создания страницы Битрикс

Зайдите как админ, и наверху сверху есть кнопка Отладка, в ней можно отключить все системный сообщения касающиеся отладки, в том числе и Время создания страницы.

Вывести элементы инфоблока в выпадающий список (select options)

<?

CModule::IncludeModule(‘iblock’);
$arSelect = Array(«NAME», «ID», «PROPERTY_имя»);
$arFilter = Array(«IBLOCK_ID»=>номер, «ACTIVE»=>»Y»);
$res = CIBlockElement::GetList(Array(), $arFilter, false, Array(«nPageSize»=>10), $arSelect);
?>
<div id=»comicsdialogcenter»> <form action=»URL» method=»post»> <select name=»goal» size=»1″>
<?while($ob = $res->GetNextElement())
{
$arFields = $ob->GetFields();
?>

<option value=»<?=$arFields[‘PROPERTY_ИМЯ_VALUE’]?>» selected=»»><?=$arFields[‘PROPERTY_ИМЯ_VALUE’]?></option>

<?}?>
</select>

Получить информацию из инфоблоков битрикс

<table width=»300px» border=»1″>

<?

CModule::IncludeModule(‘iblock’);

$arSelect = Array(«NAME», «ID», «PROPERTY_BUTTON»);

$arFilter = Array(«IBLOCK_ID»=>115, «ACTIVE»=>»Y»);

$res = CIBlockElement::GetList(Array(), $arFilter, false, Array(«nPageSize»=>50), $arSelect);

while($ob = $res->GetNextElement())

{

$arFields = $ob->GetFields();

?>

 

<tr>

<td>

<?=$arFields[‘PROPERTY_BUTTON_VALUE’]?>

</td>

</tr>

 

<?}?>

</table>