Pour ceux que ça intéresse, voici une proposition de modifications à faire sur le module news pour pouvoir l'utiliser avec Xoops Tag (un module permettant de mettre des Tags et de faire un nuage de tag).
Versions utilisées :
News -> Version 1.55
Xoops Tag -> Version 1.60
Je me suis basé sur les instructions contenues dans le fichier /modules/tag/sample.php
/* Step 1: add tag input box */
// File: edit.item.php
Première étape , il faut ajouter la possibilité d'indiquer les tag lors de l'édition d'un article.
Pour cela, insérer le code suivant dans le fichier /modules/news/include/storyform.inc après la ligne 101 ( A la fin du bloc //Extra info , juste avant // Manage upload(s) )
// Hack permettant l’utilisation avec le module Xoops Tag
include_once XOOPS_ROOT_PATH."/modules/tag/include/formtag.php";
$sform->addElement(new XoopsFormTag("item_tag", 60, 255, $storyid, $topicid = 0));
Ce code fait apparaître un champs supplémentaire nommé "Tag" quand vous crééz ou éditzez un article, à remplir avec les mots clés souhaités.
/* Step 2: add tag storage after item storage */
// File: submit.item.php
Deuxième étape , on stocke les valeurs saisies dans la base de données
Pour cela, insérer le code suivant dans le fichier /news/submit.php, après la ligne 418 ( après l’instruction $result = $story->store();)
// Hack permettant l’utilisation avec le module Xoops Tag
$tag_handler = xoops_getmodulehandler('tag', 'tag');
$tag_handler->updateByItem($_POST["item_tag"], $story->storyid(), $xoopsModule->getVar("dirname"), $catid =0);
/* Step 3: define functions to build info of tagged items */
// File: /modules/tag/plugin/mymodule.php OR /modules/mymodule/include/plugin.tag.php
Troisième étape, créer le plugin dans le module Tag
Pour cela, dans /modules/tag/plugin, dupliquez un des plugins déjà réalisé, par exemple newbb.php et créer un fichier qui s'appelle news.php
Dans le fichier news.php, remplacez la fonction function newbb_tag_iteminfo(&$items) par la fonction news_tag_iteminfo(&$items)
function news_tag_iteminfo(&$items)
{
if(empty($items) || !is_array($items)){
return false;
}
$items_id = array();
foreach(array_keys($items) as $cat_id){
// Some handling here to build the link upon catid
// catid is not used in newbb, so just skip it
foreach(array_keys($items[$cat_id]) as $item_id){
// In newbb, the item_id is "topic_id"
// In news, the item_id is "storyid"
$items_id[] = intval($item_id);
}
}
include_once XOOPS_ROOT_PATH.'/modules/news/class/class.newsstory.php';
foreach(array_keys($items) as $cat_id){
foreach(array_keys($items[$cat_id]) as $item_id){
$article = new NewsStory($item_id);
$items[$cat_id][$item_id] = array(
"title" => $article->title(),
"uid" => $article->uid(),
"link" => "article.php?storyid={$item_id}",
"time" => $article->created(),
"tags" => tag_parse_tag($article->keywords()),
"content" => $article->hometext(),
);
}
}
unset($items_obj);
}
Je n'ai pas touché pour l'instant à la deuxième fonction du fichier plugin mais il faut tout de même la renommer en function news_tag_synchronization($mid)
Je n'ai pas réalisé les étapes 4,5,6 du ficher sample.php car pour l'instant cela me suffit : j'utilise le bloc du module Tag pour l'affichage.
Pour voir ci cela fonctionne, rendez-vous sur la page d'accueil du module Tag
Voilà, ça fonctionne chez moi mais n'hésitez pas si vous avez des remarques ou d'autres propositions à faire.