D6 到 D7 重新编码以解决 Ubercart 中的代币问题

问题描述 投票:0回答:1

在被移植到 Drupal 7 的模块中,有下面这两个标记语句,没有人再支持,其中调用的函数已被替换 - 但我不知道如何将代码重新编写为新函数

在我的模块的第 168 行是下面这个,它是 Drupal 6 中

hook_token_values()
实现的一部分。

foreach (uc_store_token_values('global') as $token => $value) {
  $values['order-' . $token] = $value;
 }

并且在第 350 行

 foreach (uc_store_token_values('global') as $token => $value) {
   $vars[str_replace('-', '_', $token)] = $value;
 }

“uc_store_token_values”函数在 Drupal 7 中消失了,它是“uc_store_tokens”。

并且 switch case 标记 $type 'global' 不再存在 - 新的 switch case 是(将是)'store' 它出现,并返回一个现在称为 $replacements 的数组 - 在其他方面与数组 $values 基本相同

D6 中的 hook_token_values() 也消失了,现在在 D7 中简称为 hook_tokens()

我对代币不熟悉。 另请参阅其他人发生的情况:https://www.drupal.org/documentation/modules/token/update/6/7

因此,如果我将 uc_store_token_values 更改为 uc_store_tokens,将 'global' 更改为 'store' - 错误为“缺少 uc_store_tokens() 的参数 2,在 . . 模块第 342 行中调用并在 uc_store_tokens() 中定义(. . 的第 72 行) . /uc_store.tokens.inc) => function uc_store_tokens($type, $tokens, $data = array(), $options = array()) { 整个函数可以作为 Drupal 7 的 uc_store_tokens 搜索找到)

因此,参数 2 似乎是“$tokens”,其中没有参数 2,并且在 Drupal 6 的 uc_store_token_values 中不存在,并且显然应该是根据 Drupal 7 hook_tokens 函数 API 替换的令牌数组)

所以问题是这里有人知道上面168和350的两段代码是如何更改以符合新的

uc_store_tokens()
吗?

php drupal-7 token ubercart
1个回答
0
投票

“用于提供令牌的钩子已重命名。hook_token_list() 现在为 hook_token_info(),hook_token_values() 现在为 hook_tokens()。这两个钩子也更改了参数,并且返回值也与 D6 等效项不同。”这来自 => https://www.drupal.org/documentation/modules/token/update/6/7

然后它还说“Drupal 6 中的旧令牌名称和 Drupal 7 中新的可链接样式令牌之间目前没有升级路径。一些辅助函数正在 token.module 中编写。”

显然,必须修改模块功能,并且可以在以下位置找到一些示例代码: https://drupal.stackexchange.com/questions/4930/how-to-programmatically-create-a-custom-token-in-a- modulehttps://drupal.stackexchange.com/questions/86136/formatting-output-of-token 以及 drupal.org 中的函数 token_info 文档

© www.soinside.com 2019 - 2024. All rights reserved.