【发布时间】: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