以编程方式在Drupal 7中按标题获取节点

Eru*_*nen 9 drupal drupal-7 drupal-modules

我有一个模块,以编程方式将大量节点添加到我的Drupal 7站点.为了防止重复,我想检查系统中是否已存在新创建的节点的标题.永远不会出现两个节点具有相同名称的情况.我尝试过使用node_load(),但这似乎不允许我根据标题加载节点.

我很难理解如何继续,所以我想知道这里的人是否可以帮助我.

总结:如何检查具有特定标题的节点是否已存在?

谢谢.

Pie*_*yle 18

节点是实体,因此您可以使用EntityFieldQuery类来查询它们.这样,您就不必费心将信息存储在数据库中.并且,您是否需要根据字段值添加其他过滤器,代码演变将很容易.

$result = (new EntityFieldQuery())
  ->entityCondition('entity_type', 'node')
  ->propertyCondition('title', $title)
  ->execute();
$title_is_unique = empty($result['node']);
Run Code Online (Sandbox Code Playgroud)

  • 是的,使用EntityFieldQuery查询单个节点属性会产生一些开销.但由于它只适用于多节点创建过程,因此性能成本很有可能是微不足道的.如果节点创建过程演变成应该检查几个条件的东西,那么它将更容易维护. (2认同)

Ker*_*rrM 8

您可以使用SQL查询获取所有节点标题,例如:

 $row = db_query('SELECT nid FROM {node} WHERE title = :mytitle', array(':mytitle' => $myNewTitle))->fetchField();
 if(!isset($row['nid'])) {
    //safe to continue
 } else {
    //that title is already there and its in node with node id "nid"
 }
Run Code Online (Sandbox Code Playgroud)

如果没有结果返回,那么你可能会认为你很高兴.

或者,您可以编辑节点表以使标题字段为UNIQUE并处理MySQL抛出的错误.不知道那是多么可行.