Aussi: diverses améliorations à la recherche d'actualités.
--- /dev/null
+/* French initialisation for the jQuery UI date picker plugin. */
+/* Written by Keith Wood (kbwood{at}iinet.com.au) and Stéphane Nahmani (sholby@sholby.net). */
+jQuery(function($){
+ $.datepicker.regional['fr'] = {
+ closeText: 'Fermer',
+ prevText: '<Préc',
+ nextText: 'Suiv>',
+ currentText: 'Courant',
+ monthNames: ['Janvier','Février','Mars','Avril','Mai','Juin',
+ 'Juillet','Août','Septembre','Octobre','Novembre','Décembre'],
+ monthNamesShort: ['Jan','Fév','Mar','Avr','Mai','Jun',
+ 'Jul','Aoû','Sep','Oct','Nov','Déc'],
+ dayNames: ['Dimanche','Lundi','Mardi','Mercredi','Jeudi','Vendredi','Samedi'],
+ dayNamesShort: ['Dim','Lun','Mar','Mer','Jeu','Ven','Sam'],
+ dayNamesMin: ['Di','Lu','Ma','Me','Je','Ve','Sa'],
+ weekHeader: 'Sm',
+ dateFormat: 'dd/mm/yy',
+ firstDay: 1,
+ isRTL: false,
+ showMonthAfterYear: false,
+ yearSuffix: ''};
+ $.datepicker.setDefaults($.datepicker.regional['fr']);
+});
\ No newline at end of file
});
+ // Activer le datepicker sur les input de classe "date"
+ $.datepicker.setDefaults($.datepicker.regional['fr']);
+ $('input:text.date').datepicker();
});
import re
from django import forms
from datamaster_modeles.models import Thematique, Pays, Region
-from models import Evenement, Discipline, Record
+from models import Evenement, Discipline, Record, Actualite
from savoirs.lib.recherche import build_search_regexp
# Formulaires de recherche
if self.is_valid():
return build_search_regexp(self.cleaned_data['q'])
+class ActualiteSearchForm(forms.Form):
+ """Formulaire de recherche pour les actualités."""
+
+ q = forms.CharField(required=False, label="Mots-clés")
+ date_min = forms.DateField(required=False, label="Depuis le",
+ widget=forms.DateInput(attrs={'class': 'date'}),
+ input_formats=['%d/%m/%Y'])
+ date_max = forms.DateField(required=False, label="Jusqu'au",
+ widget=forms.DateInput(attrs={'class': 'date'}),
+ input_formats=['%d/%m/%Y'])
+
+ def get_query_set(self):
+ """Retourne l'ensemble des actualités qui correspondent aux valeurs
+ entrées dans le formulaire."""
+ actualites = Actualite.objects.all()
+ if self.is_valid():
+ query = self.cleaned_data['q']
+ if query:
+ actualites = actualites.search(query)
+ date_min = self.cleaned_data['date_min']
+ if date_min:
+ print date_min
+ actualites = actualites.filter(date__gte=date_min)
+ date_max = self.cleaned_data['date_max']
+ if date_max:
+ actualites = actualites.filter(date__lte=date_max)
+ return actualites
+
+ def get_search_regexp(self):
+ """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():
+ return build_search_regexp(self.cleaned_data['q'])
###
class EvenementForm(forms.ModelForm):
class ActualiteQuerySet(models.query.QuerySet):
def search(self, text):
- return self.filter(titre__icontains=text)
+ return self.filter(Q(titre__icontains=text) | Q(texte__icontains=text))
class Actualite(models.Model):
id = models.AutoField(primary_key=True, db_column='id_actualite')
# actualités
def actualite_index(request):
- delta = datetime.timedelta(days=90)
- oldest = datetime.date.today() - delta
- actualites = Actualite.objects.filter(visible=True, date__gt=oldest)
- query = request.GET.get('q')
- if query:
- actualites = actualites.search(query)
+ search_form = ActualiteSearchForm(request.GET)
+ actualites = search_form.get_query_set()
+ search_regexp = search_form.get_search_regexp()
return render_to_response("savoirs/actualite_index.html",
- {'actualites': actualites},
+ dict(actualites=actualites,
+ search_form=search_form,
+ search_regexp=search_regexp,
+ nb_resultats=len(actualites)),
context_instance = RequestContext(request))
# agenda
<title>Savoirs en partage - Agence universitaire de la Francophonie</title>
<script type="text/javascript" src="{{ MEDIA_URL }}js/jquery/jquery.js"></script>
<script type="text/javascript" src="{{ MEDIA_URL }}js/jquery/jquery-ui.js"></script>
+ <script type="text/javascript" src="{{ MEDIA_URL }}js/jquery/jquery.ui.datepicker-fr.js"></script>
<script type="text/javascript" src="{{ MEDIA_URL }}js/tabber.js"></script>
<script type="text/javascript" src="{{ MEDIA_URL }}js/pagination.js"></script>
<script type="text/javascript" src="{{ MEDIA_URL }}js/sep.js"></script>
- <script type="text/javascript" src="{{ MEDIA_URL }}js/jquery/jquery.datepicker.js"></script>
- <script type="text/javascript" src="{{ MEDIA_URL }}js/jquery/jquery.timepicker.js"></script>
- <link href="{{ MEDIA_URL }}css/jquery/jquery.datepicker.css" rel="stylesheet" type="text/css" />
- <link href="{{ MEDIA_URL }}css/jquery/jquery.timepicker.css" rel="stylesheet" type="text/css" />
<link href="{{ MEDIA_URL }}css/global.css" rel="stylesheet" type="text/css" />
<link href="{{ MEDIA_URL }}css/tabber.css" rel="stylesheet" type="text/css" />
<link rel="stylesheet" href="{{ MEDIA_URL }}js/jquery/css/smoothness/jquery-ui-1.8rc3.custom.css" type="text/css" media="all" />
{% load pagination_tags %}
{% block contenu %}
-{% autopaginate actualites %}
+{% autopaginate actualites 10 %}
<h4>Actualités</h4>
<ul class="actions">
<li><a href="/rss/actualites"><img src="/media/img/feed.png" /></a></li>
<div class="contenu-wrapper">
<form action="" method="get">
- <input type="text" name="q" value="{{ request.GET.q }}" size="50" />
- <input type="submit" value="Rechercher" />
+ <table>
+ {{ search_form.as_table }}
+ <tr><th></th><td><input type="submit" value="Rechercher" /></td></tr>
+ </table>
</form>
+ <p><strong>{{ nb_resultats }} actualités correspondant à votre recherche :</strong></p>
<div class="centre">{% paginate %}</div>
- <table id="repertoire">
- <tr>
- <th>Nom</th>
- <th>Source</th>
- </tr>
- {% for actualite in actualites %}
- <tr class="{% cycle 'odd' 'notodd' %}">
- <td><a href="{{ actualite.url }}" class="le-titre">{{ actualite.titre|truncatewords:20 }}</a></td>
- <td>{{ actualite.source.nom }}</td>
- </tr>
- {% endfor %}
- </table>
+ {% for actualite in actualites %}
+ {% include "savoirs/actualite_resultat.html" %}
+ {% endfor %}
<div class="centre">{% paginate %}</div>
</div>
{% endblock %}
{% load search %}
<div class="resultatRecherche">
+ <div class="la-date">{{ actualite.date|date:"d F Y" }}</div>
<a class="le-titre" href="{{ actualite.url }}">{{ actualite.titre|highlight:search_regexp }}</a>
<div class="resultatResume">{{ actualite.texte|highlight:search_regexp }}</div>
+ {% if actualite.source %}
+ <div><span class="lbl">Source:</span> {{ actualite.source.nom }}</div>
+ {% endif %}
</div>