@yagyar001

Как правильно подключать файлы и элементы в php?

Всем привет. Я начинающий разработчик. По мере увеличения сложности и объемности практики, возникает вопрос, как правильно подключать все элементы проекта? У меня возникает путаница постоянно. Вот пример сегодняшнего проекта (проект объявления), да простит меня авито, я просто тренируюсь и не более)). Суть дела, вот мой индексный файл:
<!DOCTYPE html>
<html lang="ru">
<head>
	<meta charset="UTF-8">
	<link href="https://fonts.googleapis.com/css?family=Roboto:300,400,500,700,900,900i" rel="stylesheet">
	<link rel="stylesheet" href="css/style.css?v=3">
	<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css" integrity="sha384-ggOyR0iXCbMQv3Xipma34MD+dH/1fQ784/j6cY/iJTQUOhcWr7x9JvoRxT2MZw1T" crossorigin="anonymous">

	<title>Avito</title>
</head>
<body>
	<header>
		<?php include 'pages/header.php'; ?>
	</header>

	<div class="top_content">
		<?php 
			if (isset($_GET['add'])) {
				include 'pages/add_ad.php';
			} else {
				include 'pages/top_content.php'; 
			}
		?>
	</div>
	<footer>
		
	</footer>
</body>
</html>

Вот файл top_content
<?php 
	include './connectdb.php'; 
	
	if ($_POST['city'][0] >= '1') {
		$city = $_POST['city'][0];
		$query = "SELECT * FROM transport LEFT JOIN cities ON transport.city = cities.id WHERE cities.id = $city";	
	}
	else {
		$query = "SELECT * FROM transport LEFT JOIN cities ON transport.city = cities.id";
	}
		$result = mysqli_query($link, $query);
		for ($data = []; $row = mysqli_fetch_assoc($result); $data[] = $row);
		$content = '';
		foreach ($data as $elem) {
			$content .= "<div class=\"top_content_block\">";
				$content .= "<div class=\"top_content_block_img\">
									<img src=\".$elem[link_img]\" alt=\"\">
								</div>";
				$content .= "<div class=\"top_content_block_info\">";
					$content .= "<a href=\"\"><h3 class=\"top_content_block_info_link\">$elem[make] $elem[model], $elem[year]</h3></a>";
					$content .= "<div class=\"top_content_block_info_price\">
										<span class=\"top_content_block_info_price_span\">$elem[price] р.</span>
									</div>";
					$content .= "<span class=\"top_content_block_info_drive\">$elem[drive]</span>";
					$content .= "<span class=\"top_content_block_info_city\">$elem[city]</span>";

				$content .= "</div>";
			$content .= "</div>";
		}
		echo $content;
?>


А вот файл с добавлением нового объявления add_ad.
<?php 
	include './connectdb.php'; 
?>
<div class="new_add">
	<form action="" method="POST">
		<h2 class="new_ad_header">Создание нового объявления</h2>
		<h4>Выберете категорию</h4>
		<div class="new_ad_transport_wrap">
			<select class="new_ad_transport" name="add_category[]">
				<option value="0">Весь транспорт</option>
				<?php 
					$query = "SELECT * FROM categories";
					$result = mysqli_query($link, $query);
					for ($data = []; $row = mysqli_fetch_assoc($result); $data[] = $row);
					$contentCategory = '';
					foreach ($data as $elem) {
						$contentCategory .= "<option value=\"$elem[id]\" class=\"\">$elem[name]</option>";

					}
					echo $contentCategory;
				?>
			</select>
		</div>
		<h4>Выберете город</h4>
		<div class="new_ad_city_wrap">
			<select class="new_ad_city" name="add_city[]">
				<option value="0">Любой город</option>
					<?php 
						$query = "SELECT * FROM cities";
						$result = mysqli_query($link, $query);
						for ($data = []; $row = mysqli_fetch_assoc($result); $data[] = $row);
						$contentCity = '';
							foreach ($data as $elem) {
								if ($elem['id'] == $_POST['city'][0]) {
									$selected = 'selected';
								} else {
									$selected = '';
								}
								$contentCity .= "<option $selected value=\"$elem[id]\">$elem[city]</option>";
							}
							echo $contentCity;
					 ?>
			</select>
		</div>
		<input class="new_ad_submit" type="submit">
	</form>
</div>

И на этом у меня ступор. Я не знаю как правильно организовать подключение файлов и элементов. Просто не понимаю этого. Фреймворки и ООП я еще не изучал. Объясните пожалуйста, кому не сложно, как это все нужно делать грамотно? С хедером и футером все ясно, подключил и забыл. Но как выводить топ контент я не понимаю просто. Не создавать же для каждого элемента проекта новую страницу с футером и хедером. Это глупо же наверное. Объясните пожалуйста.
  • Вопрос задан
  • 114 просмотров
Решения вопроса 4
usdglander
@usdglander Куратор тега PHP
Yipee-ki-yay
Фреймворки и ООП я еще не изучал.

Может уже пора?
А вообще копайте в сторону MVC.
Ответ написан
AnatolTh
@AnatolTh
Full Stack Developer
Продумайте структуру с единой точкой входа, например:
www
-index.php
app
-core.php
-functions.php
-db.php
-footer.php
-header.php
-index
--i.php
--conf.php

В index.php подрубайте core.php в котором реализуйте роутинг
require_once ( "../app/core.php" );

// пример роутинга
if ( file_exists("../app/".$module."/conf.php") ) {
   require_once ( $module."/conf.php" );
   require_once ( "header.php" );
   require_once ( $module."/i.php" );
   require_once ( "footer.php" );
} else {
   require_once ( "404/i.php" );
}
Ответ написан
Комментировать
seganim
@seganim
PHP-программист, программный инженер
1. Изучите MVC, очень поможет. Отдельно данные, отдельно отрисовка
2. Попробуйте использовать простенький роутер, если что могу скинуть библиотеку. Попробуете себя в самописных сайтах по подомию фреймворков.
3. Изучайте фреймворк, рекомендую Yii2 как самый дружелюбный
Ответ написан
Комментировать
FanatPHP
@FanatPHP
Чебуратор тега РНР
phpfaq.ru/tech/tpl
Также, для общего развития, phpfaq.ru/newbie/paths
Ну и когда такой структуры в свою очередь перестанет хватать, то https://symfony.ru/doc/current/introduction/from_f...
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы
YCLIENTS Москва
от 200 000 до 350 000 ₽
Ведисофт Екатеринбург
от 25 000 ₽
ИТЦ Аусферр Магнитогорск
от 100 000 до 160 000 ₽
25 апр. 2024, в 09:29
2500 руб./за проект
25 апр. 2024, в 09:27
4000 руб./за проект
25 апр. 2024, в 09:20
10000 руб./за проект