Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/drupal/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 如何更改upload.module生成的内容的权重?_Drupal_Drupal 6_Themes - Fatal编程技术网

Drupal 如何更改upload.module生成的内容的权重?

Drupal 如何更改upload.module生成的内容的权重?,drupal,drupal-6,themes,Drupal,Drupal 6,Themes,在我的Drupal支持的网站上,我想在一个节点页面的顶部以一个窄的浮动范围列出可用的下载:对,而不是在它们通常出现的底部 在我的主题中,我已经覆盖了theme_upload_attachments函数,生成了一个宽度为40%的附件,但它显示在页面底部 upload.module文件中包含控制页面上附件列出位置的代码: // function upload_nodeapi(), line #284 of upload.module $node->content['files'] = arra

在我的Drupal支持的网站上,我想在一个节点页面的顶部以一个窄的浮动范围列出可用的下载:对,而不是在它们通常出现的底部

在我的主题中,我已经覆盖了theme_upload_attachments函数,生成了一个宽度为40%的附件,但它显示在页面底部

upload.module文件中包含控制页面上附件列出位置的代码:

// function upload_nodeapi(), line #284 of upload.module
$node->content['files'] = array(
    '#value' => theme('upload_attachments', $node->files),
    '#weight' => 50,
);
如果我手动将此权重调整为-1,我的自定义附件列表将显示我想要的位置,浮动在内容区域顶部的右侧

但是,我不想手动破解核心文件upload.module,因为我的更改将在下次应用升级时丢失,比如说安全补丁

如何/在何处修改主题代码中内容['files']的权重?
或者,我是不是走错了路?

你需要一个模块来完成这项工作,而不仅仅是一个主题。一个模块可以实现hook_nodeapi,这将使它有机会在渲染之前更改$node->content数组的内容。例如,如果您的模块名为“upload_tweaker”,则应使用以下函数:

function upload_tweaker_nodeapi(&$node, $op) {
  if ($op == 'view') {
    $node->content['files']['#weight'] = -1;
  }
}
在“nodeapi”事件期间,每个模块在更改节点时都会出现裂缝;如果您想更改由一个模块添加的内容,您需要确保模块在此之后加载。这可以通过将其命名为类似“zzz”的名称,或者通过在站点数据库的系统表中更改其权重字段来实现。模块可以像表单元素一样进行加权


有更多信息。

对于使用CCK并想要改变体重的人:

CCK模块使用预渲染功能

/**
 * Pre-render callback to adjust weights of non-CCK fields.
 */
function content_alter_extra_weights($elements) {
  if (isset($elements['#content_extra_fields'])) {
    foreach ($elements['#content_extra_fields'] as $key => $value) {
      // Some core 'fields' use a different key in node forms and in 'view'
      // render arrays. Check we're not on a form first.
      if (!isset($elements['#build_id']) && isset($value['view']) && isset($elements[$value['view']])) {
        $elements[$value['view']]['#weight'] = $value['weight'];
      }
      elseif (isset($elements[$key])) {
        $elements[$key]['#weight'] = $value['weight'];
      }
    }
  }
  return $elements;
}
因此,由于此回调,您无法使用正常行为更改权重

您应该这样做:

function YOUR_MODULE_nodeapi(&$node, $op, $a3 = NULL, $a4 = NULL) {
  // Only for node pages.
  if ($op == 'view' && $a4) {
    $body_weight = 15 // Any weight.
    $node->content['#content_extra_fields']['body']['weight'] = $body_weight; // This value CCK module will use to alter body weight in the callback from above.
  }
}

感谢指针-我现在已经实现了这个小模块,它完全按照我的需要工作。干杯