@Tema_TM

Каким образом сгенерировать html страницу и отдать клиенту только фрагмент страницы?

Доброго времени суток уважаемые программисты. Не могу понять каким образом можно получить от сервера только часть html а не всю страницу чтобы потом обновить innerHTML. Вам скорее всего будет не интересно читать споллер с низу. Мне просто нужно сгенерировать кусок html кода для клиента, но в итоге получается полная страницы с DOCTYPOM(

сначала я перенаправляю .htaccess в каталог public/index.php

AddDefaultCharset utf-8
RewriteEngine On
RewriteRule .* public/$1


в самом каталоге public

RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule .* index.php


В итоге я могу получить доступ к файлам только в public, но не app

в каталоге controllers/route.php у меня подключаються файлы в зависимости от url например news_controller.php который затем генерирует шаблон

на клиенте

(function()
{
	function idN(idN)
	{
		return document.getElementById(idN);
	}

	function ajax(method, request)
	{
		var xhr = new XMLHttpRequest();

		xhr.open(method, request, true);

		xhr.onreadystatechange = function()
		{
			if(xhr.readyState === 4)
			{
				if(xhr.status === 200)
				{
					console.log(xhr.responseText);

					for(var n = 0; document.querySelectorAll('ul li a').length > n; n++)
					{
						document.querySelectorAll('ul li a')[n].onclick = function()
						{
							spa(this.href);

							ajax('POST', '/app/controllers/route.php?controller=' + this.href);

							return false;
						}
					}
				}

				else console.log(xhr.status + ' ' + xhr.statusText);
			}
		}

		xhr.send(null);
	}

	function spa(links)
	{
		history.pushState(null, null, links);
	}

	window.onpopstate = function()
	{
		ajax('POST', '/app/controllers/route.php?controller=' + location.href);
	}

	ajax('POST', '/app/controllers/route.php?controller=' + location.href);
}());


<?php

	$views = 
	[
		'header',
		'profile_header',
		'content',
		'footer'
	];<code lang="php">

<code lang="php">
<?php

	$controller = clean_str($_SERVER['REQUEST_URI']);
	$controller = explode('/', rtrim($controller, '/'));

	function get_controller($controller)
	{
		if(empty($controller[0]) && empty($controller[1]))
		{
			if(logedin()) $controller = 'news';
			else $controller = 'login';
		}

		else if(empty($controller[0]) && !empty($controller[1]) && empty($controller[2]))
		{
			if(logedin())
			{
				if($controller[1] === 'id'.user_id()) $controller = 'id';
				else $controller = $controller[1];
			}

			else $controller = 'login';
		}

		else
		{
			header("HTTP/1.0 404 Not Found");
			exit;
		}

		return $controller;
	}

	$controller = get_controller($controller);

	require_once $controller . '_controller.php';
</code>

У меня есть такая структура:

app
--config
---config.php
--model
---model.php
--views
---ui
----header.php
----footer.php
---index.php
--controllers
---route.php
---news_controller.php
--helper
---helper.php
--bootstrap.php
public
--css
--js
--fonts
--icons
--images
--index.php
--.htaccess
.htaccess
  • Вопрос задан
  • 335 просмотров
Пригласить эксперта
Ответы на вопрос 1
ThunderCat
@ThunderCat Куратор тега PHP
{PHP, MySql, HTML, JS, CSS} developer
чет не совсем понятно, что там с роутами и вью, в нормальной системе просто делается кусок хтмл как нужно, и в контроллере логика выбирает что рендерить - шаблон целиком или только кусок из нужного файла, и вью уже рендерит что надо - всю страницу с хедером футерам и проч, или чисто файлик. Так как не вижу как у вас все это работает - описал общий принцип.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы