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