2011-11-24 16 views
1

我管理学院学生协会的基于Drupal 7的网站。大部分是标准的静态页面。我们每年都会为人们选择房间进行房间选举,并且此过程需要一个应用程序来显示当前房间分配(实时)以及有关不同房间的样式的维基风格信息。作为Drupal模块提供HTML5应用程序

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

我有一些在HTML,Javascript等和一些在PHP中的经验,但我相当新到Drupal模块开发。

回答

2

您应该按照您的建议创建一个自定义模块,并将您的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它使用mymodule_ajax_callback(),因为它的页面回调定义(使用hook_menu())的菜单路径。

mymodule_ajax_callback()只是抓住从数据库匹配type参数在AJAX $_POST通过输出自己的ID和标题在一个JSON字符串到页面(当你请求/my/app/path然后将这个返回你的Ajax响应)所有节点。

希望有帮助

+0

谢谢,这里有一些有用的东西。 index.html页面如何提供服务?我不想去domain.com/Sites/All/Modules/RoomBallot/来获取它。我如何让它出现在domain.com/RoomBallot/并且可以以javascript/app.js的形式存在网址,或者它们的格式应该是/javascript/app.js – ForbesLindesay

+0

想一想,它没有任何区别你把你的HTML5应用程序;因为你的模块将定义JSON菜单路径('my/app/data'),所以你可以像你通常那样从JS中调用这个文件夹(''.ajax({'url':'/ my/app /数据'});')。就路径'javascript/app.js'而言,Drupal不会“干扰任何已经存在的路径/文件,因此调用相对于HTML应用程序根目录的路径并非站点根目录会很好。 – Clive

+0

虽然我想把整个事情都包装在模块中,所以它住在那个文件夹中。这样,更新Drupal之类的事情就会更容易,因为所有自定义代码都位于网站目录中。我想我可以编写一个drupal函数来处理对'/ RoomBallot/{FolderName}/{FileName} .php'的请求,然后读出文件并将其返回。 – ForbesLindesay

相关问题