X   Сообщение сайта
(Сообщение закроется через 3 секунды)



 

Здравствуйте, гость (

| Вход | Регистрация )

Открыть тему
Тема закрыта
> Паттерн MVC. В браузере не отображается содержимое одного из файлов.
Pavl_mw
Pavl_mw
Topic Starter сообщение 23.7.2020, 16:53; Ответить: Pavl_mw
Сообщение #1


Добрый день!
Есть файл index.php:

<?php
require_once 'start.php';
Route::start();

который ссылается на файл start.php:

<?php
set_include_path(get_include_path().PATH_SEPARATOR.'core'.PATH_SEPARATOR.'controllers');
spl_autoload_extensions('_class.php');
spl_autoload_register();
define('DIR_TMPL', 'C:/OSPanel/domains/test/www/rusakov/tmpl/');
define('MAIN_LAYOUT', 'main');

При заходе на index.php отображается содержимое двух файлов.
main.tpl:

<!DOCTYPE_html>
<html lang="ru">
<head>
<title><?=$title?></title>
<meta http-equiv="Content-Type" content="<?=$meta_desc?>">
<meta name="description" content="<?=$meta_desc?>">
<meta name="keywords" content="<?=$meta_keyword?>">
</head>
<body>
<header>
<h1>Добро пожаловать!</h1>
</header>
<hr />
<div id="content"><?=$content?></div>
<hr />
<footer>С уваженем, команда нашего сайта.</footer>
</body>
</html>

и 404.tpl:

<h1>Страница не найдена</h1>
<p>Запрошенной страницы не существует!</p>
<p><a href="index">Главная страница</a></p>

Вопрос - почему браузер не находит и не выводит на экран содержимое файла index.tpl? Ведь этот файл лежит в одной папке с main.tpl и 404.tpl.
То есть, по идее, когда открываешь index.php, вместо содержимого 404.tpl, должно выводиться содержимое index.tpl, но так почему-то не происходит.
Файл index.tpl:

<h1>Главная страница</h1>
<p>Наш сайт только разрабатывается</p>
<p><a href="/page">Внутренняя страница</a></p>

Если необходимо, выложу содержимое других файлов: maincontroller_class.php, view_class.php, page.tpl и другие.
Содержимое папки tmpl:
Прикрепленное изображение



Сообщение отредактировал Pavl - 23.7.2020, 16:55
0
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
miketomlin
miketomlin
сообщение 24.7.2020, 14:55; Ответить: miketomlin
Сообщение #2


(Pavl @ 23.7.2020, 19:53) *
То есть, по идее, когда открываешь index.php, вместо содержимого 404.tpl, должно выводиться содержимое index.tpl, но так почему-то не происходит.

Нет. Файл index.php – это фронт-контроллер. Если специально не определен /index.php, как валидный адрес, то будет отрабатывать шаблон 404.
 
Почитайте про роутинг. Вы должны определить конкретные адреса или адресные маски и привязать к ним обработчики, иначе по всем адресам будет выдаваться 404-ая. Например, в G-Drive и т.п. для определения страницы /page нужно создать в основной таблице запись с id="page" (и module="handler", если хотите, чтобы использовался шаблон handler.php, а не page.php).
P.S. Даже для главной (/) нужно определять спец. обработчик, иначе будет выдаваться 404-ая. Например, см. первую запись первой таблицы здесь ;)


Сообщение отредактировал BLIK - 25.7.2020, 15:57
Причина редактирования: удалил один url


--------------------
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
Pavl_mw
Pavl_mw
Topic Starter сообщение 24.7.2020, 16:51; Ответить: Pavl_mw
Сообщение #3


miketomlin, дело в том, что я писал этот код с видеоурока, который нашёл в интернете. Делал всё точь-в-точь, как в видеоуроке. С одним отличием - возможно я слишком глубоко в файловой системе разместил эти страницы. У автора урока код нормально работает, все страницы отображаются, а у меня нет. Возможно, я что-то напутал с путями к файлам, но, как это определить, ведь в браузере не появляется ошибка, что не найден, какой-то файл или папка? Появляется, только сообщение ""Страница не найдена", но опять же - это созданная страница 404.tmpl, а не ответ браузера.
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
miketomlin
miketomlin
сообщение 24.7.2020, 23:33; Ответить: miketomlin
Сообщение #4


Когда вы копируете, вникайте в каждую строчку, при необходимости корректируйте с возможностью отката к оригиналу. В упомянутом мной фронте все предельно просто, например:

// Определили каталог для шаблонов и т.п. относительно фронта (тек. файла)
define('PATH',__DIR__.'/mods/');

...

// Подключили файл из определенного каталога
require PATH.$r0['module'].'.php';

$r0['module'] содержит значение поля module основной таблицы (или поля id, если в таблице поле module отсутствует или содержит пустое значение).
У вас имя каталога шаблонов, судя по названию, задается константой DIR_TMPL. Хардкодить абсолютные пути – близко к идиотизму. Используйте абсолютные, но определяйте через какую-то базу, как я показал.


--------------------
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
Pavl_mw
Pavl_mw
Topic Starter сообщение 25.7.2020, 0:51; Ответить: Pavl_mw
Сообщение #5


(miketomlin @ 25.7.2020, 02:33) *
$r0['module'] содержит значение поля module основной таблицы (или поля id, если в таблице поле module отсутствует или содержит пустое значение).

В видеоуроке даже речи не идёт о создании таблиц и подключении к базе данных, несмотря на значительное количество созданных папок и файлов! У автора и без базы данных всё хорошо работает. Или Вы это прекрасно понимаете, но настаиваете, что нужно создать таблицу для выполнения текущего задания, так как по Вашему мнению так будет гораздо лучше и правильнее?
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
miketomlin
miketomlin
сообщение 25.7.2020, 10:59; Ответить: miketomlin
Сообщение #6


Это был всего лишь наглядный пример того, как работает роутинг. Если у вас нет таблицы в БД, то должна быть «таблица» в файлах (список роутов) или последовательный многократный вызов функции, которой в одном из параметров передается адрес (или маска), обращение по которому нужно обрабатывать.
 
(Pavl @ 25.7.2020, 03:51) *
по Вашему мнению так будет гораздо лучше и правильнее?

Попытайтесь «добить» до конца свой вариант. Потом переходите к изучению чего-то другого. Основные виды роутинга я перечислил. У каждого есть свои преимущества. Кроме того, их можно совмещать, например в этом комменте (см. фрагмент кода) показано, как можно к упомянутому мной фронту прикрутить элемент совсем другого вида роутинга, чем упомянутый мной табличный на основе данных из БД (который используется там же внутри второго блока ветвления, т.е. elseif).
P.S. Конечно, может быть и примитив вроде определения имени файла непосредственно из адреса, например из /page получается имя page.php или page.tpl, потом проверяется существование этого файла и т.д. Но такие вещи даже рассматривать не надо.

Замечание модератора:
Эта тема была закрыта автоматически ввиду отсутствия активности в ней на протяжении 100+ дней.
Если Вы считаете ее актуальной и хотите оставить сообщение, то воспользуйтесь кнопкой
или обратитесь к любому из модераторов.


--------------------
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
Открыть тему
Тема закрыта
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0


Свернуть

> Похожие темы

  Тема Ответов Автор Просмотров Последний ответ
Открытая тема (нет новых ответов) Не открывается maultalk.com в браузере Хром
4 noviktamw 1865 18.1.2024, 6:23
автор: Skyworker
Открытая тема (нет новых ответов) Автоматизация работы в браузере (BAS)
11 Moonsoon 7351 11.4.2023, 6:23
автор: Skyworker
Открытая тема (нет новых ответов) Куплю выгрузку из serp stat для одного домена
serp stat для одного домена
1 Smartseowork 1552 24.5.2022, 20:49
автор: Latinos
Открытая тема (нет новых ответов) ZennoPoster-услуги по написанию ботов, автоматизация работы в браузере. Сбор любых баз.
ZennoPoster-услуги по написанию шаблонов
0 Progernaut 1184 13.11.2020, 20:20
автор: Progernaut
Открытая тема (нет новых ответов) FinFile - новые возможности для монетизации Ваших файлов!
3 FileXmaster 2051 25.7.2020, 16:10
автор: -Condis-


 



RSS Текстовая версия Сейчас: 29.3.2024, 19:05
Дизайн