You are here

7 按照路径更新面包屑

admin 的头像
Submitted by admin on 星期四, 2015-09-17 03:41

作者:老葛,北京亚艾元软件有限责任公司,http://www.yaiyuan.com

一个新的问题出现了,如果当我们更新一个节点时,也使用rules更新我们的面包屑,此时由于我们通过rules设置的面包屑并不带有bid,所以默认只会新建。而实际上,一个路径下面,应该只有一个面包屑的,也就是说path这个属性是唯一的。但是在使用rules创建面包屑的时候,我们没有检查这种唯一性。为了避免,创建很多同一路径的面包屑,我们为面包屑对象实现自己的save方法。如下所示:

/**

 * The class used for breadcrumb entities

 */

class Breadcrumb extends Entity {

  ...

  protected function defaultUri() {

    return array('path' => 'breadcrumb/' . $this->bid);

  }

  

  public function save() {

    if (empty($this->bid) && (!empty($this->path))) {

      $existing_breadcrumb = breadcrumb2_load_by_path($this->path);

      if(!empty($existing_breadcrumb)){

         $this->bid = $existing_breadcrumb->bid;

         $this->is_new = FALSE;

      }

    }

    parent::save();

  }

}

粗体部分,就是我们这里新增的,在这里,我们在bid为空的情况下,尝试根据path加载面包屑对象,如果加载了面包屑对象,我们使用该面包屑的bid作为我们的bid,并将is_new设置为FALSE,表示这里是更新,而不是新建。


Drupal版本: