Drupal:使用规则和自定义php代码编写分类法参考字段

时间:2012-07-16 11:39:31

标签: php drupal-7 drupal-rules

我有像这样的分类词汇 kategorie

  • 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,而不是从词汇表中获取分类术语并将其写入引用的术语域。

到目前为止我做了什么:
设置一个在保存节点之前触发的规则,使用 按属性获取实体 的操作将词汇表中的分类术语从数组中获取。然后我添加一个操作 执行自定义PHP代码 来查找子tid,并将其写入名为 katReturn 的字段中。
这是我使用的代码(我是一个完全的php-beginner,我不知道,如果这是一种优雅的方式,但是它有效):

$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技能是有限的,我感谢任何帮助,这指向了正确的方向。感谢名单。

1 个答案:

答案 0 :(得分:1)

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

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