【问题标题】:Drupal administration theme doesn't apply to Blocks pages (admin/build/block)Drupal 管理主题不适用于 Blocks 页面(admin/build/block)
【发布时间】:2009-09-08 11:27:08
【问题描述】:

我在 D6 中为客户创建的网站具有覆盖主要内容区域部分的各种图像。它看起来非常漂亮,它们必须在那里才能获得总体效果。

问题是,如果您在管理页面中使用此主题,图像会妨碍一切。

我的解决方案是创建一个自定义管理主题,基于默认主题,在输出模板文件 - page.tpl.php 中禁用这些图像区域

问题在于,当您尝试编辑块页面时,它使用默认主题,并且一半的块管理设置在图像后面是不可点击的。我知道这是 Drupal 设计的,但它让我非常恼火,并且在我的脑海中逐渐接近“错误”而不是“功能”。似乎也没有办法绕过它。

您可以编辑 /modules/blocks/block.admin.inc 以强制 Drupal 在所选管理主题中显示块页面。但是无论您随后所做的任何更改都不会转移到默认主题,因为 Drupal 分别处理每个主题并且每个主题可以具有不同的块布局。 :x

function block_admin_display($theme = NULL) {
  global $custom_theme;

  // If non-default theme configuration has been selected, set the custom theme.
  // $custom_theme = isset($theme) ? $theme : variable_get('theme_default', 'garland');
  // Display admin theme
  $custom_theme = variable_get('admin_theme', '0');

  // Fetch and sort blocks
  $blocks = _block_rehash();
  usort($blocks, '_block_compare');

  return drupal_get_form('block_admin_display_form', $blocks, $theme);
}

有人可以帮忙吗?我唯一能想到的就是将 $content 区域推到图像出现区域的下方,并仅将块用于内容显示。

谢谢!

【问题讨论】:

    标签: drupal drupal-6


    【解决方案1】:

    在 template.php 你可以放

    function YOURTHEME_preprocess_page(&$vars) {
      if (implode('/', arg()) == 'admin/build/block'){
        $vars['body_classes'] = $vars['body_classes'].' administer_block';
      }
    }
    并且您将拥有一个不错的 body 类,您可以使用它来使用 CSS 隐藏这些图像。

    【讨论】:

      【解决方案2】:

      如果有人对此仍有疑问,有点类似于上面 barraponto 的解决方案,如果您使用的是管理菜单模块,它会在正文中添加一个类 (.admin-menu),您可以使用它来隐藏任何覆盖阻碍的 div 等。

      【讨论】:

        【解决方案3】:

        您可以在自定义模块中使用 hook_init() 将管理主题应用到任何地方:

        function yourmodule_init() 
        {
            if ( some condition here like arg(0) == 'foobar' 
                 or node_load(arg(1))->type == 'something' )
            {
              $GLOBALS['custom_theme'] = variable_get('admin_theme', '0');
              drupal_add_css(drupal_get_path('module', 'system') .'/admin.css', 'module');
              drupal_add_js(drupal_get_path('theme', 'myadmintheme').'/jscripts/adminjs.js');
            }
        }
        

        编辑:那么(可能)您必须对块编辑表单使用 form_alter 来恢复目标主题。这样你就不必破解核心了。

        【讨论】:

          【解决方案4】:

          感谢您提出这个话题!我遇到了同样的问题,这很烦人。以下是如何在没有一行代码的情况下对其进行补救: 1) 将 main 主题切换到您的管理主题。 2)配置块。这总是会影响当前选择的 main 主题。 3)将主题切换回它应该是的。您的管理主题仍将反映您的更改。

          【讨论】:

            【解决方案5】:

            可以只使用 block 模块中的 block-admin..... tpl 文件,并在您的自定义主题中对其进行主题化。我已经这样做了,因为即使您使用自定义路径位,管理主题模块也永远不会覆盖块管理。

            【讨论】:

              【解决方案6】:

              如果您在执行管理任务时不需要新主题,则可以在执行此操作时使用其他主题。

              转到“站点配置”->“管理主题”。在这里,您可以选择在进行管理时要使用的主题。因此,您的新主题仅在用户查看您的网站时使用。而且您可以在不受所有图像干扰的情况下执行管理任务。

              【讨论】:

              • 无论如何它都会在块编辑页面中使用默认主题(这确实是他的问题)
              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2010-12-03
              • 1970-01-01
              • 2017-10-03
              • 1970-01-01
              相关资源
              最近更新 更多