What works:
What is planned:
This is a very specific taxonomy bundle for PHPCR.
For each document you wish to be tagged you need to add two property annotations,
@Taxons
and @TaxonObjects
. The first will automatically be mapped to an
array, the second will contain a collection of the actual taxon objects.
namespace DTL\PhpcrTaxonomyBundle\Tests\Resources\Document;
use Doctrine\ODM\PHPCR\Mapping\Annotations as PHPCR;
use DTL\PhpcrTaxonomyBundle\Metadata\Annotations as PhpcrTaxonomy;
/**
* @PHPCR\Document(referenceable=true)
*/
class Post
{
/**
* @PHPCR\Id()
*/
public $id;
/**
* @PHPCR\ParentDocument()
*/
public $parent;
/**
* @PhpcrTaxonomy\Taxons(path="/test/taxons")
*/
public $tags;
/**
* @PhpcrTaxonomy\TaxonObjects()
*/
public $tagObjects;
}
Tags can be set as follows:
$post = new Post();
$post->tags = array('one', 'two');
The parent document for each taxon is determined by the path
property of the
Taxons
annotation. It must exist before persisting the document.
You can specify an alternative taxon class as follows:
namespace DTL\PhpcrTaxonomyBundle\Tests\Resources\Document;
use Doctrine\ODM\PHPCR\Mapping\Annotations as PHPCR;
use DTL\PhpcrTaxonomyBundle\Metadata\Annotations as PhpcrTaxonomy;
/**
* @PHPCR\Document(referenceable=true)
*/
class Post
{
// ...
/**
* @PhpcrTaxonomy\Taxons(path="/test/taxons", taxonClass="MyBundle\MyTaxonClass")
*/
public $tags;
}
The Doctrine subscriber automatically records the number of referrers each taxon document has. For example if a taxon is used by 5 posts, then that taxon has 5 referrers.
This is especially useful if you want to show a tag cloud which weights taxons by the number of times that they are referenced.
Note that if you implement a custom taxon document you must implement both
getReferrerCount
and setReferrerCount
and store the field as a Long
.
The taxon referrer count for each taxon is updated whenever a taxon is associated or disassociated with a document. If for some reason this data becomes corrupted you can launch the following command to reinitialize this data:
$ php app/console phpcr-taxonomy:update-referrer-count