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