Maison  >  Questions et réponses  >  le corps du texte

Stylisez les liens internes de MediaWiki en fonction de la date de la dernière révision de la page.

J'ai un énorme Wikipédia avec beaucoup de pages, dont beaucoup sont obsolètes. Je souhaite appliquer des styles CSS personnalisés à chaque lien en fonction de l'âge de la page liée.

J'ai étudié le code source de MediaWiki et pour chaque lien, je peux obtenir la DBKey à partir du LinkTarget. Le code source peut être consulté ici.

Je recherche un processus qui ressemble essentiellement à ceci :

$dbKey = $target->getDBkey();
$page = find_page_by_title($dbKey);
$last_revision = get_last_revision($page);
// Additional processing based on the date of $last_revision

Alternativement, s'il existe un moyen d'obtenir ces informations à partir de l'API, je pourrais ajouter un extrait JS pour recolorer le lien.

Quelqu'un peut-il m'indiquer des ressources pour y parvenir ?

P粉184747536P粉184747536480 Il y a quelques jours438

répondre à tous(1)je répondrai

  • P粉448130258

    P粉4481302582023-07-21 09:03:48

    Vous pouvez utiliser le hook HtmlPageLinkRendererEnd.

    https://www.mediawiki.org/wiki/Manual:Hooks/HtmlPageLinkRendererEnd

    Ajoutez simplement ce qui suit à votre fichier LocalSettings.php :

    $wgHooks['HtmlPageLinkRendererEnd'][] = function($linkRenderer, $target, $isKnown, &$text, &$attribs, &$ret) {
    
            $title = Title::newFromLinkTarget($target);
            $id = $title->getLatestRevID();
            $revStore = MediaWikiServices::getInstance()->getRevisionStore();
            $date = $revStore->getTimestampFromId( $id );
    
            if ($date > '20230704142055') {
                $attribs['class'] = "old-page";
            }
    
            if ($date > '20230704142070') {
                $attribs['class'] = "newer-page";
            }        
        
        };

    Changez simplement « 20230704142055 » par la date souhaitée ou actuelle.

    Vous devrez peut-être également ajouter ce code en haut de votre fichier php.

    use MediaWiki\MediaWikiServices;
    use Title;

    répondre
    0
  • Annulerrépondre