Drupal分类法,术语中包含特殊字符

时间:2012-06-01 15:42:20

标签: drupal taxonomy drupal-taxonomy

我将数据从外部源同步到Drupal安装。当我将分类术语关系添加到我新创建的节点时,我遇到了问题。

我正在同步汽车,如果制造商名称(代码中的$ name)不在词汇表中,它将被添加到它中。如果它已经存在,则tid附加到节点。

这与法拉利或大众汽车等术语完美配合。但后来有梅赛德斯 - 本茨。出于某种原因,EntityFieldQuery似乎没有从词汇表中找到它,因为这个代码在循环中运行时会一遍又一遍地创建Mercedes-Bentz术语。

我猜问题是文字之间的冲突。我想在EntityFieldQuery后面看到SQL子句,但是当我运行它时我没有完整的drupal设置,因此没有加载像Devel这样的模块。而且我不知道如何检查SQL。

我非常感谢有关如何调试或如何解决此问题的建议。感谢每一个环节。

这是我的代码:

$query = new EntityFieldQuery();
$result = $query
    ->entityCondition('entity_type', 'taxonomy_term')
    ->propertyCondition('name', $name) // $name = manufacturer, like "Ferrari"
    ->propertyCondition('vid', 2)
    ->execute();

if(!empty($result))
{
    $tmp = array_pop($result['taxonomy_term']);
    $node->field_brand[LANGUAGE_NONE][0]['tid'] = $tmp->tid;
}
else
{
    $term = new stdClass();
    $term->vid = 2;
    $term->name = $name
    taxonomy_term_save($term);
    $node->field_brand[LANGUAGE_NONE][0]['tid'] = $term->tid;
}

1 个答案:

答案 0 :(得分:0)

有一种方法可以对taxonomy_get_term_by_name()做同样的事情,但我想这不是首选的方式,所解释的解决方案应该是正确的。

我认为我们在这里看到了Drupal的错误。但对于其他人试图这样做,这是解决方案:

$test = taxonomy_get_term_by_name($name);
// It should be full of unique names, so no need to go through all of them
if(!empty($test))
{
    $tmp = array_pop($test);
    $node->field_brand[LANGUAGE_NONE][0]['tid'] = $tmp->tid;
}
else
{
    $term = new stdClass();
    $term->vid = 2;
    $term->name = $name;
    taxonomy_term_save($term);
    $node->field_brand[LANGUAGE_NONE][0]['tid'] = $term->tid;
}