Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/http/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 将HTML5应用程序用作Drupal模块_Php_Html_Drupal_Drupal 7_Drupal Modules - Fatal编程技术网

Php 将HTML5应用程序用作Drupal模块

Php 将HTML5应用程序用作Drupal模块,php,html,drupal,drupal-7,drupal-modules,Php,Html,Drupal,Drupal 7,Drupal Modules,我为学院学生协会管理一个基于Drupal7的网站。大多数是标准的静态页面。每年我们都会为人们进行房间投票,让他们选择自己的房间。这个过程需要一个应用程序来显示当前的房间分配(实时)以及关于不同房间的wiki风格信息 我需要能够提供静态页面的HTML,javascript和css;绕过主题模块。我需要html页面中的相对地址,该页面作为应用程序的根来正常工作(例如,“javascript/app.js”应该从模块中获取该文件)。然后,我需要使用所有drupal API从php提供json数据,以获

我为学院学生协会管理一个基于Drupal7的网站。大多数是标准的静态页面。每年我们都会为人们进行房间投票,让他们选择自己的房间。这个过程需要一个应用程序来显示当前的房间分配(实时)以及关于不同房间的wiki风格信息

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


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

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

对于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
处定义了一个菜单路径(using),它使用
mymodule\u ajax\u callback()
作为页面回调

mymodule\u ajax\u callback()
只需从数据库中获取与ajax
$\u POST
中传递的
类型
参数匹配的所有节点,并以JSON字符串形式将其id和标题输出到页面(当您请求
/my/app/path
时,这些节点将作为ajax响应返回)


希望这能有所帮助

谢谢,里面有些有用的东西。但是index.html页面是如何提供的呢?我不想非得去domain.com/Sites/All/Modules/roomball/才能得到它。我如何让它出现在domain.com/roomball/上,URL的格式是javascript/app.js还是应该是/javascript/app.js?想想看,把你的HTML5应用放在哪里没有什么区别;由于您的模块将定义JSON菜单路径(
my/app/data
),因此可以从您通常建议的文件夹中的JS调用此路径(
$.ajax({'url':'/my/app/data'});
)。就路径
javascript/app.js
而言,Drupal不会干扰任何已经存在的路径/文件,因此可以调用相对于HTML应用程序根的路径,而不是相对于站点根的路径。是的,尽管我希望整个过程都封装在模块中,这样它就位于该文件夹中。这样,更新Drupal之类的事情就更容易了,因为所有自定义代码都位于sites目录中。我想我可以编写一个drupal函数来处理对
/RoomBallot/{FolderName}/{FileName}.php
的请求,然后读取文件并返回它在这种情况下我认为是的,实现一个带有通配符匹配的自定义菜单项或Drupal的入站/出站URL重写挂钩绝对是goOne的方式。选项是使用Drupal的intall/uninstall挂钩将文件复制到适当的位置?