Changes

Jump to navigation Jump to search
m
Line 22: Line 22:  
{{TemplateModuleTreeSimple}}
 
{{TemplateModuleTreeSimple}}
   −
=== Inclusion ===  
+
=== Inclusion of main or master files ===
 +
 
 +
Because all modules must work correctly when they are installed into root directory or into a personalized custom subdirectory.
 +
For this reason, when you try to load the Dolibarr environment by including the *main.inc.php* or *master.inc.php* file, you must include 2 ways to include them:
 +
 
 +
We recommend to use the method suggested in the examples in htdocs/modulebuilder/*.php files and presented here.
 +
This portion of code is known to work in all situations (using Apache, Nginx, IIS, using virtual host of subdirectories, after a proxy redirect or not, if the web root is auto-detected or forced by conf file, and any combination of this).
 +
 
 +
<source lang="php">
 +
// Load Dolibarr environment
 +
$res = 0;
 +
// Try main.inc.php into web root known defined into CONTEXT_DOCUMENT_ROOT (not always defined)
 +
if (!$res && !empty($_SERVER["CONTEXT_DOCUMENT_ROOT"])) $res = @include $_SERVER["CONTEXT_DOCUMENT_ROOT"]."/main.inc.php";
 +
// Try main.inc.php into web root detected using web root calculated from SCRIPT_FILENAME
 +
$tmp = empty($_SERVER['SCRIPT_FILENAME']) ? '' : $_SERVER['SCRIPT_FILENAME']; $tmp2 = realpath(__FILE__); $i = strlen($tmp) - 1; $j = strlen($tmp2) - 1;
 +
while ($i > 0 && $j > 0 && isset($tmp[$i]) && isset($tmp2[$j]) && $tmp[$i] == $tmp2[$j]) { $i--; $j--; }
 +
if (!$res && $i > 0 && file_exists(substr($tmp, 0, ($i + 1))."/main.inc.php")) $res = @include substr($tmp, 0, ($i + 1))."/main.inc.php";
 +
if (!$res && $i > 0 && file_exists(dirname(substr($tmp, 0, ($i + 1)))."/main.inc.php")) $res = @include dirname(substr($tmp, 0, ($i + 1)))."/main.inc.php";
 +
// Try main.inc.php using relative path
 +
if (!$res && file_exists("../main.inc.php")) $res = @include "../main.inc.php";
 +
if (!$res && file_exists("../../main.inc.php")) $res = @include "../../main.inc.php";
 +
if (!$res && file_exists("../../../main.inc.php")) $res = @include "../../../main.inc.php";
 +
if (!$res) die("Include of main fails");
 +
</source>
 +
 
 +
=== Inclusion of php files ===  
 
* To include a core file, use
 
* To include a core file, use
 
<source lang="php">
 
<source lang="php">

Navigation menu