Drupal 7:如何在主题文件上获取模块配置设置?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Drupal 7:如何在主题文件上获取模块配置设置?相关的知识,希望对你有一定的参考价值。

我正在创建一个新模块。我有一个管理面板,可以在其中设置设置。在我的.module文件中,可以使用$config = variable_get('mymodule_settings', []);检索这些设置。

我正在使用hook_theme()声明主题:

/**
 * Implements hook_theme().
 */
function fcl_trustpilot_theme() 
  return [
    'mymodule_wrapper' => [
      'template' => 'theme/mymodule-wrapper',
      'variables' => [],
    ]

但是如何从mymodule_settings中获取数据以显示在theme/mymodule-wrapper文件中?

答案

我认为最好将设置与主题脱钩。主题用户(即调用您主题的代码)应加载配置并通过变量注入模板。

/**
 * Implements hook_theme().
 */
function mymodule_theme() 
  return [
    'mymodule_wrapper' => [
      'template' => 'theme/mymodule-wrapper',
      'variables' => [
        'foo' => NULL,
      ],
    ];


/**
 * Some other module implemented this hook_menu callback for a random path.
 */
function othermodule_random_endpoint() 
  $config = variable_get('mymodule_settings', []);
  return [
    '#theme' => 'mymodule_wrapper',
    '#foo' => $config['foo'] ?? NULL,
  ]

但是如果您确实需要将变量直接加载到模板文件中,则有两种方法:

直接在主题文件中加载设置

Drupal 7中的所有主题文件都是php文件(如后缀.tpl.php所建议)。我不建议这样做,但是您可以完全做到这一点。在您的主题文件中:

<?php

// load the configs here
$config = variable_get('mymodule_settings', []);

?>

<div>
  <p>Hello, this is a config value: <?php echo $config['foo']; ?></p>
</div>

这很丑但是很有效。

使用hook_preprocess_HOOK

第二种方法是实现hook_preprocess_HOOK

/**
 * Implements hook_theme().
 */
function mymodule_theme() 
  return [
    'mymodule_wrapper' => [
      'template' => 'theme/mymodule-wrapper',
      'variables' => [
        'foo' => NULL,
      ],
    ];


/**
 * Implements hook_preprocess_HOOK
 */
function mymodule_preprocess_mymodule_wrapper(&$variables) 
  if (!isset($variables['config'])) 
    $config = variable_get('mymodule_settings', []);
    $variables['foo'] = $config['foo'] ?? NULL;
  

以上是关于Drupal 7:如何在主题文件上获取模块配置设置?的主要内容,如果未能解决你的问题,请参考以下文章

在 Drupal/CMS 项目上使用版本控制

Drupal 7:如何获取模块列表

如何获取当前drupal主题的路径?

drupal 7 使用模块视图自定义行样式

Drupal8开发教程:认识.info.yml文件

Drupal 7中按内容类型的主题节点