Вопросы и ответы
Создаем файл модели 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();
include $mv -> views_path."main-footer.php";
Предыдущий раздел
AJAX форма на jQuery