Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/solr/3.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
Drupal 7 重写Drupal 7中的核心功能_Drupal 7_Overriding_Core - Fatal编程技术网

Drupal 7 重写Drupal 7中的核心功能

Drupal 7 重写Drupal 7中的核心功能,drupal-7,overriding,core,Drupal 7,Overriding,Core,是否有一种方法可以干净地重写/includes/form.inc中的函数“form_execute_handlers(…) 问题是在/modules/user/user.pages.inc中有一些处理程序函数,如“user\u profile\u form\u validate(…)”,而核心版本的“form.inc”找不到这些函数,因为对于这种特殊情况,“form\u execute\u handlers(…)”中缺少以下语句: 模块加载包括('inc','user','user.pages'

是否有一种方法可以干净地重写/includes/form.inc中的函数“form_execute_handlers(…)

问题是在/modules/user/user.pages.inc中有一些处理程序函数,如“user\u profile\u form\u validate(…)”,而核心版本的“form.inc”找不到这些函数,因为对于这种特殊情况,“form\u execute\u handlers(…)”中缺少以下语句:

模块加载包括('inc','user','user.pages')

我想以某种方式补充这一点,因此覆盖form.inc;)

好的,我找到了一种包含库的方法(在我的自定义模块中):


永远不要改变核心功能!更新drupal将覆盖您的更改,这根本不是一个好做法。请记住,所有其他模块也使用core,所以如果您弄乱了core,事情会变得非常糟糕

您可以这样做自定义用户表单(链接到其他答案):

还有用于更改表单处理的钩子。因此,您可以按如下方式更改用户表单验证:

hook_form_alter(&$form, $form_state, $form_id) {
  if ($form_id == 'user_profile_form') {
    $form['#validate'][] = 'your_validation_function';
  }
}
或者,如果您只想使用自己的验证更改:

$form['#validate'] = array('your_validation_function');
当包含用户库时,您不必检查查询。只需包括以下内容:

function wr_pages_init() {

  module_load_include('inc', 'user', 'user.pages');

  // And other includes (if needed) same way.. like:

  // Add jquery ui libraries..
  drupal_add_library('system', 'ui');
  drupal_add_library('system', 'ui.sortable');
  drupal_add_library('system', 'ui.datepicker');

  // Add ajax..
  drupal_add_library('system', 'drupal.ajax');

  // Some own JS
  drupal_add_js(drupal_get_path('module', 'wr_pages') . '/js/mysuper.js', 'file');

}

永远不要覆盖核心!曾经为什么需要重写它(form\u execute\u处理程序)?你想做什么?我在一个单页网站上工作,因此我需要AJAX处理所有表单,包括用户配置文件表单。然而,Drupal的AJAX功能似乎不完整。使用AJAX处理常规登录很容易,但是如果您尝试处理所谓的用户配置文件表单,则需要首先包含“user.pages.inc”,因此您必须扩展Drupal的功能。好的,仍然不需要重写任何内容。检查我是如何在这里创建用户配置文件表单的:如果您愿意,可以在该表单中使用AJAX。您所做的很有意义,但我必须编写自己的验证函数。我想使用user.pages.inc的一个,我刚刚发布了一个解决方案,它为我完成了这项工作。我希望通过这种方式,当事情得到更新时,我永远不会遇到麻烦。不,正如我所展示的,您可以添加自己的valdation函数或替换现有的valdation函数。验证函数是数组。。当然,在我的链接示例中,您可以创建自己的验证,但这并不难。。您可以检查原始用户表单验证是如何工作的,如果需要特殊的东西,可以添加您自己的东西。我检查查询是为了确保不会在每次AJAX调用中都包含该库,以将服务器响应时间保持在最低限度。我很高兴我终于成功了。弄清楚为什么要添加$form['actions']['submit']['#ajax']=。。。;对于用户来说,配置文件表单会导致HTTP错误500是一件痛苦的事,但它实际上只是缺少的库;)感谢您的帮助,您的回答澄清了机制,我非常肯定,接下来会有很多情况,我必须编写自己的验证函数。
function wr_pages_init() {

  module_load_include('inc', 'user', 'user.pages');

  // And other includes (if needed) same way.. like:

  // Add jquery ui libraries..
  drupal_add_library('system', 'ui');
  drupal_add_library('system', 'ui.sortable');
  drupal_add_library('system', 'ui.datepicker');

  // Add ajax..
  drupal_add_library('system', 'drupal.ajax');

  // Some own JS
  drupal_add_js(drupal_get_path('module', 'wr_pages') . '/js/mysuper.js', 'file');

}