doc/book/en/development/devweb/facets.rst
author Adrien Chauve <adrien.chauve@logilab.fr>
Thu, 18 Mar 2010 09:07:10 +0100
branchstable
changeset 4936 a4b772a0d801
parent 4751 1a9d2c3c7f0c
child 5286 43d7044f8d0b
permissions -rw-r--r--
Fixed some of the documentation warnings when building the book with sphinx.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
1714
a721966779be new book layout, do not compile yet
sylvain.thenault@logilab.fr
parents:
diff changeset
     1
The facets system
a721966779be new book layout, do not compile yet
sylvain.thenault@logilab.fr
parents:
diff changeset
     2
-----------------
3991
a0aa9789c6bc Pasting blog about facet in the facet section of the doc book.
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 1714
diff changeset
     3
XXX feed me more (below is the extracted of adim blog)
a0aa9789c6bc Pasting blog about facet in the facet section of the doc book.
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 1714
diff changeset
     4
a0aa9789c6bc Pasting blog about facet in the facet section of the doc book.
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 1714
diff changeset
     5
a0aa9789c6bc Pasting blog about facet in the facet section of the doc book.
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 1714
diff changeset
     6
Recently, for internal purposes, we've made a little cubicweb application to
a0aa9789c6bc Pasting blog about facet in the facet section of the doc book.
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 1714
diff changeset
     7
help us
a0aa9789c6bc Pasting blog about facet in the facet section of the doc book.
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 1714
diff changeset
     8
organizing visits to find new office locations. Here's an *excerpt* of the
a0aa9789c6bc Pasting blog about facet in the facet section of the doc book.
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 1714
diff changeset
     9
schema:
a0aa9789c6bc Pasting blog about facet in the facet section of the doc book.
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 1714
diff changeset
    10
a0aa9789c6bc Pasting blog about facet in the facet section of the doc book.
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 1714
diff changeset
    11
.. sourcecode:: python
a0aa9789c6bc Pasting blog about facet in the facet section of the doc book.
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 1714
diff changeset
    12
a0aa9789c6bc Pasting blog about facet in the facet section of the doc book.
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 1714
diff changeset
    13
  class Office(WorkflowableEntityType):
a0aa9789c6bc Pasting blog about facet in the facet section of the doc book.
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 1714
diff changeset
    14
      price = Int(description='euros / m2 / HC / HT')
a0aa9789c6bc Pasting blog about facet in the facet section of the doc book.
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 1714
diff changeset
    15
      surface = Int(description='m2')
a0aa9789c6bc Pasting blog about facet in the facet section of the doc book.
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 1714
diff changeset
    16
      description = RichString(fulltextindexed=True)
a0aa9789c6bc Pasting blog about facet in the facet section of the doc book.
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 1714
diff changeset
    17
      has_address = SubjectRelation('PostalAddress', cardinality='1?', composite='subject')
a0aa9789c6bc Pasting blog about facet in the facet section of the doc book.
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 1714
diff changeset
    18
      proposed_by = SubjectRelation('Agency')
a0aa9789c6bc Pasting blog about facet in the facet section of the doc book.
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 1714
diff changeset
    19
      comments = ObjectRelation('Comment', cardinality='1*', composite='object')
a0aa9789c6bc Pasting blog about facet in the facet section of the doc book.
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 1714
diff changeset
    20
      screenshots = SubjectRelation(('File', 'Image'), cardinality='*1',
a0aa9789c6bc Pasting blog about facet in the facet section of the doc book.
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 1714
diff changeset
    21
                                    composite='subject')
a0aa9789c6bc Pasting blog about facet in the facet section of the doc book.
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 1714
diff changeset
    22
a0aa9789c6bc Pasting blog about facet in the facet section of the doc book.
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 1714
diff changeset
    23
The two other entity types defined in the schema are `Visit` and `Agency` but we
a0aa9789c6bc Pasting blog about facet in the facet section of the doc book.
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 1714
diff changeset
    24
can also guess from the above that this application uses the two cubes
a0aa9789c6bc Pasting blog about facet in the facet section of the doc book.
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 1714
diff changeset
    25
`comment`_ and
4751
1a9d2c3c7f0c [book] more id -> __regid__
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 4446
diff changeset
    26
`addressbook`_ (remember, cubicweb is only a game where you assemble cubes !).
3991
a0aa9789c6bc Pasting blog about facet in the facet section of the doc book.
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 1714
diff changeset
    27
a0aa9789c6bc Pasting blog about facet in the facet section of the doc book.
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 1714
diff changeset
    28
While we know that just defining the schema in enough to have a full, usable,
4751
1a9d2c3c7f0c [book] more id -> __regid__
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 4446
diff changeset
    29
(testable !) application, we also know that every application needs to be
3991
a0aa9789c6bc Pasting blog about facet in the facet section of the doc book.
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 1714
diff changeset
    30
customized to fulfill the needs it was built for. So in this case, what we
a0aa9789c6bc Pasting blog about facet in the facet section of the doc book.
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 1714
diff changeset
    31
needed most was some custom filters that would let us restrict searches
a0aa9789c6bc Pasting blog about facet in the facet section of the doc book.
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 1714
diff changeset
    32
according
a0aa9789c6bc Pasting blog about facet in the facet section of the doc book.
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 1714
diff changeset
    33
to surfaces, prices or zipcodes. Fortunately for us, Cubicweb provides the
a0aa9789c6bc Pasting blog about facet in the facet section of the doc book.
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 1714
diff changeset
    34
**facets** (image_) mechanism and a few base classes that make the task quite
a0aa9789c6bc Pasting blog about facet in the facet section of the doc book.
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 1714
diff changeset
    35
easy:
a0aa9789c6bc Pasting blog about facet in the facet section of the doc book.
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 1714
diff changeset
    36
a0aa9789c6bc Pasting blog about facet in the facet section of the doc book.
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 1714
diff changeset
    37
.. sourcecode:: python
a0aa9789c6bc Pasting blog about facet in the facet section of the doc book.
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 1714
diff changeset
    38
4751
1a9d2c3c7f0c [book] more id -> __regid__
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 4446
diff changeset
    39
  class PostalCodeFacet(RelationFacet):
1a9d2c3c7f0c [book] more id -> __regid__
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 4446
diff changeset
    40
      __regid__ = 'postalcode-facet'             # every registered class must have an id
1a9d2c3c7f0c [book] more id -> __regid__
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 4446
diff changeset
    41
      __select__ = implements('Office')   # this facet should only be selected when
3991
a0aa9789c6bc Pasting blog about facet in the facet section of the doc book.
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 1714
diff changeset
    42
                                          # visualizing offices
a0aa9789c6bc Pasting blog about facet in the facet section of the doc book.
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 1714
diff changeset
    43
      rtype = 'has_address'               # this facet is a filter on the entity linked to
a0aa9789c6bc Pasting blog about facet in the facet section of the doc book.
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 1714
diff changeset
    44
                                          # the office thrhough the relation
a0aa9789c6bc Pasting blog about facet in the facet section of the doc book.
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 1714
diff changeset
    45
                                          # has_address
a0aa9789c6bc Pasting blog about facet in the facet section of the doc book.
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 1714
diff changeset
    46
      target_attr = 'postalcode'          # the filter's key is the attribute "postal_code"
a0aa9789c6bc Pasting blog about facet in the facet section of the doc book.
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 1714
diff changeset
    47
                                          # of the target PostalAddress entity
a0aa9789c6bc Pasting blog about facet in the facet section of the doc book.
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 1714
diff changeset
    48
a0aa9789c6bc Pasting blog about facet in the facet section of the doc book.
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 1714
diff changeset
    49
This is a typical `RelationFacet`: we want to be able to filter offices
a0aa9789c6bc Pasting blog about facet in the facet section of the doc book.
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 1714
diff changeset
    50
according
a0aa9789c6bc Pasting blog about facet in the facet section of the doc book.
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 1714
diff changeset
    51
to the attribute `postalcode` of their associated `PostalAdress`. Each line in
a0aa9789c6bc Pasting blog about facet in the facet section of the doc book.
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 1714
diff changeset
    52
the class is explained by the comment on its right.
a0aa9789c6bc Pasting blog about facet in the facet section of the doc book.
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 1714
diff changeset
    53
a0aa9789c6bc Pasting blog about facet in the facet section of the doc book.
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 1714
diff changeset
    54
Now, here is the code to define a filter based on the `surface` attribute of the
a0aa9789c6bc Pasting blog about facet in the facet section of the doc book.
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 1714
diff changeset
    55
`Office`:
a0aa9789c6bc Pasting blog about facet in the facet section of the doc book.
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 1714
diff changeset
    56
a0aa9789c6bc Pasting blog about facet in the facet section of the doc book.
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 1714
diff changeset
    57
.. sourcecode:: python
a0aa9789c6bc Pasting blog about facet in the facet section of the doc book.
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 1714
diff changeset
    58
a0aa9789c6bc Pasting blog about facet in the facet section of the doc book.
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 1714
diff changeset
    59
  class SurfaceFacet(AttributeFacet):
4751
1a9d2c3c7f0c [book] more id -> __regid__
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 4446
diff changeset
    60
      __regid__ = 'surface-facet'              # every registered class must have an id
1a9d2c3c7f0c [book] more id -> __regid__
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 4446
diff changeset
    61
      __select__ = implements('Office') # this facet should only be selected when
3991
a0aa9789c6bc Pasting blog about facet in the facet section of the doc book.
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 1714
diff changeset
    62
                                        # visualizing offices
4751
1a9d2c3c7f0c [book] more id -> __regid__
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 4446
diff changeset
    63
      rtype = 'surface'                 # the filter's key is the attribute "surface"
1a9d2c3c7f0c [book] more id -> __regid__
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 4446
diff changeset
    64
      comparator = '>='                 # override the default value of operator since
3991
a0aa9789c6bc Pasting blog about facet in the facet section of the doc book.
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 1714
diff changeset
    65
                                        # we want to filter according to a
4751
1a9d2c3c7f0c [book] more id -> __regid__
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 4446
diff changeset
    66
                                        # minimal
3991
a0aa9789c6bc Pasting blog about facet in the facet section of the doc book.
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 1714
diff changeset
    67
                                        # value, not an exact one
a0aa9789c6bc Pasting blog about facet in the facet section of the doc book.
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 1714
diff changeset
    68
a0aa9789c6bc Pasting blog about facet in the facet section of the doc book.
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 1714
diff changeset
    69
      def rset_vocabulary(self, ___):
a0aa9789c6bc Pasting blog about facet in the facet section of the doc book.
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 1714
diff changeset
    70
          """override the default vocabulary method since we want to hard-code
4751
1a9d2c3c7f0c [book] more id -> __regid__
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 4446
diff changeset
    71
          our threshold values.
3991
a0aa9789c6bc Pasting blog about facet in the facet section of the doc book.
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 1714
diff changeset
    72
          Not overriding would generate a filter box with all existing surfaces
a0aa9789c6bc Pasting blog about facet in the facet section of the doc book.
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 1714
diff changeset
    73
          defined in the database.
a0aa9789c6bc Pasting blog about facet in the facet section of the doc book.
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 1714
diff changeset
    74
          """
a0aa9789c6bc Pasting blog about facet in the facet section of the doc book.
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 1714
diff changeset
    75
          return [('> 200', '200'), ('> 250', '250'),
a0aa9789c6bc Pasting blog about facet in the facet section of the doc book.
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 1714
diff changeset
    76
                  ('> 275', '275'), ('> 300', '300')]
a0aa9789c6bc Pasting blog about facet in the facet section of the doc book.
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 1714
diff changeset
    77
a0aa9789c6bc Pasting blog about facet in the facet section of the doc book.
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 1714
diff changeset
    78
a0aa9789c6bc Pasting blog about facet in the facet section of the doc book.
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 1714
diff changeset
    79
And that's it: we have two filter boxes automatically displayed on each page
a0aa9789c6bc Pasting blog about facet in the facet section of the doc book.
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 1714
diff changeset
    80
presenting more than one office. The `price` facet is basically the same as the
a0aa9789c6bc Pasting blog about facet in the facet section of the doc book.
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 1714
diff changeset
    81
`surface` one but with a different vocabulary and with ``rtype = 'price'``.
a0aa9789c6bc Pasting blog about facet in the facet section of the doc book.
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 1714
diff changeset
    82
a0aa9789c6bc Pasting blog about facet in the facet section of the doc book.
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 1714
diff changeset
    83
(The cube also benefits from the builtin google map views defined by
a0aa9789c6bc Pasting blog about facet in the facet section of the doc book.
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 1714
diff changeset
    84
cubicweb but that's for another blog).
a0aa9789c6bc Pasting blog about facet in the facet section of the doc book.
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 1714
diff changeset
    85
a0aa9789c6bc Pasting blog about facet in the facet section of the doc book.
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 1714
diff changeset
    86
.. _image: http://www.cubicweb.org/image/197646?vid=download
a0aa9789c6bc Pasting blog about facet in the facet section of the doc book.
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 1714
diff changeset
    87
.. _comment: http://www.cubicweb.org/project/cubicweb-comment
a0aa9789c6bc Pasting blog about facet in the facet section of the doc book.
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 1714
diff changeset
    88
.. _addressbook: http://www.cubicweb.org/project/cubicweb-addressbook
a0aa9789c6bc Pasting blog about facet in the facet section of the doc book.
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 1714
diff changeset
    89
a0aa9789c6bc Pasting blog about facet in the facet section of the doc book.
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 1714
diff changeset
    90
CubicWeb has this really nice builtin `facet`_ system to
a0aa9789c6bc Pasting blog about facet in the facet section of the doc book.
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 1714
diff changeset
    91
define restrictions `filters`_ really as easily as possible.
a0aa9789c6bc Pasting blog about facet in the facet section of the doc book.
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 1714
diff changeset
    92
a0aa9789c6bc Pasting blog about facet in the facet section of the doc book.
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 1714
diff changeset
    93
We've just added two new kind of facets in CubicWeb :
a0aa9789c6bc Pasting blog about facet in the facet section of the doc book.
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 1714
diff changeset
    94
a0aa9789c6bc Pasting blog about facet in the facet section of the doc book.
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 1714
diff changeset
    95
- The **RangeFacet** which displays a slider using `jquery`_
4751
1a9d2c3c7f0c [book] more id -> __regid__
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 4446
diff changeset
    96
  to choose a lower bound and an upper bound. The **RangeWidget**
3991
a0aa9789c6bc Pasting blog about facet in the facet section of the doc book.
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 1714
diff changeset
    97
  works with either numerical values or date values
a0aa9789c6bc Pasting blog about facet in the facet section of the doc book.
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 1714
diff changeset
    98
a0aa9789c6bc Pasting blog about facet in the facet section of the doc book.
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 1714
diff changeset
    99
- The **HasRelationFacet** which displays a simple checkbox and
a0aa9789c6bc Pasting blog about facet in the facet section of the doc book.
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 1714
diff changeset
   100
  lets you refine your selection in order to get only entities
a0aa9789c6bc Pasting blog about facet in the facet section of the doc book.
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 1714
diff changeset
   101
  that actually use this relation.
a0aa9789c6bc Pasting blog about facet in the facet section of the doc book.
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 1714
diff changeset
   102
a0aa9789c6bc Pasting blog about facet in the facet section of the doc book.
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 1714
diff changeset
   103
.. image :: http://www.cubicweb.org/Image/343498?vid=download
a0aa9789c6bc Pasting blog about facet in the facet section of the doc book.
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 1714
diff changeset
   104
a0aa9789c6bc Pasting blog about facet in the facet section of the doc book.
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 1714
diff changeset
   105
4751
1a9d2c3c7f0c [book] more id -> __regid__
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 4446
diff changeset
   106
Here's an example of code that defines a facet to filter
3991
a0aa9789c6bc Pasting blog about facet in the facet section of the doc book.
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 1714
diff changeset
   107
musical works according to their composition date:
a0aa9789c6bc Pasting blog about facet in the facet section of the doc book.
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 1714
diff changeset
   108
a0aa9789c6bc Pasting blog about facet in the facet section of the doc book.
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 1714
diff changeset
   109
.. sourcecode:: python
a0aa9789c6bc Pasting blog about facet in the facet section of the doc book.
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 1714
diff changeset
   110
a0aa9789c6bc Pasting blog about facet in the facet section of the doc book.
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 1714
diff changeset
   111
    class CompositionDateFacet(DateRangeFacet):
a0aa9789c6bc Pasting blog about facet in the facet section of the doc book.
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 1714
diff changeset
   112
        # 1. make sure this facet is displayed only on Track selection
a0aa9789c6bc Pasting blog about facet in the facet section of the doc book.
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 1714
diff changeset
   113
        __select__ = DateRangeFacet.__select__ & implements('Track')
4446
a413fac5ff5e damn me, more stupid sed fix...
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4437
diff changeset
   114
        # 2. give the facet an id required by CubicWeb)
4751
1a9d2c3c7f0c [book] more id -> __regid__
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 4446
diff changeset
   115
        __regid__ = 'compdate-facet'
3991
a0aa9789c6bc Pasting blog about facet in the facet section of the doc book.
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 1714
diff changeset
   116
        # 3. specify the attribute name that actually stores the date in the DB
a0aa9789c6bc Pasting blog about facet in the facet section of the doc book.
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 1714
diff changeset
   117
        rtype = 'composition_date'
a0aa9789c6bc Pasting blog about facet in the facet section of the doc book.
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 1714
diff changeset
   118
a0aa9789c6bc Pasting blog about facet in the facet section of the doc book.
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 1714
diff changeset
   119
And that's it, on each page displaying tracks, you'll be able to filter them
a0aa9789c6bc Pasting blog about facet in the facet section of the doc book.
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 1714
diff changeset
   120
according to their composition date with a jquery slider.
a0aa9789c6bc Pasting blog about facet in the facet section of the doc book.
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 1714
diff changeset
   121
a0aa9789c6bc Pasting blog about facet in the facet section of the doc book.
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 1714
diff changeset
   122
All this, brought by CubicWeb (in the next 3.3 version)
a0aa9789c6bc Pasting blog about facet in the facet section of the doc book.
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 1714
diff changeset
   123
a0aa9789c6bc Pasting blog about facet in the facet section of the doc book.
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 1714
diff changeset
   124
.. _facet: http://en.wikipedia.org/wiki/Faceted_browser
a0aa9789c6bc Pasting blog about facet in the facet section of the doc book.
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 1714
diff changeset
   125
.. _filters: http://www.cubicweb.org/blogentry/154152
a0aa9789c6bc Pasting blog about facet in the facet section of the doc book.
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 1714
diff changeset
   126
.. _jquery: http://www.jqueryui.com/
a0aa9789c6bc Pasting blog about facet in the facet section of the doc book.
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 1714
diff changeset
   127
a0aa9789c6bc Pasting blog about facet in the facet section of the doc book.
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 1714
diff changeset
   128
To use **HasRelationFacet** on a reverse relation add ``role = 'object'`` in
a0aa9789c6bc Pasting blog about facet in the facet section of the doc book.
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 1714
diff changeset
   129
it's definitions.