【问题标题】:Programmatically update Drupal CCK field以编程方式更新 Drupal CCK 字段
【发布时间】:2011-08-07 21:23:55
【问题描述】:

谁能告诉我如何以编程方式更新 cck 字段?

我正在尝试以下代码:

$node->location[field_location][0][city]    =   'tracker city';
    $node->location[field_location][0][latitude]    =   8.888888;
    $node->location[field_location][0][longitude]   =   9.999999;

没有任何成功。 我知道我可以直接与数据库交互,但我正在寻找不同的解决方案。

谁能帮忙?

【问题讨论】:

  • 你把代码放在哪里了?这将更新节点对象中字段的值,但您仍需要在更改后保存节点。
  • 代码在 hook_nodeapi 的自定义模块中。我正在检查 presave 然后执行代码。我也尝试在我的代码之后调用 node_save ,但这只是破坏了网站并导致出现白屏,并显示消息“连接意外终止”
  • 您的模块在“系统”表中的权重可能小于“位置”模块的权重。这将导致您的模块的“presave”被位置模块覆盖。我猜你的模块和“位置”模块的权重在“系统”表中都设置为 0。尝试将模块的权重更改为 1。

标签: drupal location cck


【解决方案1】:

您应该能够将其放入您的预存中,并正确保存。我不能 100% 确定 city、latitude 和 longitude 是正确的键,但我要留下它们,因为你有它们。

$node->field_location[0][city]      = 'tracker city';
$node->field_location[0][latitude]  = 8.888888;
$node->field_location[0][longitude] = 8.999999;

如果这不起作用,您应该安装开发模块并使用节点“开发”选项卡查看节点对象并准确了解正确的格式。

【讨论】:

  • 关于数组键,我检查了 Devel 输出并使用了列出的数组数据。这一切似乎都是正确的,但该死的东西就是不会合作。
  • 经过深思熟虑,我得出的结论是我的 cck 更新不起作用(尤其是插入新的 cck 字段)的原因是因为如果我尝试执行类似的操作,则 cck 数组索引不存在$node->field_location[1][城市]。所以,我需要一个更强大的编程解决方案来处理这个问题。当我找到可行的解决方案时,我一定会在这里发布
【解决方案2】:
<?php
$node->language = LANGUAGE_NONE;
$node->field_custom_name[$node->language][0]['value'] = 'This is a custom field value';
?>

请参阅here 了解更多信息。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-19
    • 2018-06-27
    相关资源
    最近更新 更多