[GeoNode-users] Create new filter for layers

Simone Dalmasso simone.dalmasso at gmail.com
Thu Jun 18 23:59:13 PDT 2015


One issue is in the first part of the js. Module.load-ounce-categories.
Despite the name the original function is used to load also the keywords
etc. so instead or rewrite the entire function just add the chunk $http.get
for your categories into the original module.load-categories.

That should help. :)

Il venerdì 19 giugno 2015, Melvin Ramos <melvin.ramos1991 at gmail.com> ha
scritto:

> 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
> <javascript:_e(%7B%7D,'cvml','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
>> <javascript:_e(%7B%7D,'cvml','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
>>> <javascript:_e(%7B%7D,'cvml','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
>


-- 
Simone
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.osgeo.org/pipermail/geonode-users/attachments/20150619/83a78bae/attachment-0001.html>


More information about the geonode-users mailing list