По ходу изучения ООП начал писать небольшой сайт по видеокурсу. Со временем появились небольшие проблемы, но больше всего меня интересует как правильно вывести страницы меню. По курсу предлагался код абстрактного класса:
<?php
abstract class func {
public function __construct() {
include "modules/db_connection.php";
}
protected function get_header() {
include "header.php";
}
protected function get_sidebar() {
include "sidebar.php";
}
public function get_body() {
$this->get_header();
$this->get_sidebar();
$this->get_content();
}
abstract function get_content();
}
?>
Файл индекса:
<?php
session_start();
header("Content-Type:text/html; charset:CP1251");
require_once("classes/func.php");
if(isset($_GET['option'])) {
$class = trim(strip_tags($_GET['option']));
$class = htmlspecialchars($class);
} else {
$class = "main";
}
if(file_exists("classes/".$class.".php")) {
include ("classes/".$class.".php");
if(class_exists($class)) {
$Page = new $class;
$Page->get_body();
} else {
echo "Страница не найдена!";
}
} else {
echo "Страница не найдена!";
}
?>
И сам файл, где находится меню, в нем и генерируются ссылки:
<?php
$result = @mysql_query('SELECT * FROM `menu` ');
if(!$result) {
exit("Ошибка запроса в БД!");
}
$row = array();
echo "<div class='sidebar f_left'>
<div class='top_bar'>
<div class='nav'>Навигация</div>
<ul>
<li><a href='index.php'>Главная</a></li>";
for($i = 0;$i < mysql_num_rows($result);$i++) {
$row = mysql_fetch_array($result, MYSQL_ASSOC);
printf("<li><a href='?option=menu&page=%s'>%s</a></li>", $row['href_menu'], $row['name_menu']);
}
echo "</ul>
</div>
</div>";
?>
Ссылки сгенерированы и вроде правильно, но по курсу надо в бд в таблице меню надо добавить поле "содержимое" и скрипт будет из него выбирать его и выводить на страницу по сгенерированой ссылке. По курсу все страницы меню однотипны, но мне надо для каждой страницы разные данные и их верстка. Инклудить страницы, думаю, неправильно... Гугли много, но найти ответа на этот вопрос не мог. Есть идеи изменить код самого класса func и в соответствии с ним как-нибудь сделать вывод страницы с меню, но сомневаюсь, что получится.
Вот сам код класса menu:
<?php
class menu extends func {
public function get_content() {
$page = $_GET['page'];
$page = trim($page);
$page = htmlspecialchars($page);
$page = strip_tags($page);
$query = "SELECT name_menu FROM menu WHERE href_menu = '$page'";
$result = @mysql_query($query);
if(!$result) {
echo "Ошибка запроса в БД!";
}
$row = array();
$row = @mysql_fetch_array($result, MYSQL_ASSOC);
if(!empty($row['name_menu'])) {
include "../www/modules/".$page.".php";
} else {
echo "Страница не найдена!";
}
}
}
?>
Может через конструкцию return передать в индексный файл "$Page = new $page;"?