Results 1 to 6 of 6

Thread: Modularizing a PHP website

  1. #1
    Join Date
    Aug 2006

    Modularizing a PHP website

    Hi There,

    I am about to start building a new PHP/MySQL application. I always use the traditional MVC architecture, however, I am thinking of making a small change with the way I set my application out.

    Usually, each of my VIEW files independently calls the header HTML and footer HTML files.

    I am thinking what I would like to do is have my entire application run through a single control file (eg, index.php). Each page would then be accessed by passing a GET value in the URL. Eg, instead of accessing certain pages directly, like this:


    My site would instead load each page through index.php like this:


    What I am trying to decide is whether or not I should have the header and footer include commands in each individual VIEW file, or should I let the index.php file take care of that, meaning each VIEW file will only contain HTML <body> to </body> text?

    Although having the header and footer include commands contained within the main index.php file seems to be cleaner and more modular, what if I want to include some extra information between the <head></head> tags of only some view files? Eg, an extra CSS link, or a Javascript link, etc?

    I'd love to get some insight in to how other people are structuring their applications in this respect.

    Thank you.
    Want web development tutorials that are clear and easy to understand?
    The Now I Get It blog.

  2. #2
    Join Date
    Aug 2004
    I normally call them in each view, but that is in part because it seems to me the easiest way to work it with the CodeIgniter framework, which is what I normally use. It also allows me to customize some aspects via optional function parameters (e.g. a page-specific javascript or CSS file, page title, etc.). I'm in no way saying that's the best or only way I'd do it, but it works for me.
    "Well done....Consciousness to sarcasm in five seconds!" ~ Terry Pratchett, Night Watch

    How to Ask Questions the Smart Way (not affiliated with this site, but well worth reading)

    My Blog
    cwrBlog: simple, no-database PHP blogging framework

  3. #3
    Join Date
    Dec 2009
    Well, I use modular structure for my pages, and let a module loader custom build the site for each request.

    I have tried to build websites in almost every way in my time, and this is far the best way to do it in my opinion.

    But if you wish to keep it simple, and still want to be able to put static content into the main page, but with the ability to insert extra scripts and style sheets in the head section, just create some variables.


    and then echo it out where you want it.
    Then include your pages in the top of the index page. Now you can just put what ever you want into your variables.

  4. #4
    Join Date
    Jan 2010
    I've done it various ways, but what I find usually works best for me is to have all the pages called from one central script, as you said.
    My approach tends to be that the string representing what the client sees "acquires" difference bits depending on various conditions. So, I might do something like this:
    PHP Code:
    require($_POST['page'] . '.php');
    <title><?php echo $title?></title>
    <?php echo $extraheaders?>
    <body><div id="wrapper">
    echo $navigation;
    $etc) echo $etc;
    Last edited by Jerail; 01-25-2010 at 02:51 AM.

  5. #5
    Join Date
    Aug 2006
    Thank you for all the responses. Not quite sure yet which way I'll go yet, but this will help with my thinking.
    Want web development tutorials that are clear and easy to understand?
    The Now I Get It blog.

  6. #6
    Join Date
    Nov 2008
    Personally I favour the MVC approach. There is nothing to stop you using this and just nesting your views. Typically I have 3 layers to my views, a top layer which contains the main site layout, head section, footer etc, then main views which get plugged into one of the top layer views, then an elements layer which is partial blocks of content which can be injected into other views. This gives you enormous flexibility because you can cache views at any of these 3 levels - ie you can fully cache the whole thing for a static page, or plug in cached static content into higher level views etc.

Thread Information

Users Browsing this Thread

There are currently 1 users browsing this thread. (0 members and 1 guests)

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
HTML5 Development Center



X vBulletin 4.2.2 Debug Information

  • Page Generation 0.24244 seconds
  • Memory Usage 2,902KB
  • Queries Executed 15 (?)
More Information
Template Usage (33):
  • (1)ad_footer_end
  • (1)ad_footer_start
  • (1)ad_global_above_footer
  • (1)ad_global_below_navbar
  • (1)ad_global_header1
  • (1)ad_global_header2
  • (1)ad_navbar_below
  • (1)ad_showthread_firstpost_sig
  • (1)ad_showthread_firstpost_start
  • (1)ad_thread_first_post_content
  • (1)ad_thread_last_post_content
  • (1)bbcode_php
  • (1)footer
  • (1)forumjump
  • (1)forumrules
  • (1)gobutton
  • (1)header
  • (1)headinclude
  • (1)headinclude_bottom
  • (6)memberaction_dropdown
  • (1)navbar
  • (4)navbar_link
  • (1)navbar_moderation
  • (1)navbar_noticebit
  • (1)navbar_tabs
  • (2)option
  • (6)postbit
  • (6)postbit_onlinestatus
  • (6)postbit_wrapper
  • (1)spacer_close
  • (1)spacer_open
  • (1)tagbit_wrapper 

Phrase Groups Available (6):
  • global
  • inlinemod
  • postbit
  • posting
  • reputationlevel
  • showthread
Included Files (26):
  • ./showthread.php
  • ./global.php
  • ./includes/class_bootstrap.php
  • ./includes/init.php
  • ./includes/class_core.php
  • ./includes/config.php
  • ./includes/functions.php
  • ./includes/functions_navigation.php
  • ./includes/class_friendly_url.php
  • ./includes/class_hook.php
  • ./includes/class_bootstrap_framework.php
  • ./vb/vb.php
  • ./vb/phrase.php
  • ./includes/functions_facebook.php
  • ./includes/functions_calendar.php
  • ./includes/functions_bigthree.php
  • ./includes/class_postbit.php
  • ./includes/class_bbcode.php
  • ./includes/functions_reputation.php
  • ./includes/functions_notice.php
  • ./packages/vbattach/attach.php
  • ./vb/types.php
  • ./vb/cache.php
  • ./vb/cache/db.php
  • ./vb/cache/observer/db.php
  • ./vb/cache/observer.php 

Hooks Called (70):
  • init_startup
  • friendlyurl_resolve_class
  • init_startup_session_setup_start
  • database_pre_fetch_array
  • database_post_fetch_array
  • init_startup_session_setup_complete
  • global_bootstrap_init_start
  • global_bootstrap_init_complete
  • cache_permissions
  • fetch_threadinfo_query
  • fetch_threadinfo
  • fetch_foruminfo
  • load_show_variables
  • load_forum_show_variables
  • global_state_check
  • global_bootstrap_complete
  • global_start
  • style_fetch
  • global_setup_complete
  • showthread_start
  • showthread_getinfo
  • strip_bbcode
  • friendlyurl_clean_fragment
  • friendlyurl_geturl
  • forumjump
  • cache_templates
  • cache_templates_process
  • template_register_var
  • template_render_output
  • fetch_template_start
  • fetch_template_complete
  • parse_templates
  • fetch_musername
  • notices_check_start
  • notices_noticebit
  • process_templates_complete
  • friendlyurl_redirect_canonical
  • showthread_post_start
  • showthread_query_postids
  • showthread_query
  • bbcode_fetch_tags
  • bbcode_create
  • showthread_postbit_create
  • postbit_factory
  • postbit_display_start
  • bbcode_parse_start
  • postbit_imicons
  • bbcode_parse_complete_precache
  • bbcode_parse_complete
  • postbit_display_complete
  • memberaction_dropdown
  • tag_fetchbit_complete
  • forumrules
  • navbits
  • navbits_complete
  • build_navigation_data
  • build_navigation_array
  • check_navigation_permission
  • process_navigation_links_start
  • process_navigation_links_complete
  • set_navigation_menu_element
  • build_navigation_menudata
  • build_navigation_listdata
  • build_navigation_list
  • set_navigation_tab_main
  • set_navigation_tab_fallback
  • navigation_tab_complete
  • fb_like_button
  • showthread_complete
  • page_templates