Recherche transversale: ressources
authorEric Mc Sween <eric.mcsween@gmail.com>
Wed, 27 Oct 2010 16:15:32 +0000 (12:15 -0400)
committerEric Mc Sween <eric.mcsween@gmail.com>
Wed, 27 Oct 2010 16:15:32 +0000 (12:15 -0400)
auf_savoirs_en_partage/savoirs/forms.py
auf_savoirs_en_partage/savoirs/lib/recherche.py
auf_savoirs_en_partage/savoirs/views.py
auf_savoirs_en_partage/templates/savoirs/recherche.html
auf_savoirs_en_partage/templates/savoirs/ressource_index.html
auf_savoirs_en_partage/templates/savoirs/ressource_resultat.html [new file with mode: 0644]

index bf0bdd5..845e9f1 100644 (file)
@@ -3,6 +3,7 @@ import re
 from django import forms
 from datamaster_modeles.models import Thematique, Pays, Region
 from models import Evenement, Discipline, Record
+from savoirs.lib.recherche import build_search_regexp
 
 # Formulaires de recherche
 
@@ -48,29 +49,8 @@ class RecordSearchForm(forms.Form):
         """Retourne une expression régulière compilée qui peut servir à
            chercher les mot-clés recherchés dans un texte."""
         if self.is_valid():
-            words = self.cleaned_data['q'].split()
-            if not words:
-                return None
-            parts = []
-            for word in words:
-                part = re.escape(word.lower())
-                # Les expressions régulières ne connaissent pas la version
-                # en majuscules des caractères accentués.  :(
-                part = part.replace(u'à', u'[àÀ]')
-                part = part.replace(u'â', u'[âÂ]')
-                part = part.replace(u'é', u'[éÉ]')
-                part = part.replace(u'ê', u'[êÊ]')
-                part = part.replace(u'î', u'[îÎ]')
+            return build_search_regexp(self.cleaned_data['q'])
 
-                # Faire ceci après avoir traité les caractères accentués...
-                part = part.replace('a', u'[aàâÀÂ]')
-                part = part.replace('e', u'[eéèëêÉÊ]')
-                part = part.replace('i', u'[iïîÎ]')
-                part = part.replace('o', u'[oô]')
-                part = part.replace('u', u'[uûüù]')
-
-                parts.append(part)
-            return re.compile('|'.join(parts), re.I) 
 ###
 
 class EvenementForm(forms.ModelForm):
index 26c5616..7755450 100644 (file)
@@ -154,3 +154,30 @@ def cherche (page, q, engin=None):
         sep_search (page, q, rc)
     
     return rc
+
+def build_search_regexp(query):
+    """Construit une expression régulière qui peut servir à chercher les
+       mots-clés donnés dans 'query'."""
+    words = query.split()
+    if not words:
+        return None
+    parts = []
+    for word in words:
+        part = re.escape(word.lower())
+        # Les expressions régulières ne connaissent pas la version
+        # en majuscules des caractères accentués.  :(
+        part = part.replace(u'à', u'[àÀ]')
+        part = part.replace(u'â', u'[âÂ]')
+        part = part.replace(u'é', u'[éÉ]')
+        part = part.replace(u'ê', u'[êÊ]')
+        part = part.replace(u'î', u'[îÎ]')
+
+        # Faire ceci après avoir traité les caractères accentués...
+        part = part.replace('a', u'[aàâÀÂ]')
+        part = part.replace('e', u'[eéèëêÉÊ]')
+        part = part.replace('i', u'[iïîÎ]')
+        part = part.replace('o', u'[oô]')
+        part = part.replace('u', u'[uûüù]')
+
+        parts.append(part)
+    return re.compile('|'.join(parts), re.I) 
index ad6a8c9..ff219d6 100644 (file)
@@ -8,7 +8,7 @@ from django.contrib.auth.decorators import login_required
 from django.core.urlresolvers import reverse
 from django import forms
 from django.conf import settings
-from lib.recherche import cherche, google_search
+from lib.recherche import cherche, google_search, build_search_regexp
 from lib import sep
 from lib.calendrier import evenements, evenement_info, combine
 from savoirs.globals import configuration
@@ -60,16 +60,15 @@ def nous_contacter (request):
 
 # recherche
 def recherche (request):
-    q = request.GET.get("q", "")
-    page = int(request.GET.get("page", 0))
-
-    r = cherche (page, q)
-
-    return render_to_response ("savoirs/recherche.html", \
-            Context ({'q': q,
-                      'page': page,
-                      'data': r}), \
-            context_instance = RequestContext(request))
+    query = request.GET.get("q", "")
+    ressources = Record.objects.search(query)
+    search_regexp = build_search_regexp(query)
+    return render_to_response(
+        "savoirs/recherche.html",
+        {'q': query, 'ressources': ressources[:5], 
+         'nb_ressources': len(ressources), 'search_regexp': search_regexp},
+        context_instance = RequestContext(request)
+    )
 
 def avancee (request):
     type = request.GET.get("type", "")
index 3dcf68e..b309669 100644 (file)
 
 </script>
 
-<h4>Résultats de recherche pour « {{ q }} » :</h4>
-
+{% if ressources %}
+<h4>Ressources correspondant à « {{ q }} » ({{ ressources|length }} sur {{ nb_ressources }}):</h4>
 <div class="zone-texte">
-  {% for r in data.results %}
-    {% include "savoirs/resultat.html" %} 
-  {% empty %}
-  <div class="resultatRecherche">
-    <h2>Aucun résultat trouvé</h2>
-  </div>
+  {% for ressource in ressources %}
+  {% include "savoirs/ressource_resultat.html" %} 
   {% endfor %}
+  <a href="{% url savoirs.views.ressource_index %}?q={{ q|urlencode }}">Toutes les {{ nb_ressources }} ressources correspondant à « {{ q }} »</a>
 </div>
-<div class="resultatPages">
-  <span id="pageLinks">
-  </span>
-</div>
+{% endif %}
 
 {% if user.is_authenticated %}
 {% include "savoirs/editor.html" %}
index 4276fe4..f3f2133 100644 (file)
@@ -1,7 +1,6 @@
 {% extends "container_base.html" %}
 
 {% load pagination_tags %}
-{% load search %}
 
 {% block contenu %}
 <h4>Ressources</h4>
   <p><strong>{{ nb_resultats }} ressources correspondant à votre recherche :</strong></p>
   <div class="centre">{% paginate %}</div>
   <div class="zone-texte">
-    {% for r in ressources %}
-    <div class="resultatRecherche">
-      <a class="le-titre" href="{{ r.uri }}">{{ r.title|highlight:search_regexp }}</a>
-      {% if r.creator %}
-      <div><span class="lbl">Auteur:</span> {{ r.creator|highlight:search_regexp }}</div>
-      {% endif %}
-      {% if r.description %}
-      <div class="resultatResume"><span class="lbl">Description:</span> {{ r.description|excerpt:search_regexp|highlight:search_regexp }}</div>
-      {% endif %}
-    </div>
+    {% for ressource in ressources %}
+    {% include "savoirs/ressource_resultat.html" %}
     {% empty %}
     <div class="resultatRecherche">
       <h2>Aucun résultat trouvé</h2>
diff --git a/auf_savoirs_en_partage/templates/savoirs/ressource_resultat.html b/auf_savoirs_en_partage/templates/savoirs/ressource_resultat.html
new file mode 100644 (file)
index 0000000..669310d
--- /dev/null
@@ -0,0 +1,11 @@
+{% load search %}
+
+<div class="resultatRecherche">
+  <a class="le-titre" href="{{ ressource.uri }}">{{ ressource.title|highlight:search_regexp }}</a>
+  {% if ressource.creator %}
+  <div><span class="lbl">Auteur:</span> {{ ressource.creator|highlight:search_regexp }}</div>
+  {% endif %}
+  {% if ressource.description %}
+  <div class="resultatResume"><span class="lbl">Description:</span> {{ ressource.description|excerpt:search_regexp|highlight:search_regexp }}</div>
+  {% endif %}
+</div>