【问题标题】:Drupal: Writing taxonomy reference field using rules and custom php codeDrupal:使用规则和自定义 php 代码编写分类参考字段
【发布时间】:2012-07-16 11:39:31
【问题描述】:

我有一个分类词汇类别如下:

  • Kat01
    • Child01
    • Child02
  • Kat02
    • Child01
    • Child02

词汇表有一个自定义字段,其 ID 如下:957214d2-ce39-423d-aeb1-32f2e8b972f6,因此每个术语和父术语都有一个 ID(这不是 tid!)。

我的内容类型具有引用的分类字段 kategorie。还有一个名为 kategorieTempId 的数组字段,其值与 kategorie-taxonomy 中的值相同。该数组中的 ID 数量表示术语和父术语的层次顺序。因此,如果节点应该在 kategorie -Kat01 -> Child01 中,则 kategorieTempId 中会有两个 ID,一个用于父项,一个用于子项。
现在我需要获取子术语的 ID,而不是从词汇表中获取分类术语并将其写入引用的术语字段。

到目前为止我做了什么:
设置一个规则,在保存节点之前触发该规则,使用操作 Fetch entity by property 将分类术语从词汇表中获取到数组中。然后我添加一个动作 Execute custom PHP code 来查找子 tid 并将其写入一个名为 katReturn 的字段.
这是我使用的代码(我是一个完全的 php 初学者,我不知道这是否是一种优雅的方式,但它有效):

$anzahl = 0; //counter for hierarchy  
foreach ($kat_id_fetched as $kat_term) { // fill two arrays  
  $tid[$anzahl] = $kat_term->tid; // array with termID  
  $parentTerm_id[$anzahl] = db_query("SELECT {parent} FROM {taxonomy_term_hierarchy} WHERE tid = $kat_term->tid")->fetchField(); // array with parent-termID  
  ++$anzahl;  
};
foreach ($tid as $item) { // check if tid is parent  
  $anzahl = 0;  
  if (!in_array($item, $parentTerm_id)) {
    $kat_child = $item; // if not in parent-array, save tid
    $node->field_kat_return['und'][0]['value'] = $item;
    break;  
  };
  ++$anzahl;  
};  

所以现在我知道子术语的 tid,我想将其写入参考分类字段,但我不明白。我尝试的代码是:

foreach ($kat_id_fetched as $kat) {
  if ($kat->tid == $returned_kat) {
    $node->field_kategorie[] = $kat;
    break;
  };
};

我希望,我已经明确了我想要什么。正如我之前所说,我的 php 技能是有限的,我感谢任何帮助,这为我指明了正确的方向。谢谢。

【问题讨论】:

  • 术语引用的字段列是tid,所以你的代码应该是$node->field_kat_return['und'][0]['tid'] = $item;
  • 感谢您的回复,但我不明白。字段 field_kategorie 不是参考分类字段。它只是一个获取值的辅助字段,与我要查找的术语的 tid 相同。术语参考字段是 field_kategorie。我想把我从最后一个 foreach 循环中得到的分类术语写到这个字段中。
  • 我的回答有误。当然 field_kategorie 是参考分类领域。而 field_kat_return 是辅助字段...
  • 啊!!! @Clive 我太傻了!谢谢您的回答。当然,您的代码就是答案并且完美运行!

标签: php drupal-7 drupal-rules


【解决方案1】:

解决方案比我想象的要简单。感谢@Clive
我可以直接保存存储在 $item 中的 term-id,而无需通过第三个 foreach 循环。

$node->field_kat_return['und'][0]['tid'] = $item;  

【讨论】:

    猜你喜欢
    • 2011-05-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-06
    • 2015-09-06
    相关资源
    最近更新 更多