[Astuce] Lister les articles par catégorie dans l'interface admin
klav
Member
Bonjour à tous,
J'ai modifié le fichier core/admin/index.php de la version blog beta 3 de manière à pouvoir lister les articles par catégorie.
Les catégories vides (ne contenant aucun article) seront également affichées. Ainsi qu'une catégorie "Articles égarés" qui contient tous les articles n'étant plus rattachés à aucune catégorie existante (si la catégorie dans laquelle ils étaient a été supprimée, par exemple).
Cela me permet, en ajoutant un peu de javascript, de déplacer directement les articles d'une catégorie à l'autre à la souris. Ce n'est pas encore totalement fonctionnel, mais vous pouvez voir ce que donne le résultat ici :
http://n.clavaud.free.fr/temp/tests/pluxml/admin.htm
(edit: testé uniquement avec Firefox et IE7 sous WinXP)
Sinon, voici le code de core/admin/index.php modifié (javascript non inclus) :
J'ai modifié le fichier core/admin/index.php de la version blog beta 3 de manière à pouvoir lister les articles par catégorie.
Les catégories vides (ne contenant aucun article) seront également affichées. Ainsi qu'une catégorie "Articles égarés" qui contient tous les articles n'étant plus rattachés à aucune catégorie existante (si la catégorie dans laquelle ils étaient a été supprimée, par exemple).
Cela me permet, en ajoutant un peu de javascript, de déplacer directement les articles d'une catégorie à l'autre à la souris. Ce n'est pas encore totalement fonctionnel, mais vous pouvez voir ce que donne le résultat ici :
http://n.clavaud.free.fr/temp/tests/pluxml/admin.htm
(edit: testé uniquement avec Firefox et IE7 sous WinXP)
Sinon, voici le code de core/admin/index.php modifié (javascript non inclus) :
<?php
# Copyright (c) 2006 Skyline-arts.com. All rights reserved.
include('prepend.php');
if(!empty($_GET['del'])){
$msg = $admin->delArticle($_GET['del']);
header('Location: index.php?&msg='.urlencode($msg).'');
}
include('top.php');
?>
<h2>Liste des articles par catégorie</h2>
<?php
// TRI DES ARTICLES EXISTANTS
// motif pour lister tous les articles
$admin->getMode('admin','/^[0-9]{4}.([0-9]{3}|home|draft)(.[a-z0-9-]*)*.xml$/', $admin->config['bypage_admin']);
$admin->getFiles();
// dans un tableau de catégories
$abc = array();
if ($admin->aCats) {
// dont on initialise à l'avance le contenu (catégories existantes)
// cela permet d'inclure les catégories vides également
foreach($admin->aCats as $cat_num => $cat_info) {
$abc[$cat_info['name']] = array();
}
}
$losts = array(); // articles perdus (dont la catégorie n'existe plus)
$homes = array(); // articles de la page d'accueil
$drafts = array(); // brouillons
// aucun article
if ($admin->uFiles == null) {
}
// au moins un article
else {
$admin->getArticles();
while($admin->result->loop()) {
$article = $admin->result->result[$admin->result->i];
// fait-il partie de la page d'accueil ?
if($admin->result->f('cat_num') == 'home') {
array_push($homes, $article);
}
// ou des brouillons ?
else if ($admin->result->f('cat_num') == 'draft') {
array_push($drafts, $article);
}
// ou d'une catégorie qui n'existe plus?
else if(!isset($admin->aCats[$admin->result->f('cat_num')])) {
array_push($losts, $article);
}
else {
// ou d'une catégorie qui existe?
$catname = $admin->aCats[$admin->result->f('cat_num')]['name'];
// (plus besoin, on a initialisé les valeurs du tableau plus haut pour prendre en compte les catégories vides également)
//if (!isset($abc[$catname])) $abc[$catname] = array();
array_push($abc[$catname], $article);
}
}
// on y ajoute la page d'accueil, les brouillons, les articles perdus
$abc = array("Page d'accueil" => $homes)
+ $abc
+ array("Articles égarés" => $losts)
+ array("Brouillons" => $drafts);
}
// AFFICHAGE DU CONTENU DES CATEGORIES
echo '<ul>';
foreach($abc as $nomCategorie => $listeArticles) {
echo '<li><p>'.$nomCategorie.'</p><ul>';
foreach($listeArticles as $numero => $contenu) {
echo "<li><strong><a href=\"articles.php?p=".$contenu['file_num']."\">".$contenu['title']."</a></strong>
| <a href=\"commentaires.php?p=".$contenu['file_num']."\">".$contenu['nb_com']." commentaire(s)</a> |
".nodir($contenu['filename'])." |
<a href=\"?del=".$contenu['file_num']."\" onclick=\"Check = confirm('Supprimer cet article ?'); if(Check == false) return false;\" class=\"delete\">Suppr.</a></li>\n";
}
echo '</ul></li>';
}
echo '</ul>';
include('foot.php');
?>
(edit : petit oubli de fermeture de balise corrigé) Connectez-vous ou Inscrivez-vous pour répondre.
Réponses
Merci Klav