SPIP ecureuil




Thème de ce forum :

Trier les articles par titre sans "le, la, les..."



Hubombing
Trier les articles par titre sans "le, la, les..."
26 décembre 2005 16:09

Bonjour,

Nous exploitons 1200 articles qui correspondent à 1200 films. L’habitude en la matière est de présenter un classement alphabétique en ne tenant pas compte de l’article définit (le, la, les, l’) en début de mot. ex :

Etre et avoir Le fabuleux destion d’Amélie Poulain Festen

Le classement par num titre n’effectue pas ce classement...

Comment faire alors ? Je vois bien des solutions en php, mais si je peux éviter... merci.

Rechercher dans les forums:
 

Mortimer
26 décembre 2005 17:48
Trier les articles par titre sans "le, la, les..."

il faudrait, au mieux, creer un critère de tri perso qui fait la bonne requette SQL, si tu connais un peu php/mysql, je peux te guider...

sinon, il y a deux solutions plus simples, mais un peu contraignantes :

  1. écrire les titres avec l’article à la fin, ça se fait aussi assez souvent : « Fabuleux Destin, Le »
  2. écrire les titres sans article et mettre un mot clef qui spécifie un article et ensuite ajuster le squelette pour qu’il ajoute l’article au début du titre en fonction du mot clef.
Trong-Duc
26 décembre 2005 18:40
Trier les articles par titre sans "le, la, les..."

Il ne serait pas possible d’utilsier un des champs suivants : surtitre, soustitre ou chapeau avec le nom sans le pronom et ensuite utiliser par exemple : {par num chapeau}

Idée farfelue, Mortimer ??

26 décembre 2005 21:03
Trier les articles par titre sans "le, la, les..."

Merci bien pour vos réponses, toutes me paraissent valables mais il est clair que j’ai un faible pour la première solution qui serait de créer un nouveau critère de tri !

Je connais mieux php que mySql et je me débat encore avec les expressions régulières mais j’arrive à m’en sortir en général ;-)

Donc si tu veux bien me guider...

Mortimer
26 décembre 2005 23:30
Trier les articles par titre sans "le, la, les..."

je suis pas expert en mysql non plus :(

mais ajouter un critère dans SPIP est assez simple, il suffit d’ajouter une fonction dans mes_fonctions.php3 comme décrit ici : http://www.spip-contrib.net/spikini...

L’api a un peu changé je crois et la page est pas totalement à jour. Regarde directemetn dans inc-criteres.php3 pour voir la nouvelle notation.

En tout cas, dans ton cas, il faut faire un truc du genre :

function critere_par_titre_special($idb, &$boucles, $crit) {
        $not = $crit->not;
        $boucle = &$boucles[$idb];
        $id = $boucle->primary;

       $boucle->order[] = "$id.titre";
}

Le truc c’est de mettre le critère order qu’il faut dans le tableau. Là, c’est du mysql, il faudrait utiliser une fonction mysql qui existe déjà, il y en a sûrement déjà une, mais je ne sais pas trop quoi.

27 décembre 2005 18:40
Trier les articles par titre sans "le, la, les..."

Merci pour ton aide ! J’ai trouvé la requête SQL "qui va bien".

C’est à base de TRIM(LEADING ’Le ’ titre), et ça enlève les débuts de chaîne... alors en mettant une série ça donne ça la fonction :

Pas facile à coder le L apostrophe ! (cf. \’l\\\\\’ \’ ) Il y a uneccueil qui ne devrait pas se présenter, c’est le cas ou un film par exemple s’appellerait :
- "Le la" (film musical !)

Merci, et bon courage à tous pour pour ces petits trucs de rien du tout qui prennent 2 jours au lieu des 5 minutes prévues...

Hubombing

2mop
1er mars 2007 10:39
Trier les articles par titre sans "le, la, les..."

je m’ocupe d’un catalogue de livres et j’ai le même problème : "le promeneur du val" doit être classé à P et pas à L.

j’ai essayé ton code mais je suis en 1.8.2 es-ce un problème ?

et je n’ai pas compris s’il fallait mettre le code dans mes_fonctions.php ou dans ecrire/mes_option.php ?

enfin pourais tu me donner un exemple de boucle qui utilise ton filtre :

es-ce {par titre|parTitreFilm} ou {parTitreFilm}

par avance merci

hubombing
1er mars 2007 16:31
+ espagnol, italien, anglais

Oulala mais c’est une vieille histoire (lol)... Je ne me souvenais même plus avoir eu ce problème ;)

Je viens de vérifier, la fonction prend place dans le fichier mes_fonctions.php3

J’avais une version un peu différente pour les articles définis, également en espagnol, italien et anglais :

function critere_parTitreFilm($idb, &$boucles, $crit) { // trier les fims par titre en ne prenant pas les articles définit le la les l'
    $not = $crit->not;
    $boucle = &$boucles[$idb];
    $id = $boucle->primary;
         $boucle->order[] = "'TRIM(LEADING \'los \' FROM TRIM(LEADING \'el \' FROM TRIM(LEADING \'il \' FROM TRIM(LEADING \'the \' FROM TRIM(LEADING \'le \' FROM TRIM(LEADING \'la \' FROM TRIM(LEADING \'l\\\\\'\' FROM TRIM(LEADING \'les \' FROM LOWER(titre)))))))))'";
}

Et voici ce que j’ai pour la boucle :

<BOUCLE_listefilms(ARTICLES){id_rubrique}{parTitreFilm}>
    <option value="[(#URL_ARTICLE)]">[(#TITRE)]</option>
</BOUCLE_listefilms>

Pour la version de spip, je ne sais pas... Je ne peux pas dire mieux ;)
Bon courage,

2 mars 2007 08:19
Trier les articles par titre sans "le, la, les..."

Tout d’abord merci pour ta rponse,

Un problème persiste hargggg !!

Voil ma boucle :

<BOUCLE_rubrique(RUBRIQUES){id_rubrique}{par titre}>
    <h1 class="contenu">#TITRE</h1><BR><div class="texte">[(#TEXTE|justifier)]</div>
</BOUCLE_rubrique>
               
                 <BOUCLE_rubrique2(RUBRIQUES){id_rubrique}{par titre}>
                        
                         <BOUCLE_articles_pagination(ARTICLES){id_secteur}{parTitreSans}{inverse}{titre==^[AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZz]}>
             </BOUCLE_articles_pagination>
           [pages : (#TOTAL_BOUCLE|pagination{debut_page,20})]
           </B_articles_pagination>
                        
                         <BR><BR>
                 <BOUCLE_rubrique3(ARTICLES){id_secteur}{titre==^[AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZz]}{id_article !=18}{id_article !=481}{parTitreSans} {debut_page,20}>
                    <a href="#URL_ARTICLE"><img src="navpics/fleche.gif" width="10" height="10">&nbsp;#TITRE</a><br>
                  </BOUCLE_rubrique3>
</BOUCLE_rubrique2>

J’ai une fct qui me dcoupe le rsultat en pages,

Elle vient de spipcontrib :

/*
*   +----------------------------------+
*    Nom du Filtre :    pagination                                              
*   +----------------------------------+
*    Date : dimanche 22 aot 2004
*    Auteur :  James (klike<at>free.fr)
*   +-------------------------------------+
*    Fonctions de ce filtre :
*     affiche la liste des pages d'une boucle contenant
*     un critre de limite du type {debut_xxx, yyy}
*   +-------------------------------------+
*  
* Pour toute suggestion, remarque, proposition d'ajout
* reportez-vous au forum de l'article :
* http://www.uzine.net/spip_contrib/article.php3?id_article=663
*/

function pagination($total, $position=0, $pas=1, $fonction='') {
 global $clean_link;
 global $pagination_item_avant, $pagination_item_apres, $pagination_separateur;
 tester_variable('pagination_separateur', '&nbsp;| ');
 if (ereg('^debut([-_a-zA-Z0-9]+)$', $position, $match)) {
   $debut_lim = "debut".$match[1];
   $position = intval($GLOBALS['HTTP_GET_VARS'][$debut_lim]);
 }
 $nombre_pages = floor(($total-1)/$pas)+1;
 $texte = '';
 if($nombre_pages>1) {
   $i = 0;
   while($i<$nombre_pages) {
     $clean_link->delVar($debut_lim);
     $clean_link->addVar($debut_lim, strval($i*$pas));
     $url = $clean_link->getUrl();
     if(function_exists($fonction)) $item = call_user_func($fonction, $i+1);
     else $item = strval($i+1);
     if(($i*$pas) != $position) {
       if(function_exists('lien_pagination')) $item = lien_pagination($url, $item, $i+1);
       else $item = "<a href=\"".$url."\">".$item."</a>";
     }
     $texte .= $pagination_item_avant.$item.$pagination_item_apres;
     if($i<($nombre_pages-1)) $texte .= $pagination_separateur;
     $i++;
   }
   //Correction bug: $clean_link doit revenir  son tat initial
   $clean_link->delVar($debut_lim);
   if($position) $clean_link->addVar($debut_lim, $position);
    return $texte;
 }
 return '';
}

Ds que je place ta fct j’ai une erreur de parsing ?

Parse error : parse error, expecting `’(’’ in e :\dev\pur\spip_pur\spip-v1-8-1\inc-calcul.php(109) : eval()’d code on line 195

Voil as-tu une idée ?

Par avance merci

2 mars 2007 09:10
Trier les articles par titre sans "le, la, les..."

Je ne vois pas d’où peut venir le Pb... Je ne pense pas que cela vienne de la pagination qui intervient après... Je ne pense pas que cela vienne de la version car je suis en 1.8.2 e... (avec un correctif pour une faille de sécurité mise à jour pour la 1.8.2)

Est-il nécessaire de filtrer les articles qui commenent par une lettre de l’alphabet ? titre==^[aAbB...zZ] (équivallent à titre==^[a-zA-Z] non ?) ? peux tu essayer sans ?

2 mars 2007 09:30
Trier les articles par titre sans "le, la, les..."

j’ai essayé sans les lettres de l’alphabet : marche pas !

j’ai essayé sans la découpe de page : marche pas !

j’ai essayé avec ta boucle toute seule : marche pas !

tjr la même erreur :

Parse error : parse error, expecting `’(’’ in e :\dev\pur\spip_pur\spip-v1-8-1\inc-calcul.php(109) : eval()’d code on line 151

là je déprime ( ;_ :)

2 mars 2007 09:41
Trier les articles par titre sans "le, la, les..."

petite précision je suis en 1.8.1 et pas en 1.8.2 !!

pitêtre que cela vient de là ?

RSS






squelette