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/news.model.php

<?
class News extends Model
{
    protected $name = "Новости";

    protected $model_elements = array(
        array("Активация", "bool", "active", array("on_create" => true)),
        array("Дата", "date", "date", array("required" => true)),
        array("Название", "char", "name", array("required" => true)),
        array("Ссылка", "url", "url", array("unique" => true, "translit_from" => "name")),
        array("Изображение", "image", "image"),
        array("Текст новости", "text", "content", array("rich_text" => true))
);
?>

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

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

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

CREATE TABLE `news` (
  `id` int(11) NOT NULL,
  `active` tinyint(1) NOT NULL,
  `name` varchar(250) NOT NULL,
  `date` date NOT NULL,
  `image` varchar(250) NOT NULL,
  `url` varchar(200) NOT NULL,
  `content` text NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

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

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

$mvFrontendRoutes = array( ... ,

"news/" => "view-news.php",
"news/*/" => "view-news-details.php"
);

Добавляем методы в файл модели

public function defineNewsPage(Router $router)
{
   $url_parts = $router -> getUrlParts();
   $record = false;

   if(count($url_parts) == 2)
       if(is_numeric($url_parts[1]))
           $record = $this -> findRecord(array("id" => $url_parts[1], "active" => 1));
       else
           $record = $this -> findRecord(array("url" => $url_parts[1], "active" => 1));

   return $record;
}

public function display()
{
    $params = array("active" => 1, "order->desc" => "date", 
                    "limit->" => $this -> pager -> getParamsForSelect());

    $rows = $this -> select($params);
    $html = "";

    foreach($rows as $row)
    {
        $url = $this -> root_path."news/".($row['url'] ? $row['url'] : $row['id'])."/";

        $html .= "<div class=\"news-wrapper\">\n";
        $html .= "<h2><a href=\"".$url."\">".$row['name']."</a></h2>\n";
        $html .= "<p class=\"news-date\">".I18n :: formatDate($row['date'])."</p>\n";

        if($row['image'])
        {
            $html .= "<a href=\"".$url."\" class=\"news-image\">\n";
            $html .= $this -> cropImage($row['image'], 187, 127)."</a>\n";
        }

        $html .= "<p class=\"news-content\">".Service :: cutText($row['content'], 350, " ...")."</p>\n";
        $html .= "</div>\n";
    }

    return $html;
}

public function displayPreviousAndNext($current_id, $current_date)
{
    $html = "";
    $params = array("active" => 1, "id!=" => $current_id, "date>=" => $current_date, "order->asc" => "date");

    if($record = $this -> findRecord($params))
    {
        $url = $this -> root_path."news/".($record -> url ? $record -> url : $record -> id)."/";
        $html .= "<a class=\"previous\" href=\"".$url."\">Предыдущая новость</a>\n";
    }

    $params = array("active" => 1, "id!=" => $current_id, "date<=" => $current_date, "order->desc" => "date");

    if($record = $this -> findRecord($params))
    {
        $url = $this -> root_path."news/".($record -> url ? $record -> url : $record -> id)."/";
        $html .= "<a class=\"next\" href=\"".$url."\">Следующая новость</a>\n";
    }

    return $html;
}

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

<?
$count_records = $mv -> news -> countRecords(array("active" => 1));
$current_page = $mv -> router -> defineCurrentPage("page");
$mv -> news -> runPager($count_records, 7, $current_page);

$path = $mv -> root_path."news/";

$mv -> seo -> mergeParams("Новости");
include $mv -> views_path."main-header.php";
?>
<div class="wrapper">
    <div id="content">
        <div class="breadcrumbs">
            <a href="<? echo $mv -> root_path; ?>">Главная</a>
        </div>
        <h1>Новости</h1>
        <div class="news-list">
        <?
            echo $mv -> news -> display();

            if($mv -> news -> pager -> hasPages())
            {
                echo "<div class=\"pager\">\n<span>Страница</span>\n";
                echo $mv -> news -> pager -> displayPrevLink("предыдущая", $path);
                echo $mv -> news -> pager -> display($path, false);
                echo $mv -> news -> pager -> displayNextLink("следующая", $path);
                echo "</div>\n";
            }
        ?> 
        </div>
    </div>
</div>
<?
include $mv -> views_path."main-footer.php";
?>

Содержимое файла шаблона view-news-details.php

<?
$record = $mv -> news -> defineNewsPage($mv -> router);
$mv -> display404($record);
$mv -> seo -> mergeParams($record, "name");

include $mv -> views_path."main-header.php";
?>
<div class="wrapper">
    <div id="content">
        <div class="breadcrumbs">
            <a href="<? echo $mv -> root_path; ?>">Главная</a>
            <a href="<? echo $mv -> root_path; ?>news/">Новости</a>
        </div>
        <h1><? echo $record -> name; ?></h1>
        <div class="news-inside-date"><? echo I18n :: formatDate($record -> date); ?></div>
        <div class="news-inside-content">
        <?
            echo $mv -> news -> cropImage($record -> image, 383, 258);
            echo $record -> content;
        ?>
        </div>
        <div id="previous-next">
            <? echo $mv -> news -> displayPreviousAndNext($record -> id, $record -> date); ?>
        </div>   
    </div>
</div>
<?
include $mv -> views_path."main-footer.php";
?>

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

Template

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

Слайдер с баннерами

© 2012-2023, MV framework team

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

Поделиться