Home arrow PHP arrow Page 4 - Building a Site Engine with PHP, Part 2

Module Madness - PHP

If you read the first article in this series, you’d know that we’re about to start talking about the plug-in and module system for our site engine. Along with the plug-ins and modules, we’re also going to be discussing some of the general functions that are needed to make site engine work correctly.

TABLE OF CONTENTS:
  1. Building a Site Engine with PHP, Part 2
  2. Best Site() Ever Made
  3. OK, Plug it in Now
  4. Module Madness
  5. Bring it Together
By: James Murray
Rating: starstarstarstarstar / 70
June 14, 2004

print this article
SEARCH DEV SHED

TOOLS YOU CAN USE

advertisement

The modules are loaded in almost the exact same way as the plug-ins. The only difference is that we need to check to see if the plug-in that the module depends on is loaded. There's not much more to it than that. So let's take a look at the module class.

<?PHP
class modules{
   
    public $lcount;        //this will hold the number of modules that we actually load into the module list
    public $mcount;        //this will hold the number of modules that we actually load into the engine
    public $module_list;    //this will hold our array of module information
    public $module_error;    //this will hold any errors that are produced by loading a module
    public $module_load;    //this will hold the names of all the modules we've loaded
   
    function modules($site_id=""){    //we name the main function the same as the class so that it initializes when the class is called
        global $sql, $site, $plugins;    //this requests the $sql, $site, and $plugins classes as a global variables
        $this->lcount=0;    //set the default of $mcount to 0 because we don't yet have any modules in the modules list yet
        $this->mcount=0;    //set the default of $mcount to 0 because we don't yet have any modules loaded
        if($site_id==""){    //check to see if the administrator overrides the $site_id to list modules for other sites
            $site_id = $site->site['ID'];    //if the site_id isn't overridden set it to the current site's id
        }
        $modules_list=$sql->_query("SELECT
                                    DISTINCT
                                         modules.mod_ID,
                                         modules.mod_name,
                                         modules.mod_dir,
                                         modules.mod_file,
                                         modules.plugin_ID
                                    FROM
                                         module_status,
                                         plugin_status,
                                         modules
                                    WHERE
                                         modules.mod_ID = module_status.mod_ID AND
                                         modules.plugin_ID = plugin_status.plugin_ID AND
                                         module_status.mod_status = 'initialized' AND
                                         plugin_status.plugin_status = 'initialized' AND
                                         module_status.site_ID = '$site_id'");    //select all the initialized module information from the database
        while($module=$sql->_fetch_object($modules_list)){    //start a loop to get the information from the select query using the _fetch_object function
                $this->module_list['mod_ID'][]=$module->mod_ID;    //add the current modules ID to the plugin list
                $this->module_list['mod_name'][]=$module->mod_name;    //add the current modules name to the plugin list
                $this->module_list['mod_dir'][]=$module->mod_dir;    //add the current modules directory to the plugin list
                $this->module_list['mod_file'][]=$module->mod_file;    //add the current modules filename to the plugin list
                $plug_key=array_keys($plugins->plugin_list['plug_ID'],$module->plugin_ID);    //select the plug-in ID from the plug-in list using the array_keys() function with the modules "plugin_id" as a search parameter
                $this->module_list['plug_dir'][]=$plugins->plugin_list['plug_dir'][$plug_key[0]];    //add the current modules dependency's directory to the plugin list
                $this->module_list['plug_file'][]=$plugins->plugin_list['plug_file'][$plug_key[0]];    //add the current modules dependency's file to the plugin list
                $this->lcount++;    // update mcount for each module we add to the module list
        }
        if($this->mcount==0){    //check to see if any modules have been loaded into the engine
            $this->load();    //if no modules are loaded, call the load() function to load the modules
        }
    }
   
    function load(){    //this function loads the modules from the modules list
        if(is_array($this->module_list)){    //make sure that the modules list as an array, to prevent errors
            for($i=0;$i<$this->mcount;$i++){    //start a loop to identify each module in the plug-ins list
                if(file_exists("/{$this->module_list['plug_dir'][$i]}/{$this->module_list['plug_file'][$i]}/{$this->module_list['mod_dir'][$i]}/{$this->module_list['mod_file'][$i]}.mod.php")){    //make sure the modules file exists, to prevent errors
                    include("/{$this->module_list['plug_dir'][$i]}/{$this->module_list['plug_file'][$i]}/{$this->module_list['mod_dir'][$i]}/{$this->module_list['mod_file'][$i]}.mod.php");    //include the module into the engine
                    $this->module_load[]=$this->module_list['mod_name'][$i];    //add the modules name to list of loaded modules
                    $this->mcount++;    //update mcount for each module that's loaded
                }else{
                    $this->module_error[]="The module file: <b>/{$this->module_list['plug_dir'][$i]}/{$this->module_list['plug_file'][$i]}/{$this->module_list['mod_dir'][$i]}/{$this->module_list['mod_file'][$i]}.mod.php</b> Does not exist";    //if the module can't load add an error to the error list
                }
            }
        }   
    }
   
}
?>

As you can see, it's not much different from the plug-ins class. In fact it's frighteningly the same. Nevertheless it all works great and very fast. Save this as "your_site_dir/inc/modules.inc.php". There is one thing I'd like to point out though; the line that looks like this:

$plug_key=array_keys($plugins->plugin_list['plug_ID'],$module->plugin_ID);

array_keys() is a great function. It's very useful. It allows you to return an array of the keys from another array. But, that's not the best part of array_keys(). The best part is that you can specify a search parameter to match. That's what I've done here. I've taken the value of $module->plugin_id and used it as the search parameters to search the plug-ins list array and then return the key to the specific plug-in that the particular module depends on. Now that we've gotten the plug-ins and module systems set up, all we have left is to put it all together.



 
 
>>> More PHP Articles          >>> More By James Murray
 

blog comments powered by Disqus
escort Bursa Bursa escort Antalya eskort
   

PHP ARTICLES

- Hackers Compromise PHP Sites to Launch Attac...
- Red Hat, Zend Form OpenShift PaaS Alliance
- PHP IDE News
- BCD, Zend Extend PHP Partnership
- PHP FAQ Highlight
- PHP Creator Didn't Set Out to Create a Langu...
- PHP Trends Revealed in Zend Study
- PHP: Best Methods for Running Scheduled Jobs
- PHP Array Functions: array_change_key_case
- PHP array_combine Function
- PHP array_chunk Function
- PHP Closures as View Helpers: Lazy-Loading F...
- Using PHP Closures as View Helpers
- PHP File and Operating System Program Execut...
- PHP: Effects of Wrapping Code in Class Const...

Developer Shed Affiliates

 


Dev Shed Tutorial Topics: