Редактировать

Настройка регистрации, авторизации и восстановления пароля

Настройка разделов

Список путей:

  • Основная страница ЛК /client/

  • Форма регистрации /client/registration/

  • Форма авторизации /client/auth/

  • Форма восстановления пароля /client/forgotpasswd/

  • Профиль пользователя /client/profile/

  • Корзина /client/cart/

  • Оформление заказа /client/order/

  • Сравнение товаров /catalog/compare/

Стартовая страница ЛК

Проверим факт авторизации пользователя и, если авторизован, то покажем меню, иначе перекинем на форму авторизации

<?
require($_SERVER["DOCUMENT_ROOT"]."/bitrix/header.php");
$APPLICATION->SetTitle("Личный кабинет");
?>
    <?if (!$USER->IsAuthorized()) {
        LocalRedirect('/client/auth/');
    }?>

    <ul>
        <li><a href="/client/profile/">Мой профиль</a></li>
        <? // часть меню для пользователей из групп 4 или 5
        if ( CSite::InGroup( array(4,5) ) ) :?>
            <li><a href="/client/profile/">Меню не для всех</a></li>
        <?endif;?>
    </ul>

<?require($_SERVER["DOCUMENT_ROOT"]."/bitrix/footer.php");?>

Страница авторизации

Наличие кнопок авторизации через соц. сети настраивается в админке модуль “Социальные сервисы”

<?
require($_SERVER["DOCUMENT_ROOT"]."/bitrix/header.php");
$APPLICATION->SetTitle("Авторизация");
?>

<?
if ($USER->IsAuthorized()) {

    $page = '/';

    if (isset($_REQUEST['backurl']) && $_REQUEST['backurl']) {
        $page = $_REQUEST['backurl'];
        $arCurrent = parse_url($_SERVER['REQUEST_URI']);

        if(isset($arCurrent['path']) && trim($arCurrent['path'], '/') == trim($page, '/')) {
            $page = '/';
        }
    }

    // Админов не перенаправляем
    if (!$USER->IsAdmin()) {
        LocalRedirect($page);
    }
}
?>

<?$APPLICATION->IncludeComponent(
	"bitrix:system.auth.form",
	"auth",
	Array(
		"FORGOT_PASSWORD_URL" => "/client/forgotpasswd/",
		"PROFILE_URL" => "/client/profile/",
		"REGISTER_URL" => "/client/registration/",
		"SHOW_ERRORS" => "Y"
	)
);?><?require($_SERVER["DOCUMENT_ROOT"]."/bitrix/footer.php");?>

Страница регистрации

Если нужно добавить в форму нестандартные поля, то эти поля сперва нужно создать в админке.

Для создания доп.поля пользователя идем

Настройки 
- Пользователи 
- список пользователей, открываем на редактирование любого пользователя 
- Доп. поля 
- Добавить пользовательское поле 
- добавляем то что нужно
<?
require($_SERVER["DOCUMENT_ROOT"]."/bitrix/header.php");
$APPLICATION->SetTitle("Регистрация");
?>
<div class="container">
	<div class="row">
        <?$APPLICATION->IncludeComponent(
            "bitrix:main.register",
            "registration",
            array(
                "AUTH" => "Y",
                "REQUIRED_FIELDS" => array(
                    0 => "EMAIL",
                ),
                "SET_TITLE" => "Y",
                "SHOW_FIELDS" => array(
                    0 => "EMAIL",
                    1 => "NAME",
                    2 => "LAST_NAME",
                ),
                "SUCCESS_PAGE" => "/profile/",
                "USER_PROPERTY" => array(
                    0 => "UF_CARD_BRIGADA",
                ),
                "USER_PROPERTY_NAME" => "",
                "USE_BACKURL" => "Y",
                "COMPONENT_TEMPLATE" => "registration"
            ),
            false
        );?>
	</div>
</div>
<?require($_SERVER["DOCUMENT_ROOT"]."/bitrix/footer.php");?>

Ссылки на регистрацию и авторизацию

Удобно подключать громоздкие куски кода из включаемых файлов

<?// в нужном месте страницы (обычно шапка)?>
<?$APPLICATION->IncludeFile(SITE_TEMPLATE_PATH.'/inc/authInfo.php', [], ['SHOW_BORDER' => false]);?>

Содержимое файла SITE_TEMPLATE_PATH.'/inc/authInfo.php'

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

<?if($USER->IsAuthorized()):?>
    <div class="enter">
        <a href="<?echo $APPLICATION->GetCurPageParam("logout=yes", array(
            "login",
            "logout",
            "register",
            "forgot_password",
            "change_password"));?>">Выход</a></div>
    <div class="login"><a href="/client/profile/"><?=$USER->GetFullName()?></a></div>
<?else:?>
    <div class="enter"><a href="/client/">Вход</a></div>
    <div class="login"><a href="/client/registration/">Регистрация</a></div>
<?endif;?>

Профиль пользователя

<?require($_SERVER["DOCUMENT_ROOT"]."/bitrix/header.php");
$APPLICATION->SetTitle("Ваш профиль");
?>

<?$APPLICATION->IncludeComponent(
	"bitrix:main.profile",
	"",
	Array(
		"CHECK_RIGHTS" => "N",
		"SEND_INFO" => "N",
		"SET_TITLE" => "Y",
		"USER_PROPERTY" => array(),
		"USER_PROPERTY_NAME" => ""
	)
);?>

<?require($_SERVER["DOCUMENT_ROOT"]."/bitrix/footer.php");?>

Страница корзины

<?
require($_SERVER["DOCUMENT_ROOT"]."/bitrix/header.php");
$APPLICATION->SetTitle("Корзина");
?>
<?$APPLICATION->IncludeComponent(
	"bitrix:sale.basket.basket",
	"",
	Array(
		"ACTION_VARIABLE" => "basketAction",
		"AUTO_CALCULATION" => "Y",
		"COLUMNS_LIST" => array("NAME","DISCOUNT","WEIGHT","DELETE","DELAY","TYPE","PRICE","QUANTITY"),
		"CORRECT_RATIO" => "N",
		"GIFTS_BLOCK_TITLE" => "Выберите один из подарков",
		"GIFTS_CONVERT_CURRENCY" => "N",
		"GIFTS_HIDE_BLOCK_TITLE" => "N",
		"GIFTS_HIDE_NOT_AVAILABLE" => "N",
		"GIFTS_MESS_BTN_BUY" => "Выбрать",
		"GIFTS_MESS_BTN_DETAIL" => "Подробнее",
		"GIFTS_PAGE_ELEMENT_COUNT" => "4",
		"GIFTS_PLACE" => "BOTTOM",
		"GIFTS_PRODUCT_PROPS_VARIABLE" => "prop",
		"GIFTS_PRODUCT_QUANTITY_VARIABLE" => "quantity",
		"GIFTS_SHOW_DISCOUNT_PERCENT" => "Y",
		"GIFTS_SHOW_IMAGE" => "Y",
		"GIFTS_SHOW_NAME" => "Y",
		"GIFTS_SHOW_OLD_PRICE" => "N",
		"GIFTS_TEXT_LABEL_GIFT" => "Подарок",
		"HIDE_COUPON" => "N",
		"PATH_TO_ORDER" => "/client/order/",
		"PRICE_VAT_SHOW_VALUE" => "N",
		"QUANTITY_FLOAT" => "N",
		"SET_TITLE" => "Y",
		"TEMPLATE_THEME" => "blue",
		"USE_ENHANCED_ECOMMERCE" => "N",
		"USE_GIFTS" => "N",
		"USE_PREPAYMENT" => "N"
	)
);?>
<?require($_SERVER["DOCUMENT_ROOT"]."/bitrix/footer.php");?>

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

<?// обычно верхний правый угол экрана ?>
<?$APPLICATION->IncludeComponent("bitrix:sale.basket.basket.line", "cartLink", Array(
	"HIDE_ON_BASKET_PAGES" => "Y",	// Не показывать на страницах корзины и оформления заказа
		"PATH_TO_AUTHORIZE" => "/client/auth/",	// Страница авторизации
		"PATH_TO_BASKET" => "/client/cart/",	// Страница корзины
		"PATH_TO_ORDER" => "/client/order/",	// Страница оформления заказа
		"PATH_TO_PERSONAL" => "/client/",	// Страница персонального раздела
		"PATH_TO_PROFILE" => "/client/profile/",	// Страница профиля
		"PATH_TO_REGISTER" => "/client/registration/",	// Страница регистрации
		"POSITION_FIXED" => "N",	// Отображать корзину поверх шаблона
		"SHOW_AUTHOR" => "N",	// Добавить возможность авторизации
		"SHOW_DELAY" => "Y",
		"SHOW_EMPTY_VALUES" => "Y",	// Выводить нулевые значения в пустой корзине
		"SHOW_IMAGE" => "Y",
		"SHOW_NOTAVAIL" => "Y",
		"SHOW_NUM_PRODUCTS" => "Y",	// Показывать количество товаров
		"SHOW_PERSONAL_LINK" => "N",	// Отображать персональный раздел
		"SHOW_PRICE" => "Y",
		"SHOW_PRODUCTS" => "N",	// Показывать список товаров
		"SHOW_SUBSCRIBE" => "Y",
		"SHOW_SUMMARY" => "Y",
		"SHOW_TOTAL_PRICE" => "Y",	// Показывать общую сумму по товарам
	),
	false
);?>

Настройка отображения факта наличия товара в корзине в шаблоне каталога

Пример работы с component_epilog.php

Информация о товарах в сравнении

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

<?
$cntCompare = 0;
if(isset($_SESSION["CATALOG_COMPARE_LIST"][IBID_CATALOG]["ITEMS"])) {
    $cntCompare = count($_SESSION["CATALOG_COMPARE_LIST"][IBID_CATALOG]["ITEMS"]);
}
?>

Так же в Битриксе есть компонент для этих целей. Пример его подключения на странице:

<?$APPLICATION->IncludeComponent(
    "bitrix:catalog.compare.list",
    "",
    Array(
	"ACTION_VARIABLE" => "action",
	"AJAX_MODE" => "N",
	"AJAX_OPTION_ADDITIONAL" => "",
	"AJAX_OPTION_HISTORY" => "N",
	"AJAX_OPTION_JUMP" => "N",
	"AJAX_OPTION_STYLE" => "Y",
	"COMPARE_URL" => "/catalog/compare/",
	"DETAIL_URL" => "",
	"IBLOCK_ID" => IBID_CATALOG,
	"IBLOCK_TYPE" => "catalogs",
	"NAME" => "CATALOG_COMPARE_LIST",
	"POSITION" => "top left",
	"POSITION_FIXED" => "Y",
	"PRODUCT_ID_VARIABLE" => "id"
    )
);?>

Страница результатов сравнения

<?$APPLICATION->IncludeComponent(
    "bitrix:catalog.compare.result",
    "",
    Array(
	"ACTION_VARIABLE" => "action",
	"AJAX_MODE" => "N",
	"AJAX_OPTION_ADDITIONAL" => "",
	"AJAX_OPTION_HISTORY" => "N",
	"AJAX_OPTION_JUMP" => "N",
	"AJAX_OPTION_STYLE" => "Y",
	"BASKET_URL" => "/client/cart/",
	"CONVERT_CURRENCY" => "N",
	"DETAIL_URL" => "",
	"DISPLAY_ELEMENT_SELECT_BOX" => "N",
	"ELEMENT_SORT_FIELD" => "sort",
	"ELEMENT_SORT_FIELD_BOX" => "name",
	"ELEMENT_SORT_FIELD_BOX2" => "id",
	"ELEMENT_SORT_ORDER" => "asc",
	"ELEMENT_SORT_ORDER_BOX" => "asc",
	"ELEMENT_SORT_ORDER_BOX2" => "desc",
	"FIELD_CODE" => array("ID","NAME","PREVIEW_TEXT","PREVIEW_PICTURE","DETAIL_TEXT","DETAIL_PICTURE","DATE_ACTIVE_FROM","DATE_ACTIVE_TO"),
	"HIDE_NOT_AVAILABLE" => "N",
	"IBLOCK_ID" => IBID_CATALOG,
	"IBLOCK_TYPE" => "catalogs",
	"NAME" => "CATALOG_COMPARE_LIST",
	"PRICE_CODE" => array("BASE"),
	"PRICE_VAT_INCLUDE" => "Y",
	"PRODUCT_ID_VARIABLE" => "id",
	"PROPERTY_CODE" => array("KOLICHESTVO","KRATKOEOPISANIE","MASSAKG","OBEML","OBEMMKUB","POLNOEOPISANIE","FOTO","CENA","ARTIKUL",""),
	"SECTION_ID_VARIABLE" => "SECTION_ID",
	"SHOW_PRICE_COUNT" => "1",
	"TEMPLATE_THEME" => "blue",
	"USE_PRICE_COUNT" => "N"
    )
);?>