2013-06-14 2 views
0

Для большинства моих проектов я создаю интерфейс администрирования, который имеет одинаковый дизайн для каждого проекта. Конструкция заголовка, нижнего колонтитула, верхней панели, левого, css и т. Д. Всегда одинакова. Жаль, что каждый раз создавайте представления; поэтому я подумал: может быть, есть хороший способ разместить интерфейс администратора в моей библиотеке MVC, поскольку он повторно используется каждым проектом?Многоразовый пользовательский интерфейс в PHP?

Но на данный момент, в каждом зрении я получил код вроде следующий:

<?php $this->_include('/includes/doctype.php'); ?> 
<head> 
    <?php $this->_include('/includes/head.php'); ?> 
    <title>Some title</title> 
</head> 
<body> 
<?php $this->_include('/includes/topbar.php'); ?> 
<div id="page"> 
<?php $this->_include('/includes/header.php'); ?> 
<?php $this->_include('/includes/leftmenu.php'); ?> 
<div id="content" role="main"> 

    <h1>Some title</h1> 

    <p>Blah blah blah.</p> 

</div><!-- /#content --> 
<?php $this->_include('/includes/footer.php'); ?> 
</div><!-- /#page --> 
</body> 
</html> 

было бы хорошая идея, чтобы извлечь пользовательский контент из структуры интерфейса, и поместить эту структуру в моя библиотека каким-то образом сделает ее многоразовой? После этого, как можно настроить название и фактические меню?

+0

Большая часть фреймворков поддерживает макеты. Поэтому вы можете поместить повторяющиеся вещи в макет и указать его в контроллере. –

+0

Я создал свою собственную MVC-структуру, поэтому, я думаю, мне нужно узнать, как работают эти механизмы макета. – Matthew

+1

Существует несколько способов сделать это: макеты, просмотр справки, составные представления и hmvc. YMMV. – Gordon

ответ

0

Я делаю это все время. У меня есть пользовательский файл верхнего и нижнего колонтитула, который вызывается в начале и конце каждой страницы.

<?PHP 
Require("includes/header.php"); 

... 


Require("includes/footer.php"); 
?> 

Заголовок содержит базы данных ручки, строку DATETIME и ручку входа в системе, специальных разрешения, протоколирование и т.д. просмотры страниц

Колонтитул обеспечивает стандартный HTML страницу, но включает в себя некоторые систематизированы переменных. Он также генерирует меню динамически из ведущей базы данных, затем закрывает соединение с базой данных.

Этот способ, когда я пишу код, не смешивается в HTML, и любые ошибки легко найти.

Я люблю переменные родственным:

$display_scripts - adds extra data in the head section. 
$display_onload_scripts - adds onload scripts to body section. 
$display_style_sheets - option to include link to additional stylesheets 
$display_above_menu - will appear above the menubar. NOT recommended. 
$display_below_menu - will appear immediately below the menubar. 
$display_one_column - page contents when only one column is to be used 
$display_left_column - page contents when two columns used. Left pane. 
$display_right_column - page contents when two columns used. Right pane. 
$display_footer - appears in footer division. 

Мой главный код, то просто должен сгенерировать соответствующую переменную. По сути, вам нужно изучить источник хорошего возраста, который вы создали, а затем заменить материал, который хотите изменить, с помощью переменных.

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

// Code here generates the menu from database 
// Code here genereates popup alert messages from other users 

//permanent links to external style sheets go here. 
//You can also select skins here. 

<?PHP 
echo $display_style_sheets; 
echo "<title>".$display_page_title."</title>"; 
?> 

<script type="text/javascript" src="JAVASCRIPT GOES HERE.js"></script> 

</head> 

<body <?PHP echo $display_onload_scripts;?> > 



<div id="page_area" > 
     <div id="banner"> 
    </div> 

    <?php 
    echo $display_above_menu; 
    if(!$hide_menu){echo $display_menu;} //Insert the menu variable here. 
    echo $display_below_menu; 
    ?> 

<div id="content_area"> 
<div id="inner_content"> 

<?PHP 
if($display_number_of_columns==1) 
    { 
    echo "<div id='onecolumn'>".$display_one_column."</div>"; //I only use this one 
    } 
if($display_number_of_columns==2) 
    { 
    echo "<div id='leftcolumn'>".$display_left_column."</div>"; //these are left for legacy support from before I got better at CSS. 
    echo "<div id='rightcolumn'>".$display_right_column."</div>"; 
    } 
echo "<div id='footer'>".$display_footer."</div>"; //just in case - I hardly use it. 
echo $display_pop_box; //for user alert messages to other users 
?> 

</div> 
</div> 
</div> 

<div id="logbox"> Automatic Logout statement</div> //this is called by JS to activate timeouts. 

</body> 
</html> 

<?PHP 
$mysqlidb->close(); 
?> 

К сожалению, это так много кода. Макет позволяет легко адаптироваться и упрощает поиск нарушающей переменной, если все идет не так, как ожидалось. Есть более элегантные решения, но это хорошо работает для меня и очень быстро.