2013-06-14 1 views
0

Pour la plupart de mes projets, je crée une interface d'administration qui a le même design pour chaque projet. La conception de l'en-tête, du pied de page, de la barre supérieure, du menu de gauche, du css, etc. est toujours la même. C'est dommage de créer les vues à chaque fois; donc je pensais: peut-être qu'il y aurait une bonne façon de mettre l'interface d'administration dans ma bibliothèque MVC, car elle est réutilisée par tous les projets?Interface utilisateur réutilisable en PHP?

Mais pour le moment, dans chaque point de vue unique, je suis arrivé code comme les suivantes:

<?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> 

Serait-ce une bonne idée d'extraire le contenu personnalisé à partir de la structure de l'interface, et de mettre cette structure en ma bibliothèque en quelque sorte pour le rendre réutilisable? Après cela, comment sera-t-il possible de personnaliser le titre et les menus actuels?

+0

La plupart des cadres prennent en charge les dispositions. Vous pouvez donc placer les éléments récurrents dans une disposition et les spécifier dans le contrôleur. –

+0

J'ai créé mon propre framework MVC, donc je suppose que je dois apprendre à connaître le fonctionnement de ces mécanismes de mise en page. – Matthew

+1

Il existe plusieurs façons de le faire: les mises en page, les vues, les vues composites et hmvc. ymmv. – Gordon

Répondre

0

Je le fais tout le temps. J'ai un entête et un pied de page personnalisés qui sont appelés au début et à la fin de chaque page.

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

... 


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

L'en-tête fournit une poignée de base de données, une chaîne datetime et poignées d'ouverture de session, privilèges, enregistrement des pages vues, etc.

Le pied de page fournit une page HTML standard, mais comprend certaines variables systématisées. Il génère également le menu dynamiquement à partir de la base de données de conduite puis ferme la connexion à la base de données.

De cette façon, lorsque j'écris du code, je ne me mêle pas du HTML et les bugs sont faciles à trouver.

J'aime les variables semblables à:

$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. 

Mon code principal, puis il suffit de générer la variable appropriée. Fondamentalement, ce que vous devez faire est d'examiner la source d'un bon âge que vous avez produit, puis remplacez les choses que vous voulez changer avec des variables.

Voici une version schématisée du fichier que j'utilise (pseudocode) pour vous donner une idée de la façon dont je le fais.

// 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(); 
?> 

Désolé c'est une grande quantité de code. La disposition permet une adaptation facile et facilite la recherche de la variable incriminée si les choses ne se passent pas comme prévu. Il y a des solutions plus élégantes mais cela fonctionne bien pour moi et est très rapide.