[GeoNode-users] Create new filter for layers
Melvin Ramos
melvin.ramos1991 at gmail.com
Thu Jun 18 15:19:05 PDT 2015
Hello Simone,
"You did well young padawan" (:
Thanks. I just checked it out. In theory I replicated everything but still
not working. I will go step by step like before:
*Modified search_scripts.html in the search templates*
I added this line of code:
*IUCN_CATEGORIES_ENDPOINT = '{% url 'api_dispatch_list' api_name='api'
> resource_name='iucn_categories' %}';*
Just like the categories endpoint
*Modified the search.js in the static folder*
I added in the loaded section the following
> * module.load_iucn_categories = function ($http, $rootScope, $location){*
> * var params = typeof FILTER_TYPE == 'undefined' ? {} : {'type':
> FILTER_TYPE};*
> * if ($location.search().hasOwnProperty('title__icontains')){*
> * params['title__icontains'] =
> $location.search()['title__icontains'];*
> * }*
> * $http.get(IUCN_CATEGORIES_ENDPOINT, {params:
> params}).success(function(data){*
> *
> if($location.search().hasOwnProperty('iucn_category__identifier__in')){*
> * data.objects =
> module.set_initial_filters_from_query(data.objects,*
> * $location.search()['iucn_category__identifier__in'],
> 'identifier');*
> * }*
> * $rootScope.categories = data.objects;*
> * if (HAYSTACK_FACET_COUNTS && $rootScope.query_data) {*
> * module.haystack_facets($http, $rootScope, $location);*
> * }*
> * });** }*
Then I added in the module.haystack_facets the following
> * if ("iucn_categories" in $rootScope) {*
> * $rootScope.category_counts = data.meta.facets.category;*
> * for (var id in $rootScope.categories) {*
> * var category = $rootScope.categories[id];*
> * if (category.identifier in $rootScope.category_counts) {*
> * category.count =
> $rootScope.category_counts[category.identifier]*
> * } else {*
> * category.count = 0;*
> * }*
> * }** }*
Finally, in the module.run I added this
> * if ($('#iucn_categories').length > 0){*
> * module.load_categories($http, $rootScope, $location);** }*
But it didn't work, still shows nothing on the template.What am I missing??
Thanks in advance,
Melvin
Enviado con MailTrack
<https://mailtrack.io/install?source=signature&lang=es&referral=melvin.ramos1991@gmail.com&idSignature=23>
2015-06-18 17:01 GMT-04:30 Simone Dalmasso <simone.dalmasso at gmail.com>:
> Hi Melvin,
> you did well, the only missing thing is here
> https://github.com/GeoNode/geonode/blob/master/geonode/static/geonode/js/search/search.js,
> javascript part that loads the categories through the api and compiles the
> query.
>
> Ciao
>
> 2015-06-18 23:17 GMT+02:00 Melvin Ramos <melvin.ramos1991 at gmail.com>:
>
>> Hello,
>>
>> I'm trying to duplicate the Categories filter, because I'm need to use a
>> new set of categories for my layers, but I'm having a hard time trying to
>> find out how the templates gets the data since it uses AngularJS.
>>
>> So here is what I''ve done so far:
>>
>> *Modified the models.py of the Base app*
>> I added a new class called IUCNCategory
>>
>>
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>> *class IUCNCategory(models.Model): """ Metadata regarding IUCN
>>> standards """ identifier = models.CharField(max_length=255)
>>> category_type = models.CharField( choices=(
>>> ('risk_criteria', 'Risk Criteria'), ('bio_realm',
>>> 'Biogeographical Realm'), ('typology', 'Typology') ),
>>> max_length=255, ) description = models.TextField(default='')
>>> gn_description = models.TextField('RLE description', default='',
>>> null=True) # is_choice = models.BooleanField(default=True) def
>>> __unicode__(self): return u"{0}".format(self.gn_description)
>>> class Meta: ordering = ("category_type","identifier",)
>>> verbose_name_plural = 'IUCN Categories'*
>>
>>
>> It's just like TopicCategory with one different attribute.
>>
>> I added to the class ResourceBase the following attribute
>>
>> *iucn_category = models.ForeignKey(IUCNCategory, null=True, blank=True)*
>>
>>
>>
>> *Modified the api.py **of the Api app*
>> I created a new class called IUCNCategoryResource
>>
>>
>>> *class IUCNCategoryResource(TypeFilteredResource):** """IUCN
>>> Category api"""*
>>>
>>> * def serialize(self, request, data, format, options={}):**
>>> options['count_type'] = 'iucn_category'*
>>> * return super(IUCNCategoryResource, self).serialize(request,
>>> data, format, options)*
>>>
>>> * class Meta:*
>>> * queryset = IUCNCategory.objects.all()*
>>> * resource_name = 'iucn_categories'*
>>> * allowed_methods = ['get']*
>>> * filtering = {*
>>> * 'identifier': ALL,*
>>> * }** serializer = CountJSONSerializer()*
>>
>>
>> It's like the class TopicCategoryResource
>>
>> *Modified the* *resourcebase_api.py **of the Api app*
>>
>> I added to the class CommonModelApi the following attribute
>>
>>
>>>
>>>
>>>
>>> *iucn_category = fields.ToOneField( IUCNCategoryResource,
>>> 'iucn_category', null=True, full=True)*
>>
>>
>> In the definition on the Haystack filters I added the following in the
>> proper places:
>>
>>
>>>
>>>
>>>
>>>
>>>
>>> *...iucn_category =
>>> parameters.getlist("iucn_category__identifier__in")...if iucn_category:
>>> sqs = (SearchQuerySet() if sqs is None else sqs).narrow(
>>> 'iucn_category:%s' % ','.join(map(str, iucn_category)))...*
>>
>>
>> Just like the category field.
>>
>> *Modified the** urls**.py **of the Api app*
>>
>> I imported the IUCNCategoryResource from the apy.py and wrote
>>
>> *api.register(IUCNCategoryResource())*
>>
>>
>> *Modified the template _general_filters.html inside the search templates*
>>
>> I added the following code
>>
>>
>>> *<nav class="filter">*
>>> * <h4><a href="#" class="toggle toggle-nav"><i class="fa
>>> fa-chevron-right"></i>{% trans "Risk Criteria" %}</a></h4>*
>>> * <ul class="nav closed" id="iucn_categories">*
>>> * {% verbatim %}*
>>> * <li ng-repeat="iucn_category in iucn_categories"
>>> ng-if="iucn_category.count > 0">*
>>> * <a data-value="{{ iucn_category.identifier }}"
>>> data-filter="iucn_category__identifier__in" *
>>> * ng-click="multiple_choice_listener($event)"
>>> class="{{iucn_category.active}}">{{ iucn_category.gn_description | limitTo:
>>> 25 }}{{ iucn_category.gn_description.length > 25 ? '...' : ''}}*
>>> * <span class="badge pull-right">{{ iucn_category.count
>>> }}</span>*
>>> * </a>*
>>> * </li>*
>>> * {% endverbatim %}*
>>> * </ul>**</nav>*
>>
>>
>> But nothing shows beneath the filter name in the template, even when I
>> have one IUCN category stored in database. I'm guessing there is a view
>> somewhere or I'm missing something that allows to pass the data and I can't
>> find it or just Angular is too mystic for me.
>>
>> Can anybody help me?
>>
>> Thanks in advance,
>>
>> Melvin
>>
>>
>> --
>> Melvin David Ramos Macías
>> 07-41408
>> Ingeniería de Computación
>> Universidad Simón Bolívar
>>
>>
>>
>> Enviado con MailTrack
>> <https://mailtrack.io/install?source=signature&lang=es&referral=melvin.ramos1991@gmail.com&idSignature=23>
>>
>> _______________________________________________
>> geonode-users mailing list
>> geonode-users at lists.osgeo.org
>> http://lists.osgeo.org/cgi-bin/mailman/listinfo/geonode-users
>>
>>
>
>
> --
> Simone
>
--
Melvin David Ramos Macías
07-41408
Ingeniería de Computación
Universidad Simón Bolívar
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.osgeo.org/pipermail/geonode-users/attachments/20150618/5c8c58fe/attachment.html>
More information about the geonode-users
mailing list