dantleech/phpcr-taxonomy-bundle

Taxonomy Bundle for PHPCR-ODM

dev-master / 1.0.x-dev 2015-01-25 08:59 UTC

This package is auto-updated.

Last update: 2024-10-29 04:30:52 UTC


README

Build Status Latest Stable Version Total Downloads

What works:

  • Automatically creating tag objects at spsecified paths
    • Paths effectively act as taxonomies
  • Automatic tag object association with target document
  • Taxon referrer count, because PHPCR-ODM doesn't do aggregation. (for tag clouds for example)
  • Command to "fix" or initialize taxon referrer counts

What is planned:

  • Orphan removal
  • Static taxonomies - i.e. specify if new taxons can be created.
  • Hierachical tagging, e.g. specify "Laptops > Levono > X200" as a tag, creating a 3 level heierachy.

This is a very specific taxonomy bundle for PHPCR.

Basic Usage

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.

Alternative Taxon Classes

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;
}

Taxon Referrer Count

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