Велосипеды, какими бы они небыли, нуждаются в доработке.
Руководствуясь приведённой выше мыслью я решил сделать гостевую книгу на стандартных компонентах и API.
Необходимо: модуль "Формы", копипаст моего кода, доработка моего кода :)
Пример гостевой: http://nwcinema.ru/guest/
На странице гостевой будет располагаться форма добавления реплики (вопроса, жалобы и т.п.), а также лента вопросов-ответов с постраничной навигацией.
Форма добавления будет стандартной, лента - через API.
- Создаём форму:
- Сервис -> Веб-формы -> Настройка форм -> Создать
- Имя, описание и т.п. - на ваш вкус
- Шаблон я использовал свой (необходимо было реализовать возможность "неотображения" вопроса в ленте).
Вот код:- <?=$FORM->ShowFormDescription("")?> <?=$FORM->ShowFormNote()?><?=$FORM->ShowFormErrors()?>
- <br />
- <table style="padding-bottom: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; border-collapse: collapse; " border="0" cellspacing="0" cellpadding="0" width="100%">
- <tbody>
- <tr> <td style="padding-bottom: 15px; padding-right: 20px; " valign="top" width="15%" align="right"><?=$FORM->ShowInputCaption("NAME","")?></td> <td><?=$FORM->ShowInput('NAME')?> </td> </tr>
- <tr> <td style="padding-bottom: 15px; padding-right: 20px; " valign="top" align="right"><?=$FORM->ShowInputCaption("CITY","")?></td> <td><?=$FORM->ShowInput('CITY')?></td> </tr>
- <tr> <td style="padding-bottom: 15px; padding-right: 20px; " valign="top" align="right"><?=$FORM->ShowInputCaption("EMAIL","")?></td> <td><?=$FORM->ShowInput('EMAIL')?></td> </tr>
- <tr> <td style="padding-bottom: 15px; padding-right: 20px; " valign="top" align="right"><?=$FORM->ShowInputCaption("MESS","")?></td> <td><?=$FORM->ShowInput('MESS')?> </td> </tr>
- <tr><td style="padding-bottom: 15px; padding-right: 20px; " valign="top" align="right"><?=$FORM->ShowInput('PRIVATE')?></td><td valign="top"><?=$FORM->ShowInputCaption("PRIVATE","")?> </td></tr>
- <tr><td style="padding-bottom: 15px; padding-right: 20px; " valign="top" align="right">Введите текст на картинке<?=$FORM->ShowRequired()?></td><td valign="top"><?=$FORM->ShowCaptchaImage()?>
- <br />
- <?=$FORM->ShowCaptchaField()?></td></tr>
- </tbody>
- </table>
- <br />
- <?=$FORM->ShowSubmitButton("","")?>
- Добавляем вопросы на форму:
Сообщение - textarea, "Я не хочу..." - checkbox, остальные - text - Добавляем статус формы
- Создаём страничку с гостевой (в моём случае - /guest/index.php), вот код:
В коде есть комментарии, не забудьте отредактировать под себя.- <?
- require($_SERVER["DOCUMENT_ROOT"]."/bitrix/header.php");
- $APPLICATION->SetTitle("Жалобная книга");
- ?>
- <p>
- <?php /* Вставляем нашу формочку через компонент, не забываем поправить "WEB_FORM_ID", поставив свой ID формы */ ?>
- <?$APPLICATION->IncludeComponent("bitrix:form.result.new", "comments", Array(
- "WEB_FORM_ID" => "1",
- "IGNORE_CUSTOM_TEMPLATE" => "N",
- "USE_EXTENDED_ERRORS" => "N",
- "SEF_MODE" => "N",
- "SEF_FOLDER" => "/guest/",
- "CACHE_TYPE" => "N",
- "CACHE_TIME" => "3600",
- "LIST_URL" => "",
- "EDIT_URL" => "",
- "SUCCESS_URL" => "",
- "CHAIN_ITEM_TEXT" => "",
- "CHAIN_ITEM_LINK" => "",
- "VARIABLE_ALIASES" => array(
- "WEB_FORM_ID" => "WEB_FORM_ID",
- "RESULT_ID" => "RESULT_ID",
- )
- )
- );?></p>
- <?php
- $f = array( );
- if ( CModule::IncludeModule("form") ) {
- /* Получаем ленту сообщений, единичка - ID нашей формы */
- CForm::GetResultAnswerArray(
- 1,
- $f,
- $f,
- $answers,
- array(
- )
- );
- if ( count( $answers ) ) {
- $rez = array( );
- foreach ( $answers as $id => $f ) {
- $x = CFormResult::GetByID( $id );
- if ( $x && ($x = $x->GetNext()) && ($d = date_parse( $x['DATE_CREATE'] )) ) {
- $x = array( 'DATE_CREATE' => date(
- 'd.m.Y H:i:s',
- (mktime(
- $d['hour'],
- $d['minute'],
- $d['second'],
- $d['month'],
- $d['day'],
- $d['year']
- ) + 7*60*60)
- ) );
- foreach ( $f as $s => $v ) {
- $v = $v[0];
- $x[ $s ] = ( $v['VARNAME'] == 'PRIVATE' ? $v['VALUE'] : $v["USER_TEXT"] );
- }
- if ( ! $x['PRIVATE'] )
- $rez[ $id ] = $x;
- }
- }
- /* Сортировать будем DESC по ID */
- krsort( $rez );
- $p = $_GET['p'] > 0 ? $_GET['p'] : 1;
- $onP = 10; // количество вопросов в ленте на странице
- $elz = count ( $rez );
- if ( $elz > $onP ) {
- $rez = array_slice( $rez, ( $p > 1 ? ($p * $onP - $onP) : 0 ), $onP, 1 );
- }
- /* Выводим ленту */
- echo '<h2>Лента сообщений</h2>';
- foreach ( $rez as $v ) {
- echo '<p><b>'.$v["NAME"].'</b>'
- . ( $v['CITY'] ? ' (' . $v["CITY"] . ')' : '' ) . '<br />';
- echo '<span style="color:#aaa">'.$v["DATE_CREATE"].'</span><br />';
- echo
- str_replace(
- array(
- '<r>',
- '</r>'
- ),
- array(
- '<p class="reply">',
- '</p>'
- ),
- $v["MESS"]
- )
- . '<div class="line_1" style="margin: 5px 0px 0px 0px; padding: 1px;"></div></p>';
- }
- /* Выводим постраничную навигацию */
- if ( $elz > $onP ) {
- $pages = ceil( $elz / $onP );
- $rez = array();
- foreach ( range( 1, $pages ) as $v ) {
- $rez[] = $p == $v
- ? "<b>$v</b>"
- : "<a href='?p=$v'>$v</a>";
- }
- echo '<p><font class="text"> ' . ($p * $onP - $onP + 1) . ' - ' . ( $p * $onP > $elz ? $elz : $p * $onP ) . ' из ' . $elz . '<br></font>
- <font class="text">
- Страницы: ' . join( ' ', $rez ) . '
- </font></p>';
- }
- }
- }
- ?>
- <?require($_SERVER["DOCUMENT_ROOT"]."/bitrix/footer.php");?>
- Ключевой момент - ответы на вопросы
- Добавляем css-правило и радуемся жизни :)
- p.reply {
- color: #C2097F;
- /* font-family: arial;
- font-size: 0.8em; */
- margin:10px 0 10px 30px;
- }
Комментариев нет:
Отправить комментарий