На днях мне поставили задачу написать свой функционал для нашего сайта на Битрикс, который бы выводил данные из таблицы в базе данных сайта. Таблицу требовалось создать новую, со следующими полями:
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 |
Подписывайтесь на группу в ВКонтакте, вступайте в сообщество на Facebook, чтобы всегда быть в курсе актуальных выпусков
Web development blog!