портал о модных и интересных местах, событиях и людях Воронежа и области

Разработка компонентов в системе 1С-Битрикс – это процесс, который требует не только технической экспертизы, но и креативного мышления. В данной статье мы рассмотрим процесс создания компонента для 1С-Битрикс, взяв за основу тестовое задание, предложенное одной компанией в процессе набора персонала. Мы рассмотрим ключевые шаги, технические нюансы и творческий подход к разработке данного компонента.

1. Понимание задачи разработки компонента

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

Реализовать страницу получения уникального кода скидки. Авторизованный пользователь переходит на новую страницу, где видит кнопку "Получить скидку". При нажатии на кнопку, ему отображается случайное значение скидки от 1 до 50% и уникальный код для получения данной скидки. Если пользователь в течении 1 часа повторно перешел на данную страницу и нажал кнопку "Получить скидку", то ему отображается старая скидка. Так же на странице отображается поле ввода, для проверки кода и кнопка "Проверить скидку". Авторизованный пользователь вводит в поле вода ранее полученный код и нажимает кнопку "Проверить скидку". Если скидка была получена более 3 часов назад или скидка была получена для другого пользователя, то ему отображается уведомление "Скидка недоступна", иначе отображается значение скидки. Необходимо предусмотреть хранение значения кода и соответствующей скидки для каждого пользователя.

2. Проектирование Компонента

После понимания задачи, необходимо спроектировать компонент. Это включает в себя определение структуры базы данных (если это требуется), выбор подходящих технологий и решений для реализации функционала. На этом этапе также стоит подумать о пользовательском интерфейсе и пользовательском опыте.

Директория компонента:
/bitrix/components/my/my

Таблица для хранения данных
CREATE TABLE b_user_discounts ( user_id INT PRIMARY KEY, discount_value INT, discount_code VARCHAR(255), generated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP );

3. Написание Кода

Следующим шагом является написание кода компонента. В случае 1С-Битрикс, это может включать в себя создание PHP-кода для обработки данных, работы с базой данных, а также шаблонов для отображения информации на веб-странице.

/bitrix/components/my/my/class.php

Код +
<?php
if (!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED !== true) die();
class MyComponent extends CBitrixComponent
{
    public function executeComponent()
    {
        global $USER;
$userId = $USER->GetID();
        $lastDiscount = $this->getLastUserDiscount($userId);
if (!$USER->IsAuthorized()) {
            echo "<p>Скидку может получить только зарегистрированный пользователь</p>";
$this->arResult["SHOW_BUTTON"] = false;
        } else {
if (!$lastDiscount || (time() - strtotime($lastDiscount["generated_at"])) >= 3600) {
$this->arResult["SHOW_BUTTON"] = true;
}
}
        if ($_SERVER["REQUEST_METHOD"] === "POST" && isset($_POST["getDiscount"])) {
            $discountValue = rand(1, 50);
            $discountCode = uniqid();
            $this->saveUserDiscount($userId, $discountValue, $discountCode);
            $this->arResult["DISCOUNT_VALUE"] = $discountValue;
            $this->arResult["DISCOUNT_CODE"] = $discountCode;
        }
        if ($_SERVER["REQUEST_METHOD"] === "POST" && isset($_POST["checkDiscountCode"])) {
            $enteredCode = htmlspecialcharsbx($_POST["discountCode"]);
            $isValidDiscount = $this->checkDiscountCode($userId, $enteredCode);
            if ($isValidDiscount) {
                $this->arResult["VALID_DISCOUNT"] = true;
            } else {
                $this->arResult["INVALID_DISCOUNT"] = true;
            }
        }
        
        $this->includeComponentTemplate();
    }
    private function getLastUserDiscount($userId)
    {
        global $DB;
        $sql = "SELECT * FROM b_user_discounts WHERE user_id = " . intval($userId) . " ORDER BY generated_at DESC LIMIT 1";
        $res = $DB->Query($sql);
        return $res->Fetch();
    }
    private function saveUserDiscount($userId, $discountValue, $discountCode)
    {
        global $DB;
        $sql = "INSERT INTO b_user_discounts (user_id, discount_value, discount_code, generated_at) VALUES (" . intval($userId) . ", " . intval($discountValue) . ", '" . $DB->ForSql($discountCode) . "', NOW())";
        $DB->Query($sql);
    }
    private function checkDiscountCode($userId, $enteredCode)
    {
        global $DB;
        $sql = "SELECT * FROM b_user_discounts WHERE user_id = " . intval($userId) . " AND discount_code = '" . $DB->ForSql($enteredCode) . "' AND generated_at > (NOW() - INTERVAL 3 HOUR)";
        $res = $DB->Query($sql);
        return $res->Fetch() ? true : false;
    }
}
/bitrix/components/my/my/templates/.default/template.php
Код +
<div>
<?php if($_SERVER["REQUEST_METHOD"] === "POST" && isset($_POST["getDiscount"])): ?>
<p>Ваша скидка: <?=$arResult["DISCOUNT_VALUE"]?>%</p>
<p>Код скидки: <?=$arResult["DISCOUNT_CODE"]?></p>
<?php else: ?>
<?php if($arResult["SHOW_BUTTON"] == true): ?>
        <form method="POST" action="">
            <button type="submit" name="getDiscount">Получить скидку</button>
        </form>
<p></p>
<?php else: ?>
<form method="POST" action="">
<input type="text" name="discountCode" placeholder="Введите код скидки">
<button type="submit" name="checkDiscountCode">Проверить скидку</button>
</form>
<p></p> 
    <?php endif; ?>
<?php endif; ?>
    <?php if(isset($arResult["VALID_DISCOUNT"])): ?>
        <p>Скидка действительна!</p>
    <?php elseif(isset($arResult["INVALID_DISCOUNT"])): ?>
        <p>Скидка недействительна</p>
    <?php endif; ?>
</div>
Вставьте компонент в нужное место страницы (php)
$APPLICATION->IncludeComponent( "my:my", "", Array( "PARAMETER_NAME" => "VALUE", ) );

4. Тестирование и Отладка

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

Разработка компонента 1С-БитриксРазработка компонента 1С-БитриксРазработка компонента 1С-Битрикс

5. Оптимизация и Улучшение

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

6. Документация и Поддержка

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

Заключение

Разработка компонентов для 1С-Битрикс – это сложный и увлекательный процесс, который требует тщательного планирования, технической экспертизы и креативного мышления. Правильный подход к разработке, тестированию и поддержке компонента позволяет создать надежное и эффективное решение для веб-проектов.

Приглашаем к сотрудничеству

Если у вас возникла потребность в разработке подобных решений под ключ, мы готовы предложить вам наши профессиональные услуги. Наша команда опытных разработчиков специализируется на создании высококачественных веб-приложений для различных бизнес-потребностей. Мы гарантируем качество, надежность и индивидуальный подход к каждому проекту.

Получить более подробную информацию о наших услугах и посмотреть примеры наших работ вы можете на нашем сайте it.webstatys.ru

Всего комментариев: 0