【问题标题】:How to display a calendar in Drupal?如何在 Drupal 中显示日历?
【发布时间】:2011-12-08 13:23:35
【问题描述】:

我正在尝试使用calender block module 并基本上在我的主题中显示一个日历。所以我在管理界面中启用了模块,然后在我的主题文件(page.tpl.php)中,我输入了以下内容:

$block = (object)module_invoke('calendar_block', 'block', 'view', '0');
print theme('block',$block); 

但是,这只会以大写形式显示“CALENDAR”,但不会显示日历。当我查看源代码时,只有一个带有“calendar_ajax”类的 div,这让我认为渲染应该由 JavaScript 完成,但它没有发生。

有人知道可能是什么问题吗?

【问题讨论】:

    标签: drupal-6 module calendar block


    【解决方案1】:

    如果看起来很可能,日历渲染是通过 JavaScript 发生的,那么问题可能是您从模板文件中的代码“手动”创建块,而不是通过“正常”方式将其添加到区域块配置页面。

    模块可能通过drupal_add_js() 调用添加所需的JavaScript,该调用将JavaScript 文件或代码添加到传递到页面模板的变量中以包含输出。然而,这只有在 page.tpl.php 的执行/渲染之前调用 drupal_add_js() 才有效,因为当时 JavaScript 文件和代码已经组装/聚合以输出,所以它是来晚了再补充。

    虽然在 page.tpl.php 中(或在预处理函数中)有一些方法可以解决这个问题,但它们很丑陋,应该尽可能避免。尝试使用“正常”的方式将块添加到区域(或查看 mikl 建议的替代模块)。


    编辑:关于“正常”方式,我建议查看Working with blocks (content in regions) 文档,因为它提供了一个很好的概述,并且有一些有用的链接可以指向更详细的信息。

    如需快速方法,请查看您的 Drupal 实例的 admin/build/block/list 配置页面。它应该为每个启用的主题提供一个页面(选项卡),列出主题区域以及放置在这些区域中的块。

    在这些列表的底部,您会找到“禁用”块,即未分配给任何区域的块。我希望日历块会在那里列出,您可以尝试将其移动到您的主题区域之一,然后查看它是否显示(或者更好的是,先切换到默认的 Garland 主题,在那里测试块,然后切换回您的主题 - 这样,您可以确定它在原则上是否有效,与您的主题设置/配置无关)。

    【讨论】:

    • 谢谢,您对幕后发生的事情的解释很有用;但是我仍然想知道将这个块添加到我的页面的“正常”方式是什么?在 Drupal 中似乎有很多方法可以做事,以至于我永远不知道正常的方法应该是什么。因此,如果我想将此块添加到主题中的页面,有什么方法可以做到(无需手动添加 drupal_add_js 调用等)?
    • @Laurent:我编辑了我的答案以包含一些关于“正常”方式的提示。 (是的,Drupal 的“实现相同结果的多种方法”一方面既是优势也是劣势。它提供了相当多的灵活性,但更难完全理解系统:/
    【解决方案2】:

    试试calendar module。这允许您使用Views module 设置各种不同内容的日历。

    【讨论】:

      【解决方案3】:

      你尝试过这样的事情吗?

      $block = module_invoke('calendar_block', 'block', 'view', 0);
      print $block['content'];
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-04-02
        • 1970-01-01
        相关资源
        最近更新 更多