Создаём свою таблицу в базе данных 1С-Битрикс


12-09-2018
Денис Л.
Cms
7
2103
Создаём свою таблицу в базе данных 1С-Битрикс

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

id category question answer

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

Задача совершенно не сложная, тем не менее, захотелось написать об этом пост. Начинающим разработчикам пригодится!

Создаём папку, в ней размещаем файл index.php

В файле размещаем стандартное содержимое Битрикс-файла: хедер, вызов мета-тегов, футер.

Далее нам необходимо создать свою таблицу в базе данных 1С-Битрикс. Средствами административной панели сделать это нельзя: если мы зайдём в раздел Администрирования, то нигде не увидим пункт "Создать новую таблицу". Однако, мы можем редактировать имеющиеся, через пункты навигации:
Администрирование --> Производительность --> Таблицы.

Чтобы создать таблицу, нам потребуется консоль (я использую PuTTY) и root-доступ на сервер через SSH.

Подключаемся к серверу, входим в нашу БД с помощью команды:

mysql -uИмяПользователя -pПарольПользователя НазваниеБазыДанных    

Смотрим, какие у нас есть таблицы:

show databases;    

Выбираем нужную нам таблицу (ту, которая используется для нашего сайта). Посмотреть, какая БД используется, а также имя пользователя и пароль можно в папке /bitrix/php_interface/dbconn.php

Вводим команду:

use ИмяНашейБазыДанных;    

Далее, смотрим, какие у нас есть таблицы (чтобы при создании новой избежать ошибок с одинаковым названием):

show tables;    

Теперь нам нужно создать свою таблицу и на этом наше общение с консолью закончится.

Ниже я привожу строку создания таблицы. Вы можете скорректировать её на своё усмотрение. В частности, переименовать название самой таблицы (наша таблица называется `questions`), а также название заголовков таблицы, за исключением id (в примере ниже это заголовки: `category`, `question`, `answer`). Если Вам нужно больше столбцов, то добавьте, по аналогии.

CREATE TABLE `questions` ( `id` INT NOT NULL AUTO_INCREMENT , `category` VARCHAR(255) NOT NULL , `question` TEXT NOT NULL , `answer` TEXT NOT NULL , PRIMARY KEY (`id`)) ENGINE = InnoDB CHARSET=utf8 COLLATE utf8_general_ci;  

Чтобы нам было что править в административной панели Битрикса, я всё же предлагаю заполнить таблицу минимальными тестовыми данными. Так нам проще будет ориентироваться в дальнейшем. Если Вам это не требуется - можете пропустить этот пункт.

INSERT INTO `questions` (`id`, `category`, `question`, `answer`) VALUES (NULL, 'Категория 1', 'Вопрос 1', 'Ответ 1'), (NULL, 'Категория 2', 'Вопрос 2', 'Ответ 2');    

Теперь можем смело выходить из консоли. Первым делом закройте соединение с базой данных:

exit;   

Переходим в админку Битрикса. Затем: Администрирование --> Производительность --> Таблицы.

Видим нашу таблицу. Меняем имеющиеся данные (кроме id), добавляем новые строки.

Теперь наша задача отфильтровать всё по категориям и вывести в красивые таблицы на нашу страницу. Количество таблиц должно быть равно количеству категорий.

Вписываем новый php-код на нашу страницу:

<?
// подключаемся к базе данных
global $DB;

// делаем запрос к БД, в котором получаем уникальные названия наших категорий
$categoryQuery = $DB->Query("SELECT category FROM questions GROUP BY category");

// запускаем цикл и в массив $arrayCategory записываем названия наших категорий
while($rowCategory = $categoryQuery->Fetch()) {
    $arrayCategory []= $rowCategory['category'];
}
?>

Теперь нам нужно генерировать разметку страницы:

<?// запускаем цикл столько раз, сколько у нас уникальных категорий ?>   
<? foreach($arrayCategory as $category): ?>
    
    <?// для каждой итерации цикла формируем новый запрос к БД, в котором отбираем все данные, соответствующие текущей категории ?>
    <? $query = $DB->Query("SELECT * FROM questions WHERE category = '$category'"); ?>

        <table class="newDocs questions">
            <thead>
                <tr><td><?=$category?></td></tr>
            </thead>
            <tbody>
            
            <?// создаём ещё один цикл, внутри которого извлекаем данные из ресурса ?>
            <? while($result = $query->Fetch()): ?>
                <tr data-question="head" class="gray">
                    <td><a href="#"><?=$result['question']?></a></td>
                </tr>
                <tr data-question='text'>
                    <td><?=$result['answer']?></td>
                </tr>
            <? endwhile ?>

            </tbody>
        </table>

<? endforeach ?>

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

Категория
Вопрос 1
Ответ 1
Вопрос 2
Ответ 2
Вопрос 3
Ответ 3

Подписывайтесь на группу в ВКонтакте, чтобы всегда быть в курсе актуальных выпусков Web development blog!

Читайте также:

Prestashop 1.7: клонирование модуля

1С Битрикс: убираем из кода скрытые подпункты в меню

October CMS - переезд сайта. Практика, разбор ошибок при переносе