MV framework logo
  • Архитектура
  • Философия
  • Админ панель
  • Поддержка
  • Обратная связь
Документация
Скачать .zip версия 3.2.0 от 25.12.2024
  • Архитектура
  • Философия
  • Админ панель
  • Поддержка
  • Обратная связь
Начало работы
  • Установка и запуск
  • Структура папок
  • Запуск простого сайта
  • Предустановленные модели
  • SQLite начало работы
  • Системные настройки
  • Миграции
  • Отладка
Модели
  • Общие принципы моделей
  • Типы данных
    • Общие характеристики
    • Булевый bool
    • Строковый char
    • Числовые int, float, order
    • Специальные строковые url, redirect, email, phone
    • Пароль password
    • Текстовый text
    • Дата и время date, date_time
    • Файл и изображение file, image
    • Массив изображений multi_images
    • Выбор enum
    • Родитель parent
    • Многие к одному many_to_one
    • Многие ко многим many_to_many
    • Группа group
  • Настройка модели
  • Простые модели
  • Внешние ключи
  • Деревья
  • Многие ко многим
  • Группа
  • Управление записями
  • Управление простыми моделями
  • Дополнительные возможности
Шаблоны и маршрутизация
  • Общие принципы шаблонов
  • Объект класса Router
  • Объект MV
  • Создание нового шаблона
  • Вывод данных в шаблоне
  • Объект класса Record
  • Файлы и изображения
  • Дата и время
  • Редиректы и Http
  • Отправка email
  • Специальные методы
Формы
  • Создание форм
  • Настройка полей формы
  • Валидация полей формы
  • Безопасность форм
  • Работа с данными формы
  • Использование данных из моделей
  • Методы форм
SQL запросы
  • Конструктор запросов
  • Прямые запросы
  • Постраничная разбивка
  • Сортировка
  • Фильтрация
Дополнительно
  • AJAX
  • Плагины
  • Кэширование
  • Безопасность
  • Дополнения к административной панели
Документация
Начало работы
  • Установка и запуск
  • Структура папок
  • Запуск простого сайта
  • Предустановленные модели
  • SQLite начало работы
  • Системные настройки
  • Миграции
  • Отладка
Модели
  • Общие принципы моделей
  • Типы данных
  • Настройка модели
  • Простые модели
  • Внешние ключи
  • Деревья
  • Многие ко многим
  • Группа
  • Управление записями
  • Управление простыми моделями
  • Дополнительные возможности
Шаблоны и маршрутизация
  • Общие принципы шаблонов
  • Объект класса Router
  • Объект MV
  • Создание нового шаблона
  • Вывод данных в шаблоне
  • Объект класса Record
  • Файлы и изображения
  • Дата и время
  • Редиректы и Http
  • Отправка email
  • Специальные методы
Формы
  • Создание форм
  • Настройка полей формы
  • Валидация полей формы
  • Безопасность форм
  • Работа с данными формы
  • Использование данных из моделей
  • Методы форм
SQL запросы
  • Конструктор запросов
  • Прямые запросы
  • Постраничная разбивка
  • Сортировка
  • Фильтрация
Дополнительно
  • AJAX
  • Плагины
  • Кэширование
  • Безопасность
  • Дополнения к административной панели
MV tracker

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

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

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

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

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

        $html = "";

        foreach($rows as $row)
        {
            $html .= "
\n"; $html .= "
".$row['question']."
\n"; $html .= "
".$row['name']."
\n"; $html .= "
".nl2br($row['answer']); $html .= "
\n"; } return $html; } }

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

$mvActiveModels = ['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 = [ ... ,

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

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

'SessionSupport' => true,

'SecretCode' => 'hgeGy373iJndg63yrfFGsjsp084jJBh73hGfdsg62dcnUhsajhsgscDMkdeieb',

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

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

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

$form_fields = ["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 = "

Перейти на страницу вопроса

\n"; $message = "

На сайте был задан новый вопрос: ".$record -> question."

\n".$adminpanel_link; Email :: send("my@email.com", "Вопрос на сайте", $message); $mv -> reload("?done#write-question"); } } $mv -> seo -> mergeParams("Вопросы и ответы"); include $mv -> views_path."main-header.php";

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

echo $mv -> faq -> display();
if($mv -> faq -> pager -> hasPages()) { echo "
\nСтраница\n"; echo $mv -> faq -> pager -> display($path, false); echo "
\n"; }
Задать вопрос
if(isset($_GET["done"])) echo "

Ваш вопрос был успешно отправлен.

\n"; echo $form -> displayErrors();
echo $form -> displayVertical($form_fields);
echo $form -> displayTokenCSRF();
include $mv -> views_path."main-footer.php";

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

AJAX форма на jQuery

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

Каталог с товарами
MV workshop banner
MV tracker

© 2014-2025, MV framework team

English MV tracker project Github

Поделиться