如何防止在hook_menu()中在自定义页面回调上显示主题 -- hooks 领域 和 theming 领域 drupal 相关 的问题

How to prevent displaying the theme on a custom page callback in hook_menu()


6
vote

问题

中文

我正在使用 foo/myurl

foo/myurl中开发自定义模块
  function foo_menu() {   $items = array();   $items['foo/myurl'] = array( // change 'foo/myurl' to the url you want     'title' => 'Callback',     'type' => MENU_CALLBACK,     'page callback' => 'custom_callback',     'access arguments' => array('access content'),   );   return $items; }  function custom_callback () {   echo 'success';   return; }   

但是要由第三方脚本调用此URL,我只想返回 echo ed字符串,如何防止剩下的主题加载?

谢谢

英文原文

I am developing a custom module with a callback script at foo/myurl:

function foo_menu() {   $items = array();   $items['foo/myurl'] = array( // change 'foo/myurl' to the url you want     'title' => 'Callback',     'type' => MENU_CALLBACK,     'page callback' => 'custom_callback',     'access arguments' => array('access content'),   );   return $items; }  function custom_callback () {   echo 'success';   return; } 

But this URL is to be called by a 3rd party script, and I only want to return the echoed string, how can I prevent the rest of the theme from loading?

Thank you

     

回答列表

7
 
vote
vote
最佳答案
 

根本不要返回任何值,然后退出。

在drupal 7中,可以通过调用 drupal_exit()< / a>。在Drupal 6中,您使用类似于以下内容的代码:
  function custom_callback() {   echo 'success';   module_invoke_all('exit');   exit(); }   

当您调用 drupal_exit() 您也不需要使用 exit ,因为它已被函数使用。

exit() (或 drupal_exit() )避免在 hook_exit() 后调用其他钩子。
Drupal通常在菜单回调返回其值后调用 drupal_page_footer() ;使用 exit() (或 drupal_exit() )避免调用该函数。效果是菜单回调的输出不缓存。如果需要缓存输出,则可以删除对 module_invoke_all('exit') drupal_exit()0 ,或 998876611就菜单回调没有返回任何值,将不会呈现drupal页面,因为index.php文件中包含的drupal 6代码中是显而易见的:

  drupal_exit()2  
 

Simply don't return any value, and exit.

In Drupal 7, that can be done by calling drupal_exit(). In Drupal 6, you use code similar to the following one:

function custom_callback() {   echo 'success';   module_invoke_all('exit');   exit(); } 

When you call drupal_exit() you don't need to use exit too, as it is already used by the function.

exit() (or drupal_exit()) avoids other hooks are invoked after hook_exit().
Drupal normally calls drupal_page_footer() after the menu callback returns its value; using exit() (or drupal_exit()) avoids that function is called, too. The effect is that the output of the menu callback is not cached. If caching the output is desired then the call to module_invoke_all('exit') and exit(), or drupal_exit() can be removed. As far as the menu callback doesn't return any value, the Drupal page will not be rendered, as it is evident in the Drupal 6 code contained in the index.php file:

$return = menu_execute_active_handler();  // Menu status constants are integers; page content is a string. if (is_int($return)) {   switch ($return) {     case MENU_NOT_FOUND:       drupal_not_found();       break;     case MENU_ACCESS_DENIED:       drupal_access_denied();       break;     case MENU_SITE_OFFLINE:       drupal_site_offline();       break;   } } elseif (isset($return)) {   // Print any value (including an empty string) except NULL or undefined:   print theme('page', $return); }  drupal_page_footer(); 
 
 
   
   
7
 
vote

您可以使用菜单条目的 drupal_exit()3 属性,以指定要用于渲染的函数 drupal_exit()4 。默认传递回调是 drupal_exit()5 drupal_exit()6 使用 drupal_exit()7 返回JSON数据。

这允许您正确地将页面逻辑(即,进出数据)从渲染(即,格式化数据)。

 

You can use the delivery callback property of your menu entry to specify the function to be used to render the results of your page callback. The default delivery callback is drupal_deliver_html_page. The page handler for the AJAX callback page at system/ajax uses ajax_deliver to return a JSON data.

This allow you to properly separate the page logic (ie. getting to data to output) from the rendering (ie. formatting the data).

 
 
 
 

相关问题

13  将水印添加到网站上传的所有图像  ( Add watermark to all images uploaded in the site ) 
我正在尝试向用户上传的所有图像添加水印。有没有预处理的预处理?或任何模块实现它? ...

1  根据TAC Lite权限排除选项卡  ( Exclude tabs based on tac lite permissions ) 
我目前正在使用TAC Lite来授予整个网站的个人编辑权限。如果用户可以访问编辑特定节点,则会出现"编辑" 选项卡,如果它们没有看到选项卡。但是,我还有启用工作流程和修订模块,并在每个页面上显示工作流和修订选项卡,这意味着特定的用户能够将内容移动到其他州(但无法编辑它。) 这是由于具有3个角色 - 作者,编辑和发布者...

2  form_alter正确的编码问题  ( Form alter correct coding question ) 
function MYMODULE_form_views_exposed_form_alter(&$form, $form_state) { if ($form['#id'] == 'views-exposed-form-search-page-1') { $form['submit']['#value'] ...

2  如何在hook_menu()中具有扩展名  ( How to have an extension in hook menu ) 
我正在尝试在 998887660 中创建一个文件扩展名的菜单,其中包含以下代码: $items['pdf/products/%.pdf'] = array( 'title' => 'Download PDF', 'page callback' => '_pdf_get', 'page ar...

7  在节省节省后重定向用户  ( Redirect a user after the node has been saved ) 
我正在创建或保存特定内容类型的节点后要使用的挂钩,以对特定页面执行重定向。 ...

2  难以理解Drupal Hook菜单功能  ( Difficult to understand drupal hook menu function ) 
我是新的drupal.i无法理解Drupal Hook菜单Works.i访问Drupal网站并尝试阅读文档。但是太难了解。你可以告诉我一个好的教程,让我告诉我一个很好的教程可以了解他们的工作原理。事先谢谢 ...

2  创建节点时添加内容  ( Adding content when creating a node ) 
我目前正在构建一个系统来创建一组可能的单位的关系。到目前为止,我在CCK中建立了一组内容类型,它类似于模板,其中模板字段用于添加构造创建融合的用户将填写。 在我的模板中,我有一个"键值名称" 列表,然后将添加到交流中,用户可以填充它们。 The Template: a, b, c The rapport: * ...

7  访问被拒绝的hook_menu drupal 7  ( Access denied hook menu drupal 7 ) 
我正在尝试代表Drupal 6的经验的Drupal 7上的第一个模块。 function custom_work_menu(){ $items = array(); $items['mypage']=array( 'title'=>t('Title'), 'page callback' ...

6  如何以编程方式删除用户?  ( How can i programmatically delete a user ) 
我是新的,以便在这个问题上,在我的头上。我公司运营了基于订阅的网站,为公司提供了市场研究。公司支付订阅,并获得一定数量的用户。指定为主要用户的人有能力添加剩余的用户自己。我们现在需要添加一个函数来允许它们删除不再与公司不再使用的用户。在这样做时,我们需要以下需要发生以下情况: 从"用户" 数据库表中删除记录 将删除...

0  用于更改辅助本地任务的钩子  ( Hook for altering secondary local tasks ) 
hook_menu_local_tasks() 适用于顶级选项卡,但辅助选项卡似乎没有等效。有谁知道如何修改这些? ...

3  WEBForm将数据与提交的值添加  ( Webform add data along with submitted values ) 
我正在使用webform 6x 3.11,并将 nodeid 传递到一个名为 hidden_key 的隐藏字段中。我已经创建了一个自定义模块来实现 hook_form_alter() ,从而我尝试添加其他数据(以及正在提交的数据)到提交结果。 此附加数据基于对隐藏字段中的值执行的一些计算,即:基于 NodeID 获取...

10  hook_form_alter执行顺序  ( Hook form alter execution order ) 
是否有一种方法可以在Drupal 7中更改Hook_Form_Alter的执行顺序,而无需更改模块的权重或黑色鼠尾核心? 我正在尝试改变在翻译_form_node_form_alter < / a>从翻译模块。调试表单时,我找不到元素所以我假设我在翻译模块中的一个挂钩处于执行。 ...

14  调整模块重量:要注意的风险和事物是什么?  ( Adjusting module weight what are the risks and things to look out for ) 
今天我改变了我的自定义模块的权重,以便更改钩子的执行方法(hook_form_alter)。我将权重比其他模块的重量更重1个值重。这似乎是最安全的事情,而不是给它一个"随机" 重量100.原始模块是核心模块(翻译)所以我希望我没有打破任何东西。 调整模块的权重,以便更改挂钩的执行顺序,所涉及的风险是什么,有什么东西?...

6  hook_menu_alter()不起作用  ( Hook menu alter is not working ) 
我已经在我创建的模块中实现了 hook_menu_alter() 。我在该函数调用中打印了一些东西,但没有任何出现,尽管功能 99887666 从同一模块执行。 hook_init()的输出在页面中显示,但也不来自 hook_menu_alter() 即使清除缓存后也是如此。 有人有关于这个问题的想法吗? fu...

2  将当前节点标题添加为评论表格标题的值?  ( Adding the current node title as the value of the comment form title ) 
我希望以评论表格自动添加到标题文本字段的值;该值确实是当前节点标题。 我已经开始工作 hook_form_alter() (在已经安装和启用的自定义模块中添加): function ta_module_form_alter(&$form, &$form_state, $form_id) { if ...

0  hook_menu_alter()不起作用[重复]  ( Hook menu alter doesnt work ) 
这个问题已经在这里有答案: 关闭 9年前。 可能的重复: hook_menu_alter()不起作用 我已经在我创建的模块中实现了一个钩子函数hook_menu_alter。我在这个函数调...

10  使用module_invoke_all(),或module_invoke()和module_implements()是更好的吗?  ( Is it better to use module invoke all or module invoke and module implemen ) 
使用 module_invoke_all('some_hook') 很容易,但对性能更好? foreach (module_implements('some_hook') as $module) { $data = module_invoke($module, 'some_hook'); } ...

4  在保存用户帐户之前,请在保存用户帐户之前调用hook_user_update()  ( Hook user update is invoked before saving the user account not after ) 
我创建了一个模块,它实现 hook_user_update() 。 据我所知,一旦用户编辑了他的数据,就会调用这种方法,这已保存到数据库。 我注意到的问题是我的代码中真正发生的事情:之前调用代码。 make0 当我此时检查结果时,在保存用户帐户之前,值仍然是其中的值。 我认为这将是某种数据库缓存,但是在编辑表...

3  什么是以“钩子”开头的函数?  ( What are functions that start with hook used for ) 
我了解如何使用钩子( mymodule_HOOKNAME() ),但是什么是用于它实际上从挂钩开始的函数? 例如: hook_action_info() 当我创建自定义钩子时,我通常只是使用: module_invoke('MODULE', 'HOOK_NAME') 。 ...

1  Drupal 7:Hook_Menu无法正常工作  ( Drupal 7 hook menu not working correctly ) 
我已经创建了一个自定义模块(称为page_arg),只需注册路径并使用某个模板文件。我有这个与Drupal 6合作,但不能让它在Drupal 7中工作7.基本上,如果我在模块中留下page_arg_callback()函数,我可以在网站的每个页面上获得500个服务器错误。如果我删除它,我就可以访问我尝试注册的路径,但...




© 2021 it.wenda123.org All Rights Reserved. 问答之家 版权所有


Licensed under cc by-sa 3.0 with attribution required.