Задать вопрос
@lol_vova

Как правильно сгенерировать ссылки для пунктов меню и вывести страницы?

По ходу изучения ООП начал писать небольшой сайт по видеокурсу. Со временем появились небольшие проблемы, но больше всего меня интересует как правильно вывести страницы меню. По курсу предлагался код абстрактного класса:
<?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;"?
  • Вопрос задан
  • 620 просмотров
Подписаться 1 Оценить Комментировать
Решения вопроса 1
@heartdevil
плыву как воздушный шарик
Привет.

Содержимое же у вас какое ходите может быть для любой страницы.
А верстку лучше подогнать однотипную. Но если вам нужна разная верстка, тогда нужно подредактировать абстрактный класс. Надо открыть там хидер и футер для переопределения. Тогда в производных классах вы сможете полностью управлять версткой.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

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