Вопросы и ответы
Создаем файл модели 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"; ?>