【问题标题】:Serve an HTML5 application as a Drupal Module将 HTML5 应用程序作为 Drupal 模块提供服务
【发布时间】:2011-11-24 16:15:14
【问题描述】:

我为我的大学学生协会管理一个基于 Drupal 7 的网站。其中大部分是标准的静态页面。每年我们都会进行一次房间投票,让人们选择他们的房间,这个过程需要一个应用程序来显示当前的房间分配(实时)和关于不同房间是什么样子的 wiki 样式信息。

我需要能够提供 HTML、javascript 和 css 的静态页面;绕过主题模块。我需要作为应用程序根的 html 页面中的相对地址才能正常工作(例如,“javascript/app.js”应该从模块中获取该文件)。然后,我需要使用所有 drupal API 从 php 提供 json 数据以获取权限和数据库访问等。

我在 HTML、Javascript 等方面有相当多的经验,在 PHP 方面也有一些经验,但我对 Drupal 模块开发还很陌生。

【问题讨论】:

    标签: php html drupal drupal-7 drupal-modules


    【解决方案1】:

    您应该按照您的建议创建一个自定义模块,并将您的 HTML5 应用程序单独放在该模块的子文件夹中。当它被访问时,它将使用与您通常期望的相同的相对路径,因此如果文件存在于您的 HTML5 应用程序文件夹下的路径中,javascript/app.js 将起作用。

    对于 JSON 数据,您的自定义模块将如下所示:

    function mymodule_menu() {
      $items['my/app/data'] = array(
        'page callback' => 'mymodule_ajax_callback',
        'access callback' => TRUE,
        'type' => MENU_CALLBACK
      );
    
      return $items;
    }
    
    function mymodule_ajax_callback() {
      $type = $_POST['type'];
    
      $nodes = db_query("SELECT nid, title FROM {node} WHERE type = :type", array(':type' => $type))->fetchAllKeyed();
    
      drupal_json_output($nodes);
    
      drupal_exit();
    }
    

    该代码在mp/app/data 定义了一个菜单路径(使用hook_menu()),它使用mymodule_ajax_callback() 作为它的页面回调。

    mymodule_ajax_callback() 简单地从数据库中获取与 AJAX $_POST 中传递的 type 参数匹配的所有节点,并将它们的 id 和标题以 JSON 字符串的形式输出到页面(然后将作为您的 AJAX 响应返回当您请求/my/app/path)。

    希望有帮助

    【讨论】:

    • 谢谢,里面有一些有用的东西。 index.html 页面是如何提供的呢?我不想去 domain.com/Sites/All/Modules/RoomBallot/ 来获取它。我如何让它出现在 domain.com/RoomBallot/ 上是否可以使用 javascript/app.js 形式的 url 或者它们应该是 /javascript/app.js 的形式
    • 想一想,将 HTML5 应用程序放在哪里没有区别;因为您的模块将定义 JSON 菜单路径 (my/app/data),所以可以像往常一样从您建议的文件夹中的 JS 调用 ($.ajax({'url':'/my/app/data'});)。就路径 javascript/app.js 而言,Drupal 不会干扰任何已经存在的路径/文件,因此可以调用相对于您的 HTML 应用程序根目录而不是站点根目录的路径。
    • 是的,虽然我希望整个东西都包裹在模块中,这样它就存在于那个文件夹中。这样一来,更新 Drupal 之类的事情就更容易了,因为所有自定义代码都位于站点目录中。我想我可以编写一个drupal函数来处理对/RoomBallot/{FolderName}/{FileName}.php的请求,然后读出文件并返回它
    • 在这种情况下,我认为是的,实现带有通配符匹配的自定义菜单项或 Drupal 的入站/出站 URL 重写挂钩肯定是要走的路
    • 一种选择是使用 Drupal 的安装/卸载挂钩将文件复制到适当的位置?
    猜你喜欢
    • 2013-06-06
    • 1970-01-01
    • 1970-01-01
    • 2017-02-07
    • 2019-06-18
    • 2019-07-12
    • 1970-01-01
    • 1970-01-01
    • 2013-08-25
    相关资源
    最近更新 更多