4

我在 Drupal 7 中编写一个表单,我想“包含”一个 php 文件,它将我的数据库连接变量添加到我的代码中。

我已经以多种方式测试了我的代码,并且我确信当我在我的站点中运行 Cron 时,“包含”会让我得到一个 WSOD。

我已经对此进行了谷歌搜索,并尝试了:

include("/sites/all/libraries/php/connection.inc");

include("./sites/all/libraries/php/connection.inc");

include"./sites/all/libraries/php/connection.inc";

我还尝试了上面的“.php”扩展名。

我最后一次尝试:

define('__ROOT__', dirname(dirname(__FILE__)));
include(__ROOT__.'/sites/all/libraries/php/connection.inc');

有时我在尝试运行 Cron 时会遇到 WSOD,有时我在提交表单时页面样式会损坏。

在 Drupal 中手动包含 PHP 文件的正确方法是什么?请注意,我不想使用“Drupal 方式”来执行此操作或使用 webform 模块。我想用 PHP 手动编码。

4

4 回答 4

13

库目录只能用于存储通过库模块作为库交付的文件(请参见此处https://drupal.org/project/libraries)。

对于这两个示例,假设 library.inc 是我们的文件,relative_path_to 是基于模块目录到我们的 library.inc 文件的相对路径。

要仅包含一个文件,您可以使用:

require(drupal_get_path('module', 'module_name') . '/relative_path_to/library.inc');

并以 Drupal 方式(https://api.drupal.org/api/drupal/includes!module.inc/function/module_load_include/7):

module_load_include('inc', 'module_name', '/relative_path_to/library');

干杯,j

于 2014-04-14T10:19:20.980 回答
6

试试这些方法

1) require 'includes/iso.inc';
2) include_once  'includes/iso.inc';
3) include ('includes/iso.inc');

或 Drupal 方式

include_once DRUPAL_ROOT . '/includes/iso.inc';
于 2014-04-14T09:49:00.687 回答
6

在我看来,这些是包含代码的正确Drupal (7)方法:

  1. module_load_include();功能 - Drupal API 文档- 在需要时包含您或其他模块中的任何 PHP 文件,
  2. files[] = ...your_module.info文件中自动加载包含您自己模块中的类和接口 -编写 .info 文件文档。

库模块提供了自己的方式来包含库中的外部 PHP 文件。

于 2015-04-21T07:38:24.463 回答
0

第二个答案是正确的“Drupal 方式”。如果事物的位置发生变化,被接受为答案的那个有许多潜在的陷阱。使用 drupal_get_path 是最好的方法。如果您尝试包含在模块更新挂钩期间可能未完全引导的文件,则尤其如此。

于 2015-01-19T13:38:49.627 回答