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

Машрутизация вида /blog/test_page/

Ответов: 8
Артём
22.04.2016 16:46

Добрый день! Для начала хотел бы поблагодарить за фреймворк. Работа проделана отличная. Разбираюсь в тонкостях и запутался в простой казалось бы теме... Через стандартную модель pages в панели администратор создал страницу /blog/. Она доступна по обозначенному URL. После создаю /test_page/, корневой ставлю /blog/. Через маршрутизацию настроил "blog/*/" => "view-blog.php". Однако /blog/test_page/ не выводит запись блога. В свою очередь страница доступна по корневому URL /test_page/. Если я верно понял - нужно в шаблоне сделать разбор getUrlPart(), но как именно не очень ясно. Буду благодарен за объяснение.

И ещё момент. Допустим я хочу организовать слайдер на главной. Каким образом мне лучше организовать его администрирование на базе фреймворка? Пример вывода слайдера даю ниже:

<img src="/userfiles/images/main_slider/1.jpg">
                <img src="/userfiles/images/main_slider/2.jpg">
                <img src="/userfiles/images/main_slider/3.jpg">
                <img src="/userfiles/images/main_slider/4.jpg">
Прочтений: 1688
Ответов: 8
Admin
22.04.2016 18:14

Артём, добрый день, спасибо за комплимент.
Вот как лучше поступить с блогом, нужно сделать отдельную модель, в которой будет список статей и 2 вьюхи. На одной будут все статьи, а на другой отдельная статья.

В модели pages у вас останется только ссылка /blog/ для перехода в общий список статей, если вы ее отобразите в меню.

//Модель
class Blog extends Model
{
    protected $name = "Блог";

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

//Маршруты
"blog/" => "view-blog.php",
"blog/*/" => "view-blog-article.php"


//Разбор url в модели
public function defineBlogPage(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;
}

//Страница блога view-blog-article.php
$mv -> pages -> defineCurrentPage($mv -> router); //Если нужно подсветить пункт меню
$article = $mv -> blog -> defineBlogPage($mv -> router);
$mv -> display404($article);

$mv -> seo -> mergeParams($article, "name");
include $mv -> views_path."main-header.php";
<div id="content">

    ...

</div>
include $mv -> views_path."main-footer.php";
Admin
22.04.2016 18:34

Теперь при создании в модели блога страницы с url "test_page" она будет доступна по ссылке /blog/test_page/

самый простой пример вывода галереи есть тут
http://mv-framework.ru/sozdanie-novogo-shablona/

или еще можно делать отдельную модель как с блогом, только вместо статей будут изображения в поле с типом image

Артём
23.04.2016 20:43

Спасибо за разъяснение. А если речь не идёт о блоге? Допустим есть страница /main_page/ и в нее нужно две-три подстраницы сделать /main_page/page_1/, /main_page/page_2/. Городить функционал ленты новостей, блога уже нет смысла, так как это всего пара подстраниц. Как быть в этом случае? Как понимаю в модели pages для page_1 и page_2 указываем корневым main_page. Но как эти страницы вывести теперь? Надеюсь понятно сформулировал вопрос.

Admin
24.04.2016 15:35

Артём, тут дело в том, что модель pages, которая сразу идет в комплекте, работает с url вида /page/25/ и /name/, т.е. page + число либо читабельный url в 1 ступень.

Все перечисленные url в системе идут на view-default.php, там проходят через defineCurrentPage() если в БД страница не была найдена, то покажется 404.

А далее, можно развивать с помощью маршрутизации, подробные примеры тут
http://mv-framework.ru/obshie-principy-shablonov/

Т.к. URL вида /main_page/page_1/ не будет соответствовать ни одному шаблону в маршрутизации,
то придет на view-default.php, сразу 404 MV не показывает, а переводит на дефолтный шаблон. Если немного дополнить defineCurrentPage() в pages, то можно обработать и /main_page/page_1/

else if(count($url_parts) == 2 && $url_parts[0] == "main_page" && !is_numeric($url_parts[1]))
    $params = array("url" => $url_parts[1], "active" => 1);
Артём
24.04.2016 18:50

Потихоньку начинаю понимать. Действительно после редактирования модели - заработало. Однако страница остаётся активной и по адресу /page_1/, что не очень хорошо для SEO.

Admin
25.04.2016 10:20

Да, подобная ситуация вообще актуальна для любого вида читабельных URL, когда в ссылку ставится не id, а текстовая часть URL, и страница становится доступна по обоим параметрам...

Артём
25.04.2016 10:25

Это никак не побороть? Если обе страницы каким-то образом попадут в индекс поисковиков - это будут дубли страниц, что в результате может не очень хорошо отразиться в индексе поисковых систем.

Admin
25.04.2016 17:35

Если на сайте не будет прямой ссылки на страницу, то в индекс она попасть не должна, а для подстраховки можно попробовать не показывать страницу если она запрошена по одноступенчатому url. Но это еще надо проверить на практике, чтобы не перекрыло другие модули...

Т.е. если страница лежит не в корне (parent не -1) и запрошена по последнему фрагменту url, то мы ее как бы не нашли.

В defineCurrentPage()

if($record && $record -> parent != -1 && count($url_parts) == 1)
    return false;
Ответить на вопрос
Ответить
MV tracker

© 2014-2025, MV framework team

English MV tracker project Github

Поделиться