【问题标题】:Drupal how to set up path for library and include filesDrupal 如何设置库路径和包含文件
【发布时间】:2015-07-10 05:17:42
【问题描述】:

在 Drupal 7 中,我在 Front Page 模块中编写 PHP,比如:

$page = include_once "templates/page.php";

我将“templates/page.php”放在 /sites/all/modules/front 下,Drupal 抱怨文件丢失。有什么建议最好将要包含的文件放在哪里?

然后,在安装 PHP Simple HTML DOM Parser 之后,我写了以下内容

$html = new simple_html_dom();

并被投诉找不到类“simple_html_dom”。我尝试将库文件复制到同一个文件夹和主目录,但所有情况都不起作用。如何设置正确的路径?

非常感谢。

【问题讨论】:

  • 我发现如果我将包含文件放在主目录(安装 Drupal 的位置)中,那总是有效的。不过我想这不是一个好习惯。

标签: drupal include-path


【解决方案1】:

如何包含一些文件?

方法一

您可以将文件放在 web-root 文件夹下的任何位置,该文​​件夹是带有 index.php 文件的文件夹(主文件夹)。

$type = 'module';
$name_of_module = 'custom_module';
$path = drupal_get_path($type, $name_of_module);
include_once($path . 'custom_file.inc.php');

有效类型如下:

  • 模块
  • 主题
  • 个人资料
  • 主题引擎

模块名称是模块文件夹中.info 文件的文件名。 Read more about drupal_get_path()

方法二

要包含现有模块中的文件,您应该使用: module_load_include('inc', 'content', 'includes/content.node_form');

如何包含模板文件?

模板文件更好的地方是主题文件夹,因为其他人会期望模板文件在那里。

Read more about template naming suggestions.

但是如果这个模板没有你的自定义模块就没有意义,你可以把这个模板文件放在自定义模块文件夹中。

要在主题中附加模板,您应该使用:

function MYTHEME_preprocess_page(&$variables, $hook)     {
    if (array_key_exists('node', $variables)) {

         if ($variables['node']->type == 'article'){
            $variables['theme_hook_suggestions'][] = 'page__article';
            }
    }
}

在模块中附加模板:

/**
 * Implements hook_theme().
 */
function MODULE_theme($existing, $type, $theme,    $path) {
  return array (
    'node__CONTENTTYPE' => array (
      'variables' => array( . . . ),
      'template' => 'node--CONTENTTYPE' ,
      'base hook' => 'node',
      'path' => drupal_get_path('module', 'CUSTOM_MODULE'),
    ),
  );
}

模板文件命名为node--CONTENTTYPE.tpl.php,放在CUSTOM_MODULE文件夹下。

Read more about hook_theme()

不要忘记清除缓存。

【讨论】:

  • 谢谢。我认为这是一个非常全面的答案。尽管如此,我发现如果我将包含文件放在主目录(安装 Drupal 的位置)中,默认情况下这似乎总是有效,无需任何额外声明。总是这样吗?
  • 当然,如果您将文件放在主目录(安装drupal 的位置)并使用include_once "templates/page.php"; 为什么它有效?因为路径是相对于主目录的。尝试在路径中添加前导反斜杠(“/”)或将 drupal 移动到子文件夹,这不会按预期工作。
【解决方案2】:

您应该使用drupal_get_path 来获取文件的完整路径:

$page = include_once(drupal_get_path('module', 'front') . 'templates/page.php');

Here 是文档。

【讨论】:

    【解决方案3】:

    Libraries API 提供了这个功能。

    【讨论】:

      猜你喜欢
      • 2011-08-04
      • 1970-01-01
      • 2016-12-05
      • 2014-03-03
      • 2017-03-04
      • 1970-01-01
      • 2015-03-14
      • 2011-01-27
      • 2014-03-06
      相关资源
      最近更新 更多