MV framework logo
  • Архитектура
    • Философия
    • Технологии
    • CMF
    • История версий
  • Админ панель
  • Поддержка
  • Обратная связь
  • Примеры кода
    • Новостная лента
    • Слайдер с баннерами
    • Список с фильтрацией
    • Форма с загрузкой файла
    • AJAX форма на jQuery
    • Вопросы и ответы
    • Каталог с товарами
    • Авторизация пользователя
    • Регистрация пользователя
    • Личный кабинет пользователя
Скачать Версия 2.6 от 07.10.2022
Документация
  • Архитектура
    • Философия
    • Технологии
    • CMF
    • История версий
  • Админ панель
  • Поддержка
  • Обратная связь
  • Примеры кода
    • Новостная лента
    • Слайдер с баннерами
    • Список с фильтрацией
    • Форма с загрузкой файла
    • AJAX форма на jQuery
    • Вопросы и ответы
    • Каталог с товарами
    • Авторизация пользователя
    • Регистрация пользователя
    • Личный кабинет пользователя
Начало работы
  • Установка и запуск
  • Структура папок
  • Запуск простого сайта
  • Предустановленные модели
  • SQLite начало работы
  • Системные настройки
  • Миграции
Модели (models)
  • Общие принципы моделей
  • Типы данных
  • Настройка модели
  • Простые модели
  • Внешние ключи
  • Деревья
  • Многие ко многим
  • Группа
  • Управление записями
  • Управление простыми моделями
  • Дополнительные возможности
Шаблоны (views) и маршрутизация (routes)
  • Общие принципы шаблонов
  • Объект класса Router
  • Объект MV
  • Index, default и 404 шаблоны
  • Создание нового шаблона
  • Вывод данных в шаблоне
  • Объект класса Record
  • Файлы и изображения
  • Дата и время
  • Редиректы
  • Отправка email
  • Специальные методы
Формы
  • Создание форм
  • Настройка полей формы
  • Правила проверки полей формы
  • Проверка полей формы
  • Работа с данными формы
  • Использование данных из моделей
  • Методы форм
SQL запросы
  • Конструктор запросов
  • Прямые запросы
  • Постраничная разбивка
  • Сортировка
  • Фильтрация
  • Загрузка из csv файлов
Сессии и безопасность
  • Работа с сессиями
  • AJAX
  • Кэширование
  • Безопасность
  • Отладка
Плагины
  • Общие принципы плагинов
  • Дополнения к административной панели
Документация
Начало работы
  • Установка и запуск
  • Структура папок
  • Запуск простого сайта
  • Предустановленные модели
  • SQLite начало работы
  • Системные настройки
  • Миграции
Модели (models)
  • Общие принципы моделей
  • Типы данных
  • Настройка модели
  • Простые модели
  • Внешние ключи
  • Деревья
  • Многие ко многим
  • Группа
  • Управление записями
  • Управление простыми моделями
  • Дополнительные возможности
Шаблоны (views) и маршрутизация (routes)
  • Общие принципы шаблонов
  • Объект класса Router
  • Объект MV
  • Index, default и 404 шаблоны
  • Создание нового шаблона
  • Вывод данных в шаблоне
  • Объект класса Record
  • Файлы и изображения
  • Дата и время
  • Редиректы
  • Отправка email
  • Специальные методы
Формы
  • Создание форм
  • Настройка полей формы
  • Правила проверки полей формы
  • Проверка полей формы
  • Работа с данными формы
  • Использование данных из моделей
  • Методы форм
SQL запросы
  • Конструктор запросов
  • Прямые запросы
  • Постраничная разбивка
  • Сортировка
  • Фильтрация
  • Загрузка из csv файлов
Сессии и безопасность
  • Работа с сессиями
  • AJAX
  • Кэширование
  • Безопасность
  • Отладка
Плагины
  • Общие принципы плагинов
  • Дополнения к административной панели

Вопросы и ответы

Создаем файл модели models/faq.model.php

class Faq extends Model
{
    protected $name = "Вопрос ответ";

    protected $model_elements = array(
        array("Активация", "bool", "active", array("on_create" => true)),        
        array("Дата", "date_time", "date"),
        array("Имя", "char", "name", array("required" => true)),
        array("Email", "email", "email"),
        array("Порядковый номер", "order" ,"order"),
        array("Вопрос", "text", "question", array("required" => true)),
        array("Ответ", "text", "answer")
    );

    public function display()
    {
        $rows = $this -> select(array("active" => 1, "order->asc" => "order", "answer!=" => "",
                                      "limit->" => $this -> pager -> getParamsForSelect()));

        $html = "";

        foreach($rows as $row)
        {
            $html .= "<div class=\"faq-section\">\n";
            $html .= "<div class=\"question\"><span>".$row['question']."</span></div>\n";
            $html .= "<div class=\"name\">".$row['name']."</div>\n";
            $html .= "<div class=\"answer\">".nl2br($row['answer']);
            $html .= "</div>\n";
        }

        return $html;
    }
}
?>

Вносим название модели в файл config/models.php

$mvActiveModels = array('pages', 'blocks', ... , 'faq');

Создаем SQL таблицу в базе данных, после чего модель может работать в административной панели

CREATE TABLE `faq` (
  `id` int(11) NOT NULL,
  `active` tinyint(1) NOT NULL,
  `question` text NOT NULL,
  `answer` text NOT NULL,
  `order` int(11) NOT NULL,
  `date` datetime NOT NULL,
  `name` varchar(150) NOT NULL,
  `email` varchar(150) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

ALTER TABLE `faq` ADD PRIMARY KEY (`id`);
ALTER TABLE `faq` MODIFY `id` int(11) NOT NULL AUTO_INCREMENT;

Создаем файл шаблона views/view-faq.php и вносим маршрут к шаблону в файл config/routes.php

$mvFrontendRoutes = array( ... ,

"faq/" => "view-faq.php"
);

Включаем сессию для capcha и ставим секретный ключ для csrf токена в файле config/setup.php

'SessionSupport' => true,

'SecretCode' => 'hgeGy373iJndg63yrfFGsjsp084jJBh73hGfdsg62dcnUhsajhsgscDMkdeieb',

Содержимое файла шаблона views/view-faq.php

<?
$count_records = $mv -> faq -> countRecords(array("active" => 1, "answer!=" => ""));
$current_page = $mv -> router -> defineCurrentPage("page");
$mv -> faq -> runPager($count_records, 10, $current_page);

$form = new Form("Faq");
$form -> addField(array("Код безопасности", "char", "captcha", array("captcha" => "extra/captcha-simple/")));
$form -> setRequiredFields(array("name", "question", "captcha"));
$form -> useTokenCSRF();

$form_fields = array("name", "email", "question", "captcha");
$path = $mv -> root_path."faq/";

if(!empty($_POST))
{
    $form -> getDataFromPost() -> validate($form_fields);

    if($form -> getValue("captcha"))
        if(!isset($_SESSION["captcha"]) || $_SESSION["captcha"] != $form -> getValue("captcha"))
            $form -> addError("Не верно введен код безопасности.");

    if($form -> isValid())
    {
        $record = $mv -> faq -> getEmptyRecord();
        $record -> setValues($form -> getAllValues());
        $record -> date = I18n :: getCurrentDateTime();
        $record -> active = 0;
        
        $id = $record -> create();

        $adminpanel_link = "<p><a href=\"".$mv -> registry -> getSetting("HttpAdminPanelPath");
        $adminpanel_link .= "model/update.php?model=faq&id=".$id."\">Перейти на страницу вопроса</a></p>\n";

        $message = "<p>На сайте был задан новый вопрос: ".$record -> question."</p>\n".$adminpanel_link;

        Email :: send("my@email.com", "Вопрос на сайте", $message);

        $mv -> reload("?done#write-question");
    }
}

$mv -> seo -> mergeParams("Вопросы и ответы");
include $mv -> views_path."main-header.php";</span>
?>
<div id="content">
    <h1>Вопросы и ответы</h1>
    <div id="faq-questions">
        <? echo $mv -> faq -> display(); ?>
    </div>
    <?
        if($mv -> faq -> pager -> hasPages())
        {
            echo "<div class=\"pager\">\n<span>Страница</span>\n";
            echo $mv -> faq -> pager -> display($path, false);
            echo "</div>\n";
        }
    ?>

    <div id="write-question">
        <div class="header">Задать вопрос</div>
        <?
            if(isset($_GET["done"]))
                echo "<div class=\"form-success\"><p>Ваш вопрос был успешно отправлен.</p></div>\n";

            echo $form -> displayErrors();
        ?>
        <form method="post" action="<? echo $mv -> root_path; ?>faq/#write-question">
            <? echo $form -> displayVertical($form_fields); ?>
            <div class="buttons">
                <? echo $form -> displayTokenCSRF(); ?>
                <input type="submit" value="Отправить" />
            </div>
        </form>
    </div>
</div>
<?
include $mv -> views_path."main-footer.php";
?>

Предыдущий раздел

AJAX форма на jQuery

Следующий раздел

Каталог с товарами

© 2012-2023, MV framework team

English MV task tracker system Лицензия

Поделиться