Afficher les articles connexes, triés par pertinence - commentaires Afficher les articles connexes, triés par pertinence 2017-05-13T05:10:14Z https://files.spip.org/Afficher-les-articles-connexes-tries-par-pertinence#comment492197 2017-05-13T05:10:14Z <p>Merci infiniment pour cette contribution, un article très clair même pour un débutant. Cette noisette du début de l'article m'a fait gagné beaucoup de temps...</p> Afficher les articles connexes, triés par pertinence 2016-09-20T09:39:58Z https://files.spip.org/Afficher-les-articles-connexes-tries-par-pertinence#comment489065 2016-09-20T09:39:58Z <p>Je me permets de confirmer l'astuce de Jiou mais en précisant que cela n'est nécessaire que pour les #GET étant utilisé en deuxieme parametre de #SET, exemples :</p> <p>[(#SET<i>tableau_pertinence,<br class="autobr"> #GET<i>tableau_pertinence,#ARRAY</i>|ponderation<i>#ID_RUBRIQUE</i><br class="autobr"> </i>)]</p> <p>[(#SET<i>tableau_rubriques,<br class="autobr"> #GET<i>tableau_pertinence,#ARRAY</i>|trie_tableau|array_keys<br class="autobr"> </i>)]</p> <p>[(#SET<i>pertinence_max,<br class="autobr"> #GET<i>tableau_pertinence</i>|trie_tableau|reset<br class="autobr"> </i>)]</p> <p>Cette écriture est donc nécessaire pour faire marcher cette astuce / noisette / noix de coco. (testé sous SPIP 3.1)</p> <p>Merci pour cette contrib<br class="autobr"> ++</p> Afficher les articles connexes, triés par pertinence 2013-07-24T17:28:43Z https://files.spip.org/Afficher-les-articles-connexes-tries-par-pertinence#comment469713 2013-07-24T17:28:43Z <p>Merci d'avoir suivi l'affaire... seulement la solution proposée par Maïeul correspond à ce que j'attendais. Je n'ai pas donc pas le courage de tester à nouveau : j'espère que vous voudrez bien m'en pardonner.</p> Afficher les articles connexes, triés par pertinence 2013-07-24T01:04:28Z https://files.spip.org/Afficher-les-articles-connexes-tries-par-pertinence#comment469702 2013-07-24T01:04:28Z <p>Bonjour,</p> <p>c'est un problème nouveau que tu rencontres. Dans mes_fonctions.php essaie de rajouter entre la ligne 4 et 5 une ligne contenant : <code class="spip_code spip_code_inline" dir="ltr">$tableau = array($tableau);</code>. Est-ce que ça fonctionne mieux<small class="fine d-inline"> </small>?</p> Afficher les articles connexes, triés par pertinence 2013-07-24T00:20:38Z https://files.spip.org/Afficher-les-articles-connexes-tries-par-pertinence#comment469701 2013-07-24T00:20:38Z <p>Une solution plus simple, <a href='https://files.spip.org/Articles-connexes-par-pertinences-avec-mots' class="spip_in" rel='nofollow'>Articles connexes, par pertinences, avec <code class="spip_code spip_code_inline" dir="ltr"><i>mots</i></code></a> (à consulter, pour le moment, dans l'espace privé)</p> Afficher les articles connexes, triés par pertinence. 2013-07-23T19:22:25Z https://files.spip.org/Afficher-les-articles-connexes-tries-par-pertinence#comment469697 2013-07-23T19:22:25Z <p>Bonjour, je rencontre des difficultés à utiliser votre contribution, qui correspond exactement à ce que je souhaite.</p> <p>J'ai copié la dernière versions de la boucle ( 35 lignes) vers mon squelette d'article<br class="autobr"> et créé un dossier mes_fonctions.php avec les 16 lignes de code php...</p> <p>Or rien ne se passe... hormis le fait que le mes_fonctions.php semble désactiver le cookie de correspondance puisque je n'ai plus les onglets «<small class="fine d-inline"> </small>recalculer<small class="fine d-inline"> </small>» et «<small class="fine d-inline"> </small>espace privé<small class="fine d-inline"> </small>».</p> <p>Par ailleurs, quand je parviens à recalculer la page, même un autre squelette que l'article, j'ai un écran blanc avec le message suivant :</p> <blockquote class="spip"> <p>Fatal error : Cannot increment/decrement overloaded objects nor string offsets in /var/alternc/html/o/openfreeclimbing/valleeducousin/squelettes/mes_fonctions.php on line 5</p> </blockquote> <p>ou cet autre message :</p> <blockquote class="spip"> <p> HTTP 302<br class="autobr"> Si votre navigateur n'est pas redirigé, cliquez ici pour continuer.</p> </blockquote> <p>quand je vais sur la page «<small class="fine d-inline"> </small>vider le cache<small class="fine d-inline"> </small>» j'obtiens ceci :</p> <p>V</p> <blockquote class="spip"> <p>ider le cache</p> <p>Utilisez cette commande afin de supprimer tous les fichiers présents dans le cache SPIP. Cela permet par exemple de forcer un recalcul de toutes les pages si vous avez fait des modifications importantes de graphisme ou de structure du site.</p> <p>Si vous voulez recalculer une seule page, passez plutôt par l'espace public et utilisez-y le bouton «<small class="fine d-inline"> </small>recalculer<small class="fine d-inline"> </small>».<br class="autobr"> HTTP 302<br class="autobr"> Si votre navigateur n'est pas redirigé, cliquez ici pour continuer.<br class="autobr"> Images calculées automatiquement</p> <blockquote class="spip"> <p>Warning : Cannot modify header information - headers already sent by (output started at /var/alternc/html/o/openfreeclimbing/valleeducousin/squelettes/mes_fonctions.php:1) in /var/alternc/html/o/openfreeclimbing/valleeducousin/ecrire/inc/actions.php on line 89</p> <p>Les images calculées automatiquement par SPIP (vignettes des documents, titres présentés sous forme graphique, fonctions mathématiques au format TeX...) occupent dans le répertoire local/ un total de 14.9 Mo.</p> </blockquote> <p>Un autre message également :</p> <p>Warning : include_once(/var/alternc/html/o/openfreeclimbing/valleeducousin/squelettes/mes_fonctions.php) [function.include-once] : failed to open stream : No such file or directory in /var/alternc/html/o/openfreeclimbing/valleeducousin/ecrire/inc/autoriser.php on line 45</p> <p>Warning : include_once() [function.include] : Failed opening '/var/alternc/html/o/openfreeclimbing/valleeducousin/ecrire/../squelettes/mes_fonctions.php' for inclusion (include_path='. :/usr/share/php :/usr/share/pear') in /var/alternc/html/o/openfreeclimbing/valleeducousin/ecrire/inc/autoriser.php on line 45</p> <p>Warning : include_once() [function.include-once] : Unable to access /var/alternc/html/o/openfreeclimbing/valleeducousin/ecrire/../squelettes/mes_fonctions.php in /var/alternc/html/o/openfreeclimbing/valleeducousin/ecrire/public/parametrer.php on line 21</p> <p>Warning : include_once(/var/alternc/html/o/openfreeclimbing/valleeducousin/ecrire/../squelettes/mes_fonctions.php) [function.include-once] : failed to open stream : No such file or directory in /var/alternc/html/o/openfreeclimbing/valleeducousin/ecrire/public/parametrer.php on line 21</p> <p>Warning : include_once() [function.include] : Failed opening '/var/alternc/html/o/openfreeclimbing/valleeducousin/ecrire/../squelettes/mes_fonctions.php' for inclusion (include_path='. :/usr/share/php :/usr/share/pear') in /var/alternc/html/o/openfreeclimbing/valleeducousin/ecrire/public/parametrer.php on line 21</p> </blockquote> <p>Bref... pas mal d'erreurs dues à mon avis à mes_fonctions.php, car dès que je l'enlève, tout refonctionne.</p> <p>Pour info, ma version de SPIP est 3.0.10</p> <p>Avez-vous une idée sur l'origine du problème<small class="fine d-inline"> </small>? Merci<small class="fine d-inline"> </small>!</p> Afficher les articles connexes, triés par pertinence. 2011-10-28T23:46:02Z https://files.spip.org/Afficher-les-articles-connexes-tries-par-pertinence#comment451325 2011-10-28T23:46:02Z <p>Désolé mais je dois avouer être un peu perdu apres avoir suivi tout ce fil<small class="fine d-inline"> </small>!</p> <p>Si je copie le squelette et les fonctions php de l'article, il ne se passe tout simplement rien<small class="fine d-inline"> </small>!</p> <p>Ai-je mal fait<small class="fine d-inline"> </small>? Choisi le mauvais code<small class="fine d-inline"> </small>?<br class="autobr"> Merci d'avance</p> Afficher les articles connexes, triés par pertinence. 2011-05-24T21:14:25Z https://files.spip.org/Afficher-les-articles-connexes-tries-par-pertinence#comment445966 2011-05-24T21:14:25Z <p>Yes, but as the loop given at the top of this article, you cannot have the n first articles with the maximum of common words. The principle of this contrib' and mainly the last part is to have closest articles with the maximum of common words.</p> Afficher les articles connexes, triés par pertinence. 2011-05-24T15:44:32Z https://files.spip.org/Afficher-les-articles-connexes-tries-par-pertinence#comment445950 2011-05-24T15:44:32Z <p>You can also use this code inside an articles loop :<br class="manualbr"></p> <div class="precode"><pre class="spip_code spip_code_block language-spip" dir="ltr" style="text-align:left;" data-language="spip"><code>_ #SET{mots,#ARRAY} <BOUCLE_mots(MOTS){id_article}> #SET{mots, #GET{mots}|push{#ID_MOT}} </BOUCLE_mots> <ul> <BOUCLE_aa(ARTICLES spip_mots_articles spip_mots) {id_mot IN #GET{mots}}> <li><a href="#URL_ARTICLE">#TITRE</a></li> </BOUCLE_aa> </ul></code></pre></div> Afficher les articles connexes, triés par pertinence. 2011-02-02T15:28:29Z https://files.spip.org/Afficher-les-articles-connexes-tries-par-pertinence#comment440454 2011-02-02T15:28:29Z <p>Je ne rajoute pas l'astuce Jiou car elle ne semble pas nécessaire partout. Notamment, sur l'ensemble des sites dont je m'occupe ce n'est pas nécessaire. De plus l'écriture des balises sous la forme <code class="spip_code spip_code_inline" dir="ltr">[(#BALISE{parametres}|filtre{parametre_filtre})]</code> est l'écriture normale, disons <i>garantie</i>. L'écriture simplifiée sans accolade/parenthèse n'est que dérogatoire et moins garantie. En conséquence ça devrait mieux fonctionner avec les accolades/parenthèses que sans.</p> <p>Reste à comprendre pourquoi ce n'est pas le cas ici<small class="fine d-inline"> </small>!</p> Afficher les articles connexes, triés par pertinence. 2011-01-29T13:39:01Z https://files.spip.org/Afficher-les-articles-connexes-tries-par-pertinence#comment440237 2011-01-29T13:39:01Z <p>Merci Jiou j'avais également le même problème.<br class="autobr"> Ca vaudrait le coup d'inclure cette proposition de modif dans l'article non<small class="fine d-inline"> </small>?</p> Afficher les articles connexes, triés par pertinence. 2010-11-17T11:43:29Z https://files.spip.org/Afficher-les-articles-connexes-tries-par-pertinence#comment437035 2010-11-17T11:43:29Z <p>Je pense —sans avoir testé— que tu peux utiliser la fonction php <a href="http://www.php.net/manual/fr/function.intval.php" class="spip_out" rel='nofollow external'><code class="spip_code spip_code_inline" dir="ltr">intval()</code></a>.</p> <p>Par exemple, cela pourrait donner</p> <div class="precode"><pre class="spip_code spip_code_block language-spip" dir="ltr" style="text-align:left;" data-language="spip"><code>[(#GET{tableau_pertinence} |table_valeur{#ID_ARTICLE} |div{#GET{pertinence_max}} |mult{100} |intval )%]</code></pre></div> <p>Attention ce n'est pas un arrondi : <code class="spip_code spip_code_inline" dir="ltr">intval(4.2)</code> donne <code class="spip_code spip_code_inline" dir="ltr">4</code> et <code class="spip_code spip_code_inline" dir="ltr">intval(4.7)</code> donne <code class="spip_code spip_code_inline" dir="ltr">4</code> aussi<small class="fine d-inline"> </small>!</p> Afficher les articles connexes, triés par pertinence. 2010-11-17T08:57:46Z https://files.spip.org/Afficher-les-articles-connexes-tries-par-pertinence#comment437024 2010-11-17T08:57:46Z <p>Bonjour,</p> <p>Merci pour cette super contrib, j'ai juste une question.<br class="autobr"> Comment faire pour limiter le nombre de chiffres aprés la virgule pour la pertinence<small class="fine d-inline"> </small>?</p> <p>Merci</p> Afficher les articles connexes, triés par pertinence. 2010-10-04T18:11:08Z https://files.spip.org/Afficher-les-articles-connexes-tries-par-pertinence#comment435318 2010-10-04T18:11:08Z <p>Merci Aurélie, je le rajoute dans l'article.</p> Afficher les articles connexes, triés par pertinence. 2010-10-04T17:59:19Z https://files.spip.org/Afficher-les-articles-connexes-tries-par-pertinence#comment435317 2010-10-04T17:59:19Z <p>Super<small class="fine d-inline"> </small>!</p> <p>Merci beaucoup Aurélie cela semble fonctionner au poil<small class="fine d-inline"> </small>!!!</p> Afficher les articles connexes, triés par pertinence. 2010-10-04T17:30:35Z https://files.spip.org/Afficher-les-articles-connexes-tries-par-pertinence#comment435316 2010-10-04T17:30:35Z <p>À mon avis, il faut initialiser tous les tableaux avant les boucles :</p> <div class="precode"><pre class="spip_code spip_code_block language-spip" dir="ltr" style="text-align:left;" data-language="spip"><code>#SET{tableau_pertinence,#ARRAY} #SET{tableau_articles,#ARRAY} #SET{pertinence_max,#ARRAY}</code></pre></div> Afficher les articles connexes, triés par pertinence. 2010-09-27T09:17:47Z https://files.spip.org/Afficher-les-articles-connexes-tries-par-pertinence#comment434990 2010-09-27T09:17:47Z <p>Bon finalement ce n'est pas très grave : les warnings ne s'affichent que pour les auteurs identifiés sur le site. Ils ne défigurent donc pas le site pour les visiteurs.</p> <p>Encore merci pour cet excellente contrib<small class="fine d-inline"> </small>!</p> Afficher les articles connexes, triés par pertinence. 2010-09-27T09:11:21Z https://files.spip.org/Afficher-les-articles-connexes-tries-par-pertinence#comment434989 2010-09-27T09:11:21Z <p>Merci pour la réponse.<br class="autobr"> Oui, le problème doit provenir de cette boucle. je ne vois pas comment éviter les messages d'erreurs.</p> <p>Voici les warnings que je reçois :</p> <div class="precode"><pre class="spip_code spip_code_block language-spip" dir="ltr" style="text-align:left;" data-language="spip"><code>Warning: arsort() expects parameter 1 to be array, string given in /monsite/squelettes/mes_fonctions.php on line 13 Warning: array_keys() [function.array-keys]: The first argument should be an array in /monsite/ecrire/public/composer.php(69) : eval()'d code on line 23 Warning: arsort() expects parameter 1 to be array, null given in /monsite/squelettes/mes_fonctions.php on line 13</code></pre></div> Afficher les articles connexes, triés par pertinence. 2010-09-26T15:47:18Z https://files.spip.org/Afficher-les-articles-connexes-tries-par-pertinence#comment434960 2010-09-26T15:47:18Z <p>Bonjour,</p> <p>Est-ce la boucle <code class="spip_code spip_code_inline" dir="ltr"><BOUCLE_Tableau_Articles_Connexes(ARTICLES){!id_article}{id_mot}></code> qui te pose souci<small class="fine d-inline"> </small>?</p> <div class="precode"><pre class="spip_code spip_code_block language-spip" dir="ltr" style="text-align:left;" data-language="spip"><code>[(#REM) Pour chaque mot clé de l'article] <BOUCLE_Mots_De_Article_Contexte(MOTS){id_article}> [(#REM) Pour chaque article qui a ce mot clé] <BOUCLE_Tableau_Articles_Connexes(ARTICLES){!id_article}{id_mot}> [(#SET{tableau_pertinence, [(#GET{tableau_pertinence} |ponderation {#ID_ARTICLE} )] })] </BOUCLE_Tableau_Articles_Connexes> </BOUCLE_Mots_De_Article_Contexte></code></pre></div> <p>Si c'est le cas, il doit être possible de faire un peu différemment en utilisant l'excellent plugin <a href='https://files.spip.org/Critere-mots' class="spip_in" rel='nofollow'>Plugin « Critère <code class="spip_code spip_code_inline" dir="ltr"><i>mots</i></code> »</a>... À tester...</p> Afficher les articles connexes, triés par pertinence. 2010-09-24T16:11:19Z https://files.spip.org/Afficher-les-articles-connexes-tries-par-pertinence#comment434907 2010-09-24T16:11:19Z <p>Bonjour, et merci pour cette contrib qui me sert assez régulièrement<small class="fine d-inline"> </small>!</p> <p>Je voudrais savoir comment afficher les résultats dans une boucle conditionnelle, car, pour le moment, si l'article n'a aucun mot-clé (ce qui arrive souvent dans le projet sur lequel je travaille en ce moment), le squelette me renvoie une liste de messages d'erreurs et de warning...</p> <p>Si quelqu'un a une réponse il me serait d'un grand secours...</p> <p>Merci<br class="autobr"> Abel</p> Afficher les articles connexes, triés par pertinence. 2010-06-16T18:13:27Z https://files.spip.org/Afficher-les-articles-connexes-tries-par-pertinence#comment431696 2010-06-16T18:13:27Z <p>Donc, j'ai défini cette fonction dans mes_fonctins.php et j'ai écrit le code suivant</p> <div class="precode"><pre class="spip_code spip_code_block" dir="ltr" style="text-align:left;"><code>[(#REM) On récupère la pondération maximale pour nos pourcentages] [(#SET{pertinence_max,[(#GET{tableau_pertinence}|pseudo_arsort|reset)]})]</code></pre></div> <p>Et j'ai toujours une pertinence à 0%... <br class="autobr"> Mais je n'ai aucun message d'erreur<small class="fine d-inline"> </small>;)</p> Afficher les articles connexes, triés par pertinence. 2010-06-16T18:12:53Z https://files.spip.org/Afficher-les-articles-connexes-tries-par-pertinence#comment431695 2010-06-16T18:12:53Z <p>Justement Maïeul, c'est le rôle du filtre <code class="spip_code spip_code_inline" dir="ltr">trie_tableau</code> de la contrib<small class="fine d-inline"> </small>! (regarde<small class="fine d-inline"> </small>! le code est <strong>exactement</strong> le même :-))</p> <p>Par contre, j'ai du mal à comprendre pourquoi chez Christophe, le filtre <code class="spip_code spip_code_inline" dir="ltr">reset</code> ne renvoie pas le <a href="http://www.php.net/manual/fr/function.reset.php" class="spip_out" rel='nofollow external'>premier élément du tableau</a> comme ça le fait chez moi ou d'autres<small class="fine d-inline"> </small>!</p> Afficher les articles connexes, triés par pertinence. 2010-06-16T18:02:48Z https://files.spip.org/Afficher-les-articles-connexes-tries-par-pertinence#comment431694 2010-06-16T18:02:48Z <p>attention<small class="fine d-inline"> </small>! on ne peut utiliser les function de type arsort (qui modifie l'objet passé) comme filtre SPIP.</p> <p>Un filtre SPIP passe un élement et obtient un autre en retour.</p> <p>Il faut définir dans mes_fonctions.php</p> <div class="precode"><pre class="spip_code spip_code_block" dir="ltr" style="text-align:left;"><code><? function pseudo_arsort($array){ arsort($array); return $array; } ?></code></pre></div> <p>et appliquer le filtre pseudo_arsort.</p> Afficher les articles connexes, triés par pertinence. 2010-06-16T18:00:44Z https://files.spip.org/Afficher-les-articles-connexes-tries-par-pertinence#comment431693 2010-06-16T18:00:44Z <p>Ca fait que dans la colonne où s'affichent les articles connexes, j'ai au début de la liste : <br class="autobr"> <code class="spip_code spip_code_inline" dir="ltr">-*----*---- </code><br class="autobr"> Mais plus de message d'erreur.</p> Afficher les articles connexes, triés par pertinence. 2010-06-16T17:52:54Z https://files.spip.org/Afficher-les-articles-connexes-tries-par-pertinence#comment431691 2010-06-16T17:52:54Z <p>et juste</p> <div class="precode"><pre class="spip_code spip_code_block" dir="ltr" style="text-align:left;"><code>[(#SET{pertinence_max,[(#GET{tableau_pertinence}|trie_tableau|reset)]})] -*---[(#GET{tableau_pertinence}|trie_tableau|reset)]-*----</code></pre></div> <p>ça fait quoi<small class="fine d-inline"> </small>?</p> <p>(laisse les <code class="spip_code spip_code_inline" dir="ltr">-*----</code>)</p> Afficher les articles connexes, triés par pertinence. 2010-06-16T17:47:56Z https://files.spip.org/Afficher-les-articles-connexes-tries-par-pertinence#comment431690 2010-06-16T17:47:56Z <p>— Première solution</p> <div class="precode"><pre class="spip_code spip_code_block" dir="ltr" style="text-align:left;"><code>[(#SET{pertinence_max,[(#GET{tableau_pertinence}|arsort|reset)]})] </code></pre></div> <p>donne le message d'erreur suivant : <br class="autobr"> Fatal error : Only variables can be passed by reference in /homez.95/infogm/www/ecrire/public/composer.php(73) : eval()'d code on line 1604</p> <p>— Deuxième solution :</p> <div class="precode"><pre class="spip_code spip_code_block" dir="ltr" style="text-align:left;"><code>[(#SET{pertinence_max,[(#GET{tableau_pertinence}|trie_tableau|reset)]})] [(#GET{tableau_pertinence}|trie_tableau|reset)] [(#GET{tableau_pertinence}|arsort|reset)]</code></pre></div> <p>donne le message d'erreur suivant :<br class="autobr"> Fatal error : Only variables can be passed by reference in /homez.95/infogm/www/ecrire/public/composer.php(73) : eval()'d code on line 1611</p> Afficher les articles connexes, triés par pertinence. 2010-06-16T17:27:29Z https://files.spip.org/Afficher-les-articles-connexes-tries-par-pertinence#comment431689 2010-06-16T17:27:29Z <p>et si tu remplaces « trie_tableau » par « arsort »<small class="fine d-inline"> </small>?</p> <p>et si ça ne donne rien, peux tu rajouter dans ton code, juste après <code class="spip_code spip_code_inline" dir="ltr">[(#SET{pertinence_max,[(#GET{tableau_pertinence}|trie_tableau|reset)]})]</code></p> <p><code class="spip_code spip_code_inline" dir="ltr">---*-[(#GET{tableau_pertinence}|trie_tableau|reset)]--*-</code> et <code class="spip_code spip_code_inline" dir="ltr">---*-[(#GET{tableau_pertinence}|arsort|reset)]--*-</code></p> <p>et me dire ce que ça donne<small class="fine d-inline"> </small>?</p> Afficher les articles connexes, triés par pertinence. 2010-06-16T17:20:00Z https://files.spip.org/Afficher-les-articles-connexes-tries-par-pertinence#comment431688 2010-06-16T17:20:00Z <p>Ca change rien... toujours à 0%. J'en ai profité pour que l'ensemble du code soit sans indentations ni espaces... au regard de ton premier commentaire... en vain...</p> Afficher les articles connexes, triés par pertinence. 2010-06-16T17:05:07Z https://files.spip.org/Afficher-les-articles-connexes-tries-par-pertinence#comment431687 2010-06-16T17:05:07Z <p>Ok, si tu as mis <code class="spip_code spip_code_inline" dir="ltr">[pertinence_max:(#GET{pertinence_max})]</code> et que rien ne s'affiche, c'est que <code class="spip_code spip_code_inline" dir="ltr">pertinence_max</code> est nul et ça ne devrait pas (sinon ça fait une division par zero<small class="fine d-inline"> </small>!!!)</p> <p>essaie de remplacer :</p> <div class="precode"><pre class="spip_code spip_code_block" dir="ltr" style="text-align:left;"><code>[(#SET{pertinence_max, [(#GET{tableau_pertinence} |trie_tableau|reset)]} )]</code></pre></div> <p>par <code class="spip_code spip_code_inline" dir="ltr">[(#SET{pertinence_max,[(#GET{tableau_pertinence}|trie_tableau|reset)]})]</code></p> <p>Donc <strong>sans</strong> indentations ni espaces.</p> <p>Et là ça donne quoi<small class="fine d-inline"> </small>?</p> Afficher les articles connexes, triés par pertinence. 2010-06-16T16:53:31Z https://files.spip.org/Afficher-les-articles-connexes-tries-par-pertinence#comment431686 2010-06-16T16:53:31Z <p>Donc j'ai bien dans la liste [3307] => 3... donc le tableau fonctionne. <br class="autobr"> Quant à la valeur de pertinence_max, je n'arrive pas à la calculer.<br class="autobr"> j'ai mis le bout de code <br class="autobr"> <code class="spip_code spip_code_inline" dir="ltr">[pertinence_max:(#GET{pertinence_max})] </code> <br class="autobr"> a plusieurs endroits dans mon squelette article et je n'ai jamais rien obtenu. <br class="autobr"> Je suis vraiment pas très doué<small class="fine d-inline"> </small>;)<br class="autobr"> C.</p> Afficher les articles connexes, triés par pertinence. 2010-06-16T15:14:37Z https://files.spip.org/Afficher-les-articles-connexes-tries-par-pertinence#comment431685 2010-06-16T15:14:37Z <p>Pour vérifier <code class="spip_code spip_code_inline" dir="ltr">pertinence_max</code>, il suffit de placer <code class="spip_code spip_code_inline" dir="ltr">[pertinence_max:(#GET{pertinence_max})]</code> dans la boucle concernée.</p> Afficher les articles connexes, triés par pertinence. 2010-06-16T15:11:30Z https://files.spip.org/Afficher-les-articles-connexes-tries-par-pertinence#comment431683 2010-06-16T15:11:30Z <p>Ce qui est affiché est le contenu du tableau <code class="spip_code spip_code_inline" dir="ltr">tableau_pertinence</code>, sous la forme <code class="spip_code spip_code_inline" dir="ltr">[clé] => valeur</code>.</p> <p>Comme tu donnes un exemple, l'article 3307, ce serait intéressant de vérifier qu'on a bien quelque part <code class="spip_code spip_code_inline" dir="ltr">[3307] => 3</code>.</p> <p>Si c'est le cas, c'est que le tableau est correct.</p> <p>Dans ce cas, il faudra donc regarder ailleurs, peut-être du coté de <code class="spip_code spip_code_inline" dir="ltr">pertinence_max</code>.</p> Afficher les articles connexes, triés par pertinence. 2010-06-16T14:58:17Z https://files.spip.org/Afficher-les-articles-connexes-tries-par-pertinence#comment431680 2010-06-16T14:58:17Z <p>J'ai fait une capture écran après avoir inséré [(#GET<i>tableau_pertinence</i>|print_r<i>1</i>)] dans mon code. Je ne comprends pas le résultat qui est retourné car le premier article trouvé par la contrib est normalement l'article id=3307 qui a trois mots communs avec celui qu'on visualise (id=4425).<br class="autobr"> Pour t'aider, j'ai mis le bout de code après :</p> <div class="precode"><pre class="spip_code spip_code_block" dir="ltr" style="text-align:left;"><code> <font class="texte_courant_petit"> (pertinence: [(#GET{tableau_pertinence}|table_valeur{#ID_ARTICLE}|div{#GET{pertinence_max}}|mult{100})]%) ([(#DATE|nom_mois)] [(#DATE|annee)])<br /> </font></code></pre></div> <p>Enfin, je ne sais pas vérifier pertinence_max..</p> Afficher les articles connexes, triés par pertinence. 2010-06-16T14:27:17Z https://files.spip.org/Afficher-les-articles-connexes-tries-par-pertinence#comment431679 2010-06-16T14:27:17Z <p>Il n'y a pas de différence sauf les espaces et les indentations : Spip est des fois chatouilleux avec les espaces entre les filtres, notamment lors de l'utilisation de tableaux.</p> <p>Mais visiblement ce n'était pas le problème...</p> <p>Pour essayer de comprendre, je pense qu'il serait intéressant de connaître le contenu du tableau <code class="spip_code spip_code_inline" dir="ltr">tableau_pertinence</code> aux différentes étapes de la noisette.</p> <p>Si tu utilises Spip>2.1 tu peux le faire avec <code class="spip_code spip_code_inline" dir="ltr">[(#GET{tableau_pertinence}|foreach)]</code>. Sinon c'est possible avec <code class="spip_code spip_code_inline" dir="ltr">[(#GET{tableau_pertinence}|print_r{1})]</code>.</p> <p>Peux-tu me dire si le contenu du tableau retourné est conforme à ce qu'on attend : id_article → pertinence (ex. : pour le premier article tu dois avoir un truc du genre <code class="spip_code spip_code_inline" dir="ltr">XXXX,4</code> où <code class="spip_code spip_code_inline" dir="ltr">XXXX</code> est l'id_article, et 4 car il y a 4 mots-clés communs)</p> <p>(et puis dans la foulée tu peux vérifier que <code class="spip_code spip_code_inline" dir="ltr">pertinence_max</code> n'es pas nul<small class="fine d-inline"> </small>!)</p> Afficher les articles connexes, triés par pertinence. 2010-06-16T14:10:22Z https://files.spip.org/Afficher-les-articles-connexes-tries-par-pertinence#comment431678 2010-06-16T14:10:22Z <p>Merci... mais je ne vois pas de différence entre les deux codes. Malgré cela, j'ai copié ta proposition de code sur ma page et rien n'a changé. Merci d'avoir pris le temps de me répondre.<br class="autobr"> _C.</p> Afficher les articles connexes, triés par pertinence. 2010-06-16T13:01:06Z https://files.spip.org/Afficher-les-articles-connexes-tries-par-pertinence#comment431674 2010-06-16T13:01:06Z <p>Peux-tu essayer de remplacer</p> <div class="precode"><pre class="spip_code spip_code_block language-spip" dir="ltr" style="text-align:left;" data-language="spip"><code>[(#GET{tableau_pertinence} |table_valeur{#ID_ARTICLE} |div{#GET{pertinence_max}} |mult{100} )]</code></pre></div> <p>Par</p> <div class="precode"><pre class="spip_code spip_code_block language-spip" dir="ltr" style="text-align:left;" data-language="spip"><code>[(#GET{tableau_pertinence}|table_valeur{#ID_ARTICLE}|div{#GET{pertinence_max}}|mult{100})]</code></pre></div> <p>(idem, mais sans les espaces et les indentations)</p> <p>Et me dire si ça va mieux<small class="fine d-inline"> </small>?</p> Afficher les articles connexes, triés par pertinence. 2010-06-16T12:26:33Z https://files.spip.org/Afficher-les-articles-connexes-tries-par-pertinence#comment431672 2010-06-16T12:26:33Z <p>bonjour<br class="autobr"> j'ai recopié le code proposé, sans l'avoir réellement modifié. J'ai fait quelques modif de forme et non pas de strucutre.<br class="autobr"> Ainsi, voici le code que j'ai mis sur la page article.html</p> <div class="precode"><pre class="spip_code spip_code_block" dir="ltr" style="text-align:left;"><code>[(#REM) Pour chaque mot clé de l'article] <BOUCLE_Mots_De_Article_Contexte(MOTS){id_article}{id_groupe !==^(15|14)}> [(#REM) Pour chaque article qui a ce mot clé] <BOUCLE_Tableau_Articles_Connexes(ARTICLES){!id_article}{id_mot}{id_secteur=2}{!par date}> [(#SET{tableau_pertinence, #GET{tableau_pertinence} |ponderation{#ID_ARTICLE} })] </BOUCLE_Tableau_Articles_Connexes> </BOUCLE_Mots_De_Article_Contexte> [(#REM) On fabrique un tableau trié avec les id_article comme valeurs] [(#SET{tableau_articles, [(#GET{tableau_pertinence} |trie_tableau |array_keys)]} )] [(#REM) On récupère la pondération maximale pour nos pourcentages] [(#SET{pertinence_max, [(#GET{tableau_pertinence} |trie_tableau|reset)]} )] [(#REM) Cette boucle affiche le titre des 10 articles connexes, c'est-a-dire les 10 articles qui ont le plus de mots-cles communs avec celui du contexte. Elle donne la pondération en pourcents.] <BOUCLE_Articles_Connexes(ARTICLES){id_article IN #GET{tableau_articles}}{0,10}{doublons pourress}> <A href="#URL_ARTICLE" class="titreArt4">#TITRE</A></Font> <font class="texte_courant_petit">(pertinence: [(#GET{tableau_pertinence} |table_valeur{#ID_ARTICLE} |div{#GET{pertinence_max}} |mult{100} )]%)([(#DATE|nom_mois)] [(#DATE|annee)])<br /></font> </BOUCLE_Articles_Connexes></code></pre></div> <p>Le fichier « mes_options » contient exclusivement le code que tu as proposé dans cette contrib'.</p> <p>Merci<br class="autobr"> Christophe</p> Afficher les articles connexes, triés par pertinence. 2010-06-16T08:40:41Z https://files.spip.org/Afficher-les-articles-connexes-tries-par-pertinence#comment431664 2010-06-16T08:40:41Z <p>Salut<small class="fine d-inline"> </small>!</p> <p>Peux-tu redonner ici un extrait du code du squelette qui affiche la pertinence chez toi<small class="fine d-inline"> </small>?</p> Afficher les articles connexes, triés par pertinence. 2010-06-15T11:06:18Z https://files.spip.org/Afficher-les-articles-connexes-tries-par-pertinence#comment431638 2010-06-15T11:06:18Z <p>Désolé ce commentaire est à supprimer car l'erreur ne vient pas de la contrib' mais de contrainte que j'avais placé dans ma boucle, à savoir un <i>id_secteur=2</i>... Mea culpa et désolé du dérangement.</p> Afficher les articles connexes, triés par pertinence. 2010-06-15T10:56:35Z https://files.spip.org/Afficher-les-articles-connexes-tries-par-pertinence#comment431637 2010-06-15T10:56:35Z <p>Rerere... décidément je monopolise un peu le forum. Ne m'en veuillez pas, mais j'expérimente la contrib' et donc je trouve des choses curieuses que je partage ici.</p> <p>J'ai un article (id_article=3526) qui a les mots clés suivant : [Allemagne | Etiquetage | sans OGM | Juridique et réglementaire].</p> <p>Curieusement, la contrib' va considérer que l'article (id_article=50) qui a les mots clés [Asie | Etiquetage (COMMUN) | Juridique et réglementaire (COMMUN)].<br class="autobr"> Donc 2/3 = 66%</p> <p>EST PLUS PERTINENT que l'article (id_article=4203) qui a les mots clés [France | Enjeu économique | Etiquetage (COMMUN) | Loi française sur les OGM | sans OGM (COMMUN) | Juridique et réglementaire (COMMUN)].<br class="autobr"> Donc 3/6 = 50%</p> <p>C'est un peu bizarre car pour moi, le deuxième article est plus pertinent car il a plus de mots clés en commun avec l'article de base.<br class="autobr"> Est-ce possible de modifier cela pour que l'article 4203 apparaisse avant l'article 50<small class="fine d-inline"> </small>?<br class="autobr"> Merci infiniment <br class="autobr"> C.</p> Afficher les articles connexes, triés par pertinence. 2010-06-15T10:13:40Z https://files.spip.org/Afficher-les-articles-connexes-tries-par-pertinence#comment431635 2010-06-15T10:13:40Z <p>Re.... donc la contrib est super, elle marche bien... Mais je comprends pas pourquoi sur mes pages (cf. <a href="http://www.infogm.org/spip.php?article4348" class="spip_url spip_out auto" rel="nofollow external">http://www.infogm.org/spip.php?article4348</a>), la pertinence reste à 0% alors que, pour le premier article proposé dans la liste des articles connexes j'ai 4 mots clés communs sur 4... donc la pertinence aurait dû être à 100%, non<small class="fine d-inline"> </small>? J'ai modifié le code avec l'information donnée par Jiou, le 22 juillet 2008.<br class="autobr"> Encore merci pour la contrib'.</p> Afficher les articles connexes, triés par pertinence. 2010-06-15T09:21:16Z https://files.spip.org/Afficher-les-articles-connexes-tries-par-pertinence#comment431631 2010-06-15T09:21:16Z <p>Merci itou. La modif proposée règle aussi chez moi le problème.</p> Afficher les articles connexes, triés par pertinence. 2009-02-11T21:09:42Z https://files.spip.org/Afficher-les-articles-connexes-tries-par-pertinence#comment413303 2009-02-11T21:09:42Z <p>Ah zut<small class="fine d-inline"> </small>!</p> <p>Pour l'instant je n'ai pas d'idée... Il faudrait peut-être regarder du coté d'<code class="spip_code spip_code_inline" dir="ltr">arsort</code> pour voir s'il fait un tri secondaire sur les clés<small class="fine d-inline"> </small>? À ce moment là les articles seraient toujours triés par leurs <code class="spip_code spip_code_inline" dir="ltr">id_article</code>...</p> <p>Sinon, il y aurait un moyen plus lourd pour permettre ce tri qui serait de créer une troisième colonne au tableau <code class="spip_code spip_code_inline" dir="ltr">tableau_pertinence</code> contenant les dates des articles (format Unix) et faire un tri secondaire sur cette colonne... Mais, pour l'instant, je ne vois pas de façon simple sans fourrer du PHP partout<small class="fine d-inline"> </small>!</p> <p>Je vais essayer d'y réfléchir<small class="fine d-inline"> </small>! Il doit bien y avoir un moyen de faire ça tout en Spip... J'en suis sûr...</p> Afficher les articles connexes, triés par pertinence. 2009-02-11T20:07:50Z https://files.spip.org/Afficher-les-articles-connexes-tries-par-pertinence#comment413301 2009-02-11T20:07:50Z <p>Je comprends bien ce que tu proposes, mais cela ne semble pas marcher... et je ne sais pas vraiment te dire où ça coince. J'ai tenté différents critères, et leurs inverses, je ne comprends pas DU TOUT comment ils sont interprétés...</p> <p>- un exemple avec une brève d'un mot-clef (<code class="spip_code spip_code_inline" dir="ltr">{par date}</code>) :</p> <blockquote class="spip_poesie"><div>100<small class="fine d-inline"> </small>% (9 janvier 2009)</div> <div>100<small class="fine d-inline"> </small>% (10 janvier 2009)</div> <div>100<small class="fine d-inline"> </small>% (6 février 2009)</div> <div>100<small class="fine d-inline"> </small>% (24 novembre 2008)</div> <div>100<small class="fine d-inline"> </small>% (13 novembre 2008)</div> <div>100<small class="fine d-inline"> </small>% (27 octobre 2008)</div> <div>100<small class="fine d-inline"> </small>% (28 octobre 2008)</div> <div>100<small class="fine d-inline"> </small>% (8 novembre 2008)</div> <div>100<small class="fine d-inline"> </small>% (20 octobre 2008)</div> </blockquote> <p>- le même exemple, en théorie juste inversé par rapport à ci-dessus... (<code class="spip_code spip_code_inline" dir="ltr">{!par date}</code>) :</p> <blockquote class="spip_poesie"><div>100<small class="fine d-inline"> </small>% (28 octobre 2008)</div> <div>100<small class="fine d-inline"> </small>% (27 octobre 2008)</div> <div>100<small class="fine d-inline"> </small>% (20 octobre 2008)</div> <div>100<small class="fine d-inline"> </small>% (8 novembre 2008)</div> <div>100<small class="fine d-inline"> </small>% (13 novembre 2008)</div> <div>100<small class="fine d-inline"> </small>% (10 janvier 2009)</div> <div>100<small class="fine d-inline"> </small>% (9 janvier 2009)</div> <div>100<small class="fine d-inline"> </small>% (24 novembre 2008)</div> <div>100<small class="fine d-inline"> </small>% (6 février 2009)</div> </blockquote> <p>- un autre exemple (<code class="spip_code spip_code_inline" dir="ltr">{par date}</code>) :</p> <blockquote class="spip_poesie"><div>100<small class="fine d-inline"> </small>% (7 janvier 2009)</div> <div>100<small class="fine d-inline"> </small>% (15 janvier 2009)</div> <div>66.6666666667<small class="fine d-inline"> </small>% (29 janvier 2009)</div> <div>66.6666666667<small class="fine d-inline"> </small>% (29 janvier 2009)</div> <div>66.6666666667<small class="fine d-inline"> </small>% (16 janvier 2009)</div> <div>66.6666666667<small class="fine d-inline"> </small>% (29 janvier 2009)</div> <div>66.6666666667<small class="fine d-inline"> </small>% (31 janvier 2009)</div> <div>66.6666666667<small class="fine d-inline"> </small>% (13 novembre 2008)</div> <div>66.6666666667<small class="fine d-inline"> </small>% (24 octobre 2008)</div> <div>66.6666666667<small class="fine d-inline"> </small>% (9 décembre 2008)</div> <div>66.6666666667<small class="fine d-inline"> </small>% (29 janvier 2009)</div> <div>66.6666666667<small class="fine d-inline"> </small>% (3 février 2009)</div> <div>66.6666666667<small class="fine d-inline"> </small>% (6 janvier 2009)</div> <div>66.6666666667<small class="fine d-inline"> </small>% (13 novembre 2008)</div> <div>66.6666666667<small class="fine d-inline"> </small>% (5 décembre 2008)</div> <div>66.6666666667<small class="fine d-inline"> </small>% (6 février 2009)</div> <div>66.6666666667<small class="fine d-inline"> </small>% (5 février 2009)</div> <div>66.6666666667<small class="fine d-inline"> </small>% (30 décembre 2008)</div> <div>66.6666666667<small class="fine d-inline"> </small>% (2 janvier 2009)</div> <div>(je coupe les 33%)</div> </blockquote> <p>- le même exemple, en théorie juste inversé par rapport à ci-dessus... (<code class="spip_code spip_code_inline" dir="ltr">{!par date}</code>) :</p> <blockquote class="spip_poesie"><div>100<small class="fine d-inline"> </small>% (7 janvier 2009)</div> <div>100<small class="fine d-inline"> </small>% (15 janvier 2009)</div> <div>66.6666666667<small class="fine d-inline"> </small>% (5 décembre 2008)</div> <div>66.6666666667<small class="fine d-inline"> </small>% (30 décembre 2008)</div> <div>66.6666666667<small class="fine d-inline"> </small>% (2 janvier 2009)</div> <div>66.6666666667<small class="fine d-inline"> </small>% (6 janvier 2009)</div> <div>66.6666666667<small class="fine d-inline"> </small>% (6 février 2009)</div> <div>66.6666666667<small class="fine d-inline"> </small>% (5 février 2009)</div> <div>66.6666666667<small class="fine d-inline"> </small>% (24 octobre 2008)</div> <div>66.6666666667<small class="fine d-inline"> </small>% (13 novembre 2008)</div> <div>66.6666666667<small class="fine d-inline"> </small>% (13 novembre 2008)</div> <div>66.6666666667<small class="fine d-inline"> </small>% (3 février 2009)</div> <div>66.6666666667<small class="fine d-inline"> </small>% (29 janvier 2009)</div> <div>66.6666666667<small class="fine d-inline"> </small>% (9 décembre 2008)</div> <div>66.6666666667<small class="fine d-inline"> </small>% (29 janvier 2009)</div> <div>66.6666666667<small class="fine d-inline"> </small>% (29 janvier 2009)</div> <div>66.6666666667<small class="fine d-inline"> </small>% (29 janvier 2009)</div> <div>66.6666666667<small class="fine d-inline"> </small>% (31 janvier 2009)</div> <div>66.6666666667<small class="fine d-inline"> </small>% (16 janvier 2009)</div> <div>(je coupe les 33%)</div> </blockquote> <p>Les critères influent donc sur le résultat, mais y a manifestement quelque chose qui cloche<small class="fine d-inline"> </small>;).</p> <p>Si tu as des idées de pistes à explorer... parce que là je ne sais pas t'en dire plus. Merci de ton aide.</p> Afficher les articles connexes, triés par pertinence. 2009-02-11T18:27:38Z https://files.spip.org/Afficher-les-articles-connexes-tries-par-pertinence#comment413298 2009-02-11T18:27:38Z <p>Faire ce tri (par pertinence puis par date) n'est pas très simple.</p> <p>Pour expliquer je vais partir du principe que tu utilises la version «<small class="fine d-inline"> </small><i>sans PHP et beaucoup plus rapide</i><small class="fine d-inline"> </small>» relatée à la fin de la contrib'.</p> <p>Si dans la boucle qui affiche les articles on met un critère <code class="spip_code spip_code_inline" dir="ltr">{!par date}</code> on aurait :</p> <div class="precode"><pre class="spip_code spip_code_block language-spip" dir="ltr" style="text-align:left;" data-language="spip"><code><BOUCLE_Articles_Connexes(ARTICLES){id_article IN #GET{tableau_articles}}{0,20}{!par date}> blabla </BOUCLE_Articles_Connexes></code></pre></div> <p>Et les articles seraient bien triés par date, mais plus du tout par pertinence (à moins que deux articles aient la même date à la seconde près, ces deux-là seraient alors affichés par ordre de pertinence : inutile).</p> <p>Comme on ne peut pas rajouter ce critère au moment de l'affichage, il faut sans doute le faire en amont : avant que le tableau ne soit trié par pertinence.</p> <p>Donc, quand on construit le tableau, on rajoute le (ou les) critère que l'on choisit (ici <code class="spip_code spip_code_inline" dir="ltr">{!par date}</code>) :</p> <div class="precode"><pre class="spip_code spip_code_block language-spip" dir="ltr" style="text-align:left;" data-language="spip"><code><BOUCLE_Tableau_Articles_Connexes(ARTICLES){!id_article}{id_mot}{!par date}> [(#SET{tableau_pertinence, [(#GET{tableau_pertinence} |ponderation{#ID_ARTICLE} )] })] </BOUCLE_Tableau_Articles_Connexes></code></pre></div> <p>Dans le tableau <code class="spip_code spip_code_inline" dir="ltr">tableau_pertinence</code> les articles sont donc triés par date. Lorsque l'on transforme ce tableau en <code class="spip_code spip_code_inline" dir="ltr">tableau_articles</code> (par le filtre <code class="spip_code spip_code_inline" dir="ltr">arsort</code> dont tu parles), les articles sont retriés par pertinence, mais je pense que si leur pertinence est identique, ils gardent alors le tri initial (ici par date).</p> <p>Je ne sais pas si je suis clair<small class="fine d-inline"> </small>? :-/</p> <p>En résumé, je pense qu'en mettant le critère <code class="spip_code spip_code_inline" dir="ltr">{!par date}</code> à la boucle <code class="spip_code spip_code_inline" dir="ltr">_Tableau_Articles_Connexes</code> de cette contrib' tu auras des articles triés par pertinence puis par date... Mais comme je n'ai pas testé, si tu essaies, tu me diras<small class="fine d-inline"> </small>! :-)</p> Afficher les articles connexes, triés par pertinence. 2009-02-11T18:04:05Z https://files.spip.org/Afficher-les-articles-connexes-tries-par-pertinence#comment413297 2009-02-11T18:04:05Z <p>Bonjour,</p> <p>Je débute en PHP/Spip. Sauriez-vous comment trier d'abord par pertinence (comme c'est fait actuellement) puis, pour les articles ayant la même pertinence, par un autre critère (a priori date inverse).</p> <p>Actuellement, le tableau est trié grâce à <code class="spip_code spip_code_inline" dir="ltr">arsort ($tableau);</code>, et j'avoue ne pas savoir comment ajouter un deuxième critère...</p> <p>Des idées<small class="fine d-inline"> </small>?</p> <p>Merci d'avance<small class="fine d-inline"> </small>!</p> Afficher les articles connexes, triés par pertinence. 2008-11-19T16:21:56Z https://files.spip.org/Afficher-les-articles-connexes-tries-par-pertinence#comment410193 2008-11-19T16:21:56Z <p>Bravo <strong>Jiou</strong>, cette modif me permet à moi aussi de faire fonctionner le script :)</p> <p>Et encore merci <strong>Beurt</strong> pour cette contrib' très efficace.</p> Afficher les articles connexes, triés par pertinence. 2008-07-22T12:00:53Z https://files.spip.org/Afficher-les-articles-connexes-tries-par-pertinence#comment407628 2008-07-22T12:00:53Z <p>Eurêka, j'ai trouvé<small class="fine d-inline"> </small>! En tout cas, chez moi, ça marche.</p> <p>En fait, j'ai modifié :</p> <div class="precode"><pre class="spip_code spip_code_block" dir="ltr" style="text-align:left;"><code>[(#SET{tableau_pertinence, [(#GET{tableau_pertinence} |ponderation{#ID_ARTICLE} )] })]</code></pre></div> <p> en enlevant certaines [(, ce qui donne :</p> <div class="precode"><pre class="spip_code spip_code_block" dir="ltr" style="text-align:left;"><code>[(#SET{tableau_pertinence, #GET{tableau_pertinence} |ponderation{#ID_ARTICLE} })]</code></pre></div> Afficher les articles connexes, triés par pertinence. 2008-06-27T15:55:33Z https://files.spip.org/Afficher-les-articles-connexes-tries-par-pertinence#comment407150 2008-06-27T15:55:33Z <p>Quelques précisions sur les difficultés que j'ai rencontrées.</p> <h2 class="h2">Étape 1 : mes_fonctions, mais fonctionne pas</h2> <p>- La boucle dans article.html <br>- Le code PHP dans mes_fonctions.php (créé pour l'occasion, dans /squelettes/)</p> <div class="precode"><pre class="spip_code spip_code_block" dir="ltr" style="text-align:left;"><code>Erreur(s) dans le squelette Erreur : filtre « ponderation » non défini, _Tableau_Articles_Connexes</code></pre></div> <p><br class="manualbr">(Ce message apparait 5 fois.)</p> <p>J'ai lu (je ne retrouve pas où) qu'on ne pouvait charger qu'un seul fichier mes_fonctions.php à la fois, or j'en ai un dans le sous-répertoire couteau_suisse du plugin du même nom. (j'en ai aussi un dans /SpipClear, mais je n'utilise pas ces squelettes actuellement - et enfin j'ai un article_pdf_mes_fonctions.php dans /article_PDF, pour être complet)</p> <p>Bref, j'ai mis les deux fonctions de cette noisette dans mes_options.php et les fonctions sont bien reconnues.<br class="autobr"> Je ne suis pas certain d'être bien « propre » avec ça, mais le fait d'avoir les mêmes messages d'erreur que mes petits copains plus haut me laisse penser que c'est pas le sujet (?).</p> <h2 class="h2">Étape 2 : Spip m'insulte et s'arrête</h2> <p>- La boucle toujours dans article.html <br>- Le code PHP dans mes_options.php</p> <p><code class="spip_code spip_code_inline" dir="ltr">Fatal error: Cannot increment/decrement overloaded objects nor string offsets in D:\Spip\ecrire\mes_options.php on line 43</code></p> <p>La ligne 43 étant <code class="spip_code spip_code_inline" dir="ltr">$tableau[$cle]++;</code></p> <h2 class="h2">Étape 3 : Spip m'insulte mais continue</h2> <p>- La boucle toujours dans article.html <br>- Le code PHP toujours dans mes_options.php <br>- Comme suggéré plus haut, je remplace (ligne 43) <code class="spip_code spip_code_inline" dir="ltr">$tableau[$cle]++;</code> par <code class="spip_code spip_code_inline" dir="ltr">$tableau[$cle] = $tableau[$cle]+1;</code><br class="manualbr">Bizarrement (mais toujours comme Jiou), le résultat est différent...</p> <div class="precode"><pre class="spip_code spip_code_block" dir="ltr" style="text-align:left;"><code>Warning: arsort() expects parameter 1 to be array, string given in D:\Spip\ecrire\mes_options.php on line 51 Warning: array_keys() [function.array-keys]: The first argument should be an array in D:\Spip\ecrire\public\composer.php(72) : eval()'d code on line 581 Warning: arsort() expects parameter 1 to be array, string given in D:\Spip\ecrire\mes_options.php on line 51 Warning: reset() [function.reset]: Passed variable is not an array or object in D:\Spip\ecrire\public\composer.php(72) : eval()'d code on line 587</code></pre></div> <p>Contrairement à l'erreur fatale de tout à l'heure, ce ne sont que des Warning, donc l'article apparait... Mais pas les articles connexes (nada).</p> <p>Pour info, j'ai écrit quelques mots à différents endroits dans la noisette pour voir où Spip passait :</p> <div class="precode"><pre class="spip_code spip_code_block" dir="ltr" style="text-align:left;"><code>[(#REM) Pour chaque mot clé de l'article] <BOUCLE_Mots_De_Article_Contexte(MOTS){id_article}> Passage n°1 [(#REM) Pour chaque article qui a ce mot clé] <BOUCLE_Tableau_Articles_Connexes(ARTICLES){!id_article}{id_mot}> [(#SET{tableau_pertinence, [(#GET{tableau_pertinence} |ponderation{#ID_ARTICLE} )] })] Passage n°2 </BOUCLE_Tableau_Articles_Connexes> Passage n°3 </BOUCLE_Mots_De_Article_Contexte> [(#REM) On fabrique un tableau trié avec les id_article comme valeurs] Passage n°4 [(#SET{tableau_articles, [(#GET{tableau_pertinence} |trie_tableau |array_keys)]} )] Passage n°5 [(#REM) On récupère la pondération maximale pour nos pourcentages] [(#SET{pertinence_max, [(#GET{tableau_pertinence} |trie_tableau|reset)]} )] Passage n°6 [(#REM) Cette boucle affiche le titre des 20 articles connexes, c'est-à-dire les 20 articles qui ont le plus de mots-clés communs avec celui du contexte. Elle donne la pondération en pourcents.] <BOUCLE_Articles_Connexes(ARTICLES){id_article IN #GET{tableau_articles}}{0,20}> Passage n°7 #TITRE (pertinence: [(#GET{tableau_pertinence} |table_valeur{#ID_ARTICLE} |div{#GET{pertinence_max}} |mult{100} )] %)<br /> Passage n°8 </BOUCLE_Articles_Connexes></code></pre></div> <p>Résultat :<br class="autobr"> Passage n°1 Passage n°2 Passage n°2 Passage n°2 Passage n°2 Passage n°2 Passage n°2 Passage n°3 Passage n°4 Passage n°5 Passage n°6</p> <p>L'article testé n'a qu'un mot-clef, contenu par ailleurs dans 6 autres articles (d'où l'apparition à 6 reprises du passage n°2).<br class="autobr"> Si ça peut vous aider à localiser le problème (parce que moi, pas des masses :D).</p> <p>Je suis aussi allé voir en var_mode=debug, et je crains que cela ne dépasse mon seuil de compétences...</p> <p>A disposition pour vous donner plus d'éléments.</p> <p>Merci de chercher, Beurt. :)</p> Afficher les articles connexes, triés par pertinence. 2008-06-27T13:46:20Z https://files.spip.org/Afficher-les-articles-connexes-tries-par-pertinence#comment407140 2008-06-27T13:46:20Z <p>Hélas, je n'ai toujours pas trouvé de solution. Est-ce qu'il y a seulement des warning qui s'affichent ou bien est-ce qu'en plus les articles connexes ne sont pas affichés<small class="fine d-inline"> </small>?</p> Afficher les articles connexes, triés par pertinence. 2008-06-24T14:34:05Z https://files.spip.org/Afficher-les-articles-connexes-tries-par-pertinence#comment407073 2008-06-24T14:34:05Z <p>Bonjour,</p> <p>Merci à Beurt pour cette contrib' qui répond parfaitement à un de mes besoins<small class="fine d-inline"> </small>!</p> <p>Néanmoins... J'ai le même problème que Jiou en local (EasyPHP 2.0b1 : PHP 5.2.0 - Apache 2.2.3 - MySQL 5.0.27) et sur OVH.<br class="manualbr">Quelqu'un a-t-il trouvé une solution<small class="fine d-inline"> </small>?</p> <p>NB : j'ai testé l'«<small class="fine d-inline"> </small>ancienne méthode<small class="fine d-inline"> </small>» présentée ici. Pour les articles sans mot-clef commun, j'ai le même message d'erreur que précisé dans les commentaires - ça doit pouvoir se gérer.<br class="autobr"> Mais surtout, les inconvénients énoncés à la sortie de la «<small class="fine d-inline"> </small>nouvelle méthode<small class="fine d-inline"> </small>» m'incitent à chercher un autre moyen...<br class="autobr"> Etant une bille en PHP, je m'en remets aux bonnes âmes. :)</p> <p>Merci d'avance à ceux qui prendront le temps de me répondre.<br class="autobr"> Forza Spip</p> Correctif pour « Afficher les articles connexes, triés par pertinence. » 2008-05-22T19:18:33Z https://files.spip.org/Afficher-les-articles-connexes-tries-par-pertinence#comment406291 2008-05-22T19:18:33Z <p>Salut à tous,</p> <p>Moi aussi j'ai eu le même soucis d'avoir deux lignes d'erreur quand mon article ne possède pas de mots clés...</p> <p>Ce que j'ai fais pour empêcher ça est un peu bourrin mais fonctionnel en attendant de trouver mieux...</p> <p>Pour plus de clarté dans mon code, j'ai placé le code de Thierry Gagnon (avec la correction du $ qu'il a proposé dans le post suivant) dans un fichier nommé <i>inc-connexes.html</i></p> <p>Et après j'ai placé mon inclusion de fichier dans une boucle qui teste la présence de mots clés attachés à l'article...</p> <div class="precode"><pre class="spip_code spip_code_block" dir="ltr" style="text-align:left;"><code><BOUCLE_presence_mots(MOTS){id_article}{0,1}> <INCLURE{fond=inc-connexes}{id_article}> </BOUCLE_presence_mots></code></pre></div> <p>La boucle ne renvoie rien si jamais il n'y a pas de mots clés, donc il n'y aura pas d'erreur en cas de non-présence de mots clés. Et le <code class="spip_code spip_code_inline" dir="ltr">{0,1}</code> permet de n'afficher qu'une fois les articles connexes si jamais il y a présence de plusieurs mots clés.</p> <p>Ça fonctionne. Je suis tout ouïe pour quelque chose de plus propre.</p> <p>De même, il y a comme un bug. En effet, la noisette affichera <strong>$maxarticles - 1</strong> articles connexes.</p> <p>En tout cas, merci pour cette contrib qui est très utile et merci à Thierry pour les corrections apportées<small class="fine d-inline"> </small>!</p> Afficher les articles connexes, triés par pertinence. 2008-05-21T13:58:30Z https://files.spip.org/Afficher-les-articles-connexes-tries-par-pertinence#comment406239 2008-05-21T13:58:30Z <p>Aucune erreur ne s'affiche mais je n'ai rien dans ma liste d'articles similaires... Ce n'est pas très étonnant : quand on avait mis les mêmes chosos dans les fonctions, on obtenait ça. Les tableaux semblent vidés à chaque fois, ce qui est confirmé quand je mets print_r à la fin, j'obtiens : Array ( [2] => 1 ) Array ( [35] => 1 ) Array ( [19] => 1 ) Array ( [2] => 1 ) Array ( [19] => 1 ) Array ( [35] => 1 ) Array ( [19] => 1 ) Array ( [19] => 1 ) Array ( [2] => 1 ) Array ( [35] => 1 ) Array ( [52] => 1 ) Array ( [2] => 1 ) Array ( [19] => 1 ) Array ( [35] => 1 )</p> <p>Quand je mets print_r sans les dernières modifications), j'obtiens : Array ( [2] => 1 ) Array 1Array 1 1 Ar1ay 1 1 Ar1ay 2 1 Ar1ay 2 2 Ar1ay 3 2 Ar1ay 4 2 Ar2ay 4 2 Ar2ay 4 3 Ar2ay 4 3 1Ar3ay 4 3 1 Ar3ay 5 3 1 Ar3ay 5 4 1.</p> <p>Juste une idée : est-ce que ça ne viendrait pas la balise #GET<small class="fine d-inline"> </small>? En effet, la première fois que la fonction ponderation s'exerce, la variable tableau_pertinence n'a pas de valeur donc tout se passe bien, mais la deuxième fois, ce n'est pas la variable tableau_pertinence qui va entrer en lieu et place de $tableau, mais sa valeur, obtenue par #GET<i>tableau_pertinence</i>... Non<small class="fine d-inline"> </small>? Etes-vous sûr que dans votre code qui semble marcher chez vous, il n'y a pas une différence de parenthèse avec la version que vous proposez ici<small class="fine d-inline"> </small>?</p> <p>J'espère que je suis compréhensible...</p> Afficher les articles connexes, triés par pertinence. 2008-05-21T12:35:04Z https://files.spip.org/Afficher-les-articles-connexes-tries-par-pertinence#comment406236 2008-05-21T12:35:04Z <p>Bon... On va passer par les grands moyens, comme les tableaux ne semblent pas reconnus comme tels quel par le filtre (ce qui est bien étrange...) on va les sérialiser et les dé-sérialiser à chaque fois.</p> <p>Il a des modifs à faire dans <code class="spip_code spip_code_inline" dir="ltr">mes_fonctions.php</code>... Le nouveau doit contenir :</p> <div class="precode"><pre class="spip_code spip_code_block language-php" dir="ltr" style="text-align:left;" data-language="php"><code><?php //Incrémente la valeur correspondant à une clé dans un tableau. //Est utilisé pour incrémenter la pondération des articles. function ponderation ($tableau,$cle) { $tableau= is_string($tableau)?unserialize($tableau):$tableau; $tableau= is_array($tableau)?$tableau:array(); $tableau[$cle]++; return $tableau; } ?> <?php //Trie un tableau en fonction de ses valeurs //Est nécessaire, car [(#GET{un_tableau}|asort)] ne semble pas fonctionner function trie_tableau ($tableau) { $tableau= is_string($tableau)?unserialize($tableau):$tableau; $tableau= is_array($tableau)?$tableau:array(); arsort ($tableau); return $tableau; } ?></code></pre></div> <p>Dans la noix il faut rajouter le filtre <code class="spip_code spip_code_inline" dir="ltr">serialize</code>. Ainsi, on transforme ce qui concerne la pondération en :</p> <div class="precode"><pre class="spip_code spip_code_block" dir="ltr" style="text-align:left;"><code>[(#SET{tableau_pertinence, [(#GET{tableau_pertinence} |serialize |ponderation{#ID_ARTICLE} )] })]</code></pre></div> <p>et ce qui concerne le tri en :</p> <div class="precode"><pre class="spip_code spip_code_block" dir="ltr" style="text-align:left;"><code>[(#SET{tableau_articles, [(#GET{tableau_pertinence} |serialize |trie_tableau |array_keys)]} )]</code></pre></div> <p>et on oublie pas au début de la noix d'initialiser les tableaux :</p> <div class="precode"><pre class="spip_code spip_code_block" dir="ltr" style="text-align:left;"><code>#SET{tableau_articles,#ARRAY{''}} #SET{tableau_pertinence,#ARRAY{''}}</code></pre></div> <p>En espérant que ça va fonctionner, sinon, je risque d'être à court d'idées<small class="fine d-inline"> </small>!</p> <p>NB : Si vous voulez suivre la valeur de <code class="spip_code spip_code_inline" dir="ltr">$tableau</code> dans le filtre, préférez un <code class="spip_code spip_code_inline" dir="ltr">print_r($tableau);</code> à un <code class="spip_code spip_code_inline" dir="ltr">echo $tableau;</code> qui donnera moins d'infos (<code class="spip_code spip_code_inline" dir="ltr">print_r</code> permet d'afficher le contenu du tableau)</p> Afficher les articles connexes, triés par pertinence. 2008-05-21T12:22:33Z https://files.spip.org/Afficher-les-articles-connexes-tries-par-pertinence#comment406235 2008-05-21T12:22:33Z <p>Si je mets echo $tableau[cle]<small class="fine d-inline"> </small>; à la place, j'ai AAAAAAAAAAAAA en haut de la page</p> Afficher les articles connexes, triés par pertinence. 2008-05-21T12:11:54Z https://files.spip.org/Afficher-les-articles-connexes-tries-par-pertinence#comment406233 2008-05-21T12:11:54Z <p>Bon, moi je n'y comprends pas grand chose, mais j'ai placé echo $tableau<small class="fine d-inline"> </small>; dans la fonction pondération, juste avant return $tableau<small class="fine d-inline"> </small>; J'ai aussi remplacé $tableau[cle]++<small class="fine d-inline"> </small>; par $tableau[cle]=$tableau[cle]+1<small class="fine d-inline"> </small>; (pour ne pas avoir l'erreur) pour voir ce qu'il me donnait.</p> <p>Voici ce qui apparaît en haut de la page (j'ai 5 mots clés) :</p> <p>ArrayArray 1Array 1 1 Ar1ay 1 1 Ar1ay 2 1 Ar1ay 2 2 Ar1ay 3 2 Ar1ay 4 2 Ar2ay 4 2 Ar2ay 4 3 Ar2ay 4 3 1Ar3ay 4 3 1 Ar3ay 5 3 1 Ar3ay 5 4 1</p> <p>Est-ce que ça peut aider à comprendre ce qui se passe<small class="fine d-inline"> </small>?</p> Afficher les articles connexes, triés par pertinence. 2008-05-21T11:10:00Z https://files.spip.org/Afficher-les-articles-connexes-tries-par-pertinence#comment406229 2008-05-21T11:10:00Z <p>En essayant de mettre les #SET<i>tableau_pertinence,#ARRAY</i> et #SET<i>tableau_articles,#ARRAY</i>, dans les boucles, j'obtiens la même chose qu'en les définissant comme des tableaux en php, c'est-à-dire que je n'ai plus d'erreur, mais la liste des articles similaires ne s'affiche pas. J'arrive donc bien à définir des tableaux avec #SET<i>tableau_pertinence,#ARRAY</i>. Il semble donc que mes tableaux se transforment en autre chose que des tableaux au cours du processus...</p> Afficher les articles connexes, triés par pertinence. 2008-05-21T11:03:23Z https://files.spip.org/Afficher-les-articles-connexes-tries-par-pertinence#comment406228 2008-05-21T11:03:23Z <p>Ca ne marche pas non plus. J'ai aussi essayé en passant en PHP 5, et ça ne marche pas non plus. J'étais en PHP 4 avant...</p> Afficher les articles connexes, triés par pertinence. 2008-05-20T22:12:57Z https://files.spip.org/Afficher-les-articles-connexes-tries-par-pertinence#comment406214 2008-05-20T22:12:57Z <p>Désolé... Pour le moment je sèche un peu... Car en fait, <code class="spip_code spip_code_inline" dir="ltr">[(#SET{tableau_pertinence,#ARRAY})]</code> <strong>devrait suffire</strong> à initialiser les tableaux... Peut être rajouter les accolades<small class="fine d-inline"> </small>? <code class="spip_code spip_code_inline" dir="ltr">[(#SET{tableau_pertinence,#ARRAY{0,0}})]</code> par exemple... Mais j'y crois pas trop...</p> <p>Vraiment, je ne vois pas ce qui cloche...</p> Afficher les articles connexes, triés par pertinence. 2008-05-19T20:48:06Z https://files.spip.org/Afficher-les-articles-connexes-tries-par-pertinence#comment406165 2008-05-19T20:48:06Z <p>En effet, aucun des trois ne marche.</p> <p>Pour le dernier, en ajoutant les deux lignes dans ponderation et trie_tableau, aucune erreur ne s'affiche en haut de la page, mais je n'ai aucun article connexe qui ne s'affiche. Cela a le même effet que lorsque j'écrivais $tableau_pertinence=array()<small class="fine d-inline"> </small>;. Autrement dit, on dirait que ça remet les tableaux à 0.</p> <p>Ne pourrait-on pas pas définir tableau_pertinence et tableau_articles comme des tableaux dans un filtre qui est appelée bien avant dans le squelette. J'ai essayé, mais ça ne marche pas...</p> Afficher les articles connexes, triés par pertinence. 2008-05-19T18:23:38Z https://files.spip.org/Afficher-les-articles-connexes-tries-par-pertinence#comment406156 2008-05-19T18:23:38Z <p>Aucune des trois méthodes ne fonctionne<small class="fine d-inline"> </small>??? Elles donnent toutes le même résultat<small class="fine d-inline"> </small>??</p> <p>Je te parlais de version de PHP car ça fonctionne bien chez moi et sur un serveur de production tel que c'est dans l'article...</p> <p>Peux-tu encore faire un essai<small class="fine d-inline"> </small>? Toujours dans la fonction <code class="spip_code spip_code_inline" dir="ltr">ponderation</code>, avant <code class="spip_code spip_code_inline" dir="ltr">$tableau[$cle]++</code>, peux tu rajouter :</p> <div class="precode"><pre class="spip_code spip_code_block language-php" dir="ltr" style="text-align:left;" data-language="php"><code>$tableau= is_string($tableau)?unserialize($tableau):$tableau; $tableau= is_array($tableau)?$tableau:array();</code></pre></div> <p>(code tiré du filtre <a href="http://doc.spip.org/@table_valeur" class="spip_out" title="aller voir la doc technique de spip" rel='nofollow external'><code class="spip_code spip_code_inline" dir="ltr">table_valeur</code></a> de Spip)...</p> Afficher les articles connexes, triés par pertinence. 2008-05-19T17:45:29Z https://files.spip.org/Afficher-les-articles-connexes-tries-par-pertinence#comment406152 2008-05-19T17:45:29Z <p>Merci beaucoup de prendre du temps pour me répondre.</p> <p>...mais ça ne marche toujours pas, j'obtiens toujours la même erreur... Je ne comprends pas pourquoi... Tu parlais de ma version de php... Tu penses que ça peut être du à quoi<small class="fine d-inline"> </small>?</p> Afficher les articles connexes, triés par pertinence. 2008-05-19T15:21:43Z https://files.spip.org/Afficher-les-articles-connexes-tries-par-pertinence#comment406147 2008-05-19T15:21:43Z <p>Mhhh... C'est compliqué... Je pensais vraiment que le <code class="spip_code spip_code_inline" dir="ltr">#SET{tableau_articles,#ARRAY}</code> suffirait<small class="fine d-inline"> </small>!</p> <p>J'ai deux pistes qui pourraient résoudre le problème et je vais te demander de les essayer car je ne peux tester puisque je ne reproduis pas l'erreur :</p> <p>Dans les deux cas il faut modifier la fonction <code class="spip_code spip_code_inline" dir="ltr">ponderation</code> dans mes fonctions. <br>- Piste 1 : remplacer <code class="spip_code spip_code_inline" dir="ltr">$tableau[$cle]++;</code> par <code class="spip_code spip_code_inline" dir="ltr">(array)$tableau[$cle]++;</code>. <br>- Piste 2 : rajouter au début de la fonction : <code class="spip_code spip_code_inline" dir="ltr">If (!$tableau) {$tableau[$cle]=array()}</code> <br>- Piste 3 : rajouter au début de la fonction : <code class="spip_code spip_code_inline" dir="ltr">If (!$tableau) {$tableau[$cle]=0}</code></p> <p>J'espère que la première piste suffira... Tiens moi vite au courant.</p> Afficher les articles connexes, triés par pertinence. 2008-05-19T12:41:26Z https://files.spip.org/Afficher-les-articles-connexes-tries-par-pertinence#comment406140 2008-05-19T12:41:26Z <p>Je suis chez Free.</p> <p>L'initialisation de cette manière ne marche pas non plus... Toujours le même message. Si je mets $tableau[cle]=$tableau[cle]+1<small class="fine d-inline"> </small>; à la place de $tableau[cle]++<small class="fine d-inline"> </small>;, je n'ai pas de problème avec la fonction pondération, la page s'affiche, mais sans rien en lieu et place des articles connexes et un message en haut qui me dit :</p> <p>Warning : arsort() expects parameter 1 to be array, string given in /mnt/109/sdc/7/5/.../mes_fonctions.php on line 108</p> <p>Warning : array_keys() [function.array-keys] : The first argument should be an array in /mnt/109/sdc/7/5/.../ecrire/public/composer.php(72) : eval()'d code on line 566</p> <p>Warning : arsort() expects parameter 1 to be array, string given in /mnt/109/sdc/7/5/.../mes_fonctions.php on line 108</p> <p>Warning : reset() [function.reset] : Passed variable is not an array or object in /mnt/109/sdc/7/5/.../ecrire/public/composer.php(72) : eval()'d code on line 571</p> Afficher les articles connexes, triés par pertinence. 2008-05-16T19:05:07Z https://files.spip.org/Afficher-les-articles-connexes-tries-par-pertinence#comment406034 2008-05-16T19:05:07Z <p>Je n'ai pas ce problème chez... Peut-être un souci de versions ou de config PHP.</p> <p>Avez vous essayé d'initialiser les tableaux dans le squelette avec un <code class="spip_code spip_code_inline" dir="ltr">#SET{tableau_articles,#ARRAY}</code> et un <code class="spip_code spip_code_inline" dir="ltr">#SET{tableau_pertinence,#ARRAY}</code> au début de la noix (ou du squelette...)<small class="fine d-inline"> </small>???</p> <p>Si non, pouvez vous essayer et me dire ce que ça donne<small class="fine d-inline"> </small>?</p> Afficher les articles connexes, triés par pertinence. 2008-05-16T14:09:24Z https://files.spip.org/Afficher-les-articles-connexes-tries-par-pertinence#comment406027 2008-05-16T14:09:24Z <p>En fait, il semble que les fonctions php ne reconnaissent pas tableau_pertinence et tableau_articles comme des tableaux...</p> <p>Où peut-on préciser $tableau_x=array()<small class="fine d-inline"> </small>;<small class="fine d-inline"> </small>? Car dans les fonctions, le tableau se vide à chaque fois que celle-ci est appelée, et en dehors, ce n'est pas pris en compte puisque les boucles sont calculées avant le PHP...</p> Afficher les articles connexes, triés par pertinence. 2008-05-16T09:43:07Z https://files.spip.org/Afficher-les-articles-connexes-tries-par-pertinence#comment406008 2008-05-16T09:43:07Z <p>Bonjour, j'ai testé la nouvelle méthode, sans le php. Mais il me retourne :</p> <p>Fatal error : Cannot increment/decrement overloaded objects nor string offsets in /mnt/109/sdc/7/5/.../mes_fonctions.php on line 100</p> <p>sachant que la ligne 100 correpond à $tableau[$cle]++ de la fonction ponderation...</p> <p>Quelqu'un a-t-il une idée<small class="fine d-inline"> </small>?</p> Afficher les articles connexes : et les classer par date<small class="fine d-inline"> </small>? 2008-05-13T08:00:52Z https://files.spip.org/Afficher-les-articles-connexes-tries-par-pertinence#comment405915 2008-05-13T08:00:52Z <p>J'ai mis à jour l'article avec une solution sans PHP.<br class="autobr"> Il est désromais possible de trier les articles par date. Mais attention, ils ne seront triés que par date, pas par pertinence<small class="fine d-inline"> </small>!</p> Afficher les articles connexes : et les classer par date<small class="fine d-inline"> </small>? 2008-04-05T16:52:05Z https://files.spip.org/Afficher-les-articles-connexes-tries-par-pertinence#comment404789 2008-04-05T16:52:05Z <p>Bonjour<br class="autobr"> je viens d'installer sans difficulté cette superbe contrib'... Mais je voudrais aller encore plus loin... et trier les résultats trouvés par date... S'il est préférable de garder une hiérarchie par pertinence, on peut malgré cela classer par date au sein d'un même groupe (cad au sein des articles qui ont le même nombre de mot clé en commun). J'ai donc ajouter, tout simplement<br class="autobr"> <i>par date</i><i>inverse</i> dans la boucle . En vain.<br class="autobr"> Si quelqu'un a une idée, une piste, j'essaierai de bidouiller encore et encore... <br class="autobr"> Cependant, merci encore pour cette contrib' forte utile.</p> vive la navigation transversale 2008-03-07T09:58:21Z https://files.spip.org/Afficher-les-articles-connexes-tries-par-pertinence#comment403812 2008-03-07T09:58:21Z <p>Merci de cette formule qui me rejoint et à laquelle j'ajoute.</p> <p>- navigation transversale = personnalisation du contenu pour l'utilisateur <br>- navigation transversale <strong>à la demande</strong> = personnalisation du contenu <strong>par</strong> l'utilisateur = web agile = vite<small class="fine d-inline"> </small>!</p> vive la navigation transversale 2008-03-07T09:58:01Z https://files.spip.org/Afficher-les-articles-connexes-tries-par-pertinence#comment403811 2008-03-07T09:58:01Z <p>Merci de cette formule qui me rejoins et à laquelle j'ajoute.</p> <p>- navigation transversale = personnalisation du contenu pour l'utilisateur <br>- navigation transversale <strong>à la demande</strong> = personnalisation du contenu <strong>par</strong> l'utilisateur = web agile = vite<small class="fine d-inline"> </small>!</p> Correctif pour « Afficher les articles connexes, triés par pertinence. » 2008-01-26T15:51:38Z https://files.spip.org/Afficher-les-articles-connexes-tries-par-pertinence#comment402543 2008-01-26T15:51:38Z <p>Super contrib que je viens de mettre en place sur spip 1.9.2c.</p> <p>Ca fonctionne nickel grâce aux commentaires de Thierry Gagnon.</p> <p>Merci à tous :-)</p> Correctif pour « Afficher les articles connexes, triés par pertinence. » 2007-08-15T09:48:23Z https://files.spip.org/Afficher-les-articles-connexes-tries-par-pertinence#comment396960 2007-08-15T09:48:23Z <p>Bonjour,</p> <p>J'ai un p'tit blème quand mon article n'a pas de mots clés 2 lignes d'erreurs s'affichent :</p> <div class="precode"><pre class="spip_code spip_code_block" dir="ltr" style="text-align:left;"><code>Warning: arsort() expects parameter 1 to be array, null given in /home.8/p/a/t/patcatna/www/ecrire/public.php(173) : eval()'d code on line 253</code></pre></div><div class="precode"><pre class="spip_code spip_code_block" dir="ltr" style="text-align:left;"><code>Warning: Variable passed to each() is not an array or object in /home.8/p/a/t/patcatna/www/ecrire/public.php(173) : eval()'d code on line 257</code></pre></div> <p>Cela semble venir de :</p> <div class="precode"><pre class="spip_code spip_code_block" dir="ltr" style="text-align:left;"><code>if ($vs > maxcommun-1) { $i++; if ($i==maxarticles) break;</code></pre></div> <p>En faisant les corrections du post ci-dessus c pire (déclaration des variables...)</p> <p>Merci de votre aide</p> <p>Patrice</p> Afficher les articles connexes, triés par pertinence. 2007-08-11T14:44:23Z https://files.spip.org/Afficher-les-articles-connexes-tries-par-pertinence#comment396824 2007-08-11T14:44:23Z <p>J'ai comme l'impression que cela ne fonctionne plus sous une 1.9.2b</p> Correctif pour « Afficher les articles connexes, triés par pertinence. » 2007-06-01T10:47:14Z https://files.spip.org/Afficher-les-articles-connexes-tries-par-pertinence#comment394442 2007-06-01T10:47:14Z <p>Il y a aussi cette corretcion à appliquer :</p> <div class="precode"><pre class="spip_code spip_code_block" dir="ltr" style="text-align:left;"><code>if ($vs > maxcommun-1) { $i++; echo $i; if ($i==maxarticles) break;</code></pre></div> <p>doit être</p> <div class="precode"><pre class="spip_code spip_code_block" dir="ltr" style="text-align:left;"><code>if ($vs > $maxcommun-1) { $i++; echo $i; if ($i==$maxarticles) break;</code></pre></div> <p>(Il manque le signe $ aux variables.)</p> Correctif pour « Afficher les articles connexes, triés par pertinence. » 2007-05-31T17:02:05Z https://files.spip.org/Afficher-les-articles-connexes-tries-par-pertinence#comment394415 2007-05-31T17:02:05Z <p>Merci beaucoup pour cette contrib que j'attendais depuis des années<small class="fine d-inline"> </small>! :)</p> <p>Par contre, j'ai eu beaucoup de difficulté à implémenter ce code pour les raisons suivantes :</p> <p>1) Il ne m'a pas été évident du premier coup quelles noisette je devais utiliser ni la façon dont elles devaient d'enchaîner.</p> <p>2) Plusieurs retours à la ligne ont été ommis à la fin de certains commentaires. Par exemple, la dernière ligne de code PHP :</p> <p><code class="spip_code spip_code_inline" dir="ltr"># on passe donc au suivant } };</code><br class="autobr"> devrait se lire :</p> <div class="precode"><pre class="spip_code spip_code_block" dir="ltr" style="text-align:left;"><code># on passe donc au suivant } };</code></pre></div> <p>3) Pour une raison qui m'échappe (problème d'encodage d'un caractère<small class="fine d-inline"> </small>?) le commentaire « #Puis pour chaque id_article » provoquait une erreur « Parse error ». Retirer cette ligne a fait disparaître l'erreur<small class="fine d-inline"> </small>!!</p> <p>4) Le commentaire « [(#Pour chaque article qui a ce mot clé] » devrait se lire "<code class="spip_code spip_code_inline" dir="ltr">[(#REM)Pour chaque article qui a ce mot clé]</code></p> <p>5) Je suggère d'ajouter un commentaire dans le code pour indiquer le nom de la boucle contexte à remplacer. Par exemple : <code class="spip_code spip_code_inline" dir="ltr">[(#REM) Remplacer "_Contexte_Article" par le non de la boucle contexte de l'article]</code>.</p> <p>Je suggère donc de corriger et tester le code et ensuide de fournir un fichier HTML à télécharger pour éviter toute confusion et d'assurer l'intégrité du code.</p> <p>Voici mon code final, au cas où ça pourra en aider certains :</p> <div class="precode"><pre class="spip_code spip_code_block" dir="ltr" style="text-align:left;"><code><BOUCLE_Mots_De_Article_Contexte(MOTS){id_article}>[(#REM) Pour chaque mot clé de l'article] <BOUCLE_Tableau_Articles_Connexes(ARTICLES){!id_article}{id_mot}>[(#REM)Pour chaque article qui a ce mot clé] <?php # Un peu de PHP. # on incrémente le compteur de pertinence: # $pertinence est un tableau qui contient pour chaque id_article # un compteur du nombre de mots-clés communs $pertinence['[(#ID_ARTICLE|texte_script)]']++; ?> </BOUCLE_Tableau_Articles_Connexes> </BOUCLE_Mots_De_Article_Contexte> <?php # Un peu de PHP. # on trie le tableau $pertinence[ ] afin que # les id_articles qui ont le plus de mots-clés # communs avec l'article du contexte soient en 1er arsort ($pertinence); $i=0; $maxarticles=20; $maxcommun=4; while (list($ks,$vs) = each($pertinence)) { #$ks contient id_article, $vs sa pertinence if ($vs > maxcommun-1) { $i++; if ($i==maxarticles) break; ?> <ul> <BOUCLE_Articles_Connexes(ARTICLES)>[(#REM) Liste absolument tous les articles] <?php # Un peu de PHP. # Vérifie si l'article est celui du tableau # Si oui, on effectue les actions de la boucle, sinon # on passe à l'article suivant. # ce petit morceau de PHP est en fait une condition de boucle # comparable à {id_article=$ks} qui ne fonctionne pas dans Spip if ('[(#ID_ARTICLE|texte_script)]'==$ks) { ?> <li> <a href="#URL_ARTICLE" [title="(#DESCRIPTIF|textebrut|couper{200})"]>[(#TITRE|supprimer_numero)]</a> <B_Mots_Communs> Nombre de mots-clés communs : [(#_Mots_Communs:TOTAL_BOUCLE)]. (Liste des mots-clés communs : [(#REM) Remplacer "_Contexte_Article" par le non de la boucle contexte de l'article] <BOUCLE_Mots_Communs(MOTS){id_article=#_Contexte_Article:ID_ARTICLE}{id_article}{id_mot!=35}{par type}{par titre}{" - "}> <a href="#URL_MOT" [title="(#DESCRIPTIF|textebrut|couper{200})"]>[(#TITRE|supprimer_numero)]</a> </BOUCLE_Mots_Communs> ) </li> <?php # Un peu de PHP. # fin de la condition {id_article=$ks} # on passe donc à l'article suivant } ?> </BOUCLE_Articles_Connexes> <?php # Un peu de PHP. # fin de cet id_article ($ks) # on passe donc au suivant } }; ?> </ul></code></pre></div>