Liste des pages modifiées récemment

Cet article explique comment obtenir une liste de page récemment modifiées comme celle de ce site ; c’est-à-dire avec la date de la modification et le fil d’Ariane jusqu’à la page. Le nom de la page n’est à mon goût pas suffisant, le contexte est primordial.

Pour commencer, il faut ajouter le plugin Menu/Sitemap à la page de votre site :

Choisir ensuite le type de menu Recently updated pages et définir le Starting point à la racine de votre site.

Nous allons maintenant modifier le comportement de génération du menu pour que les pages soient préfixées par la date et « suffixées » par le fil d’Ariane. Ajouter le code suivant à votre templateTS :

    ## Customize the list of page recently updated
page.includeLibs.menustuff = fileadmin/menuFunc.inc
tt_content.menu.20.5 {
    excludeUidList = current
        # number of items to show + number of uid in excludeUidList
    special.limit = 11
        # pages must have been updated within the last three days (3600*24*3)
    special.maxAge = 3600*24*3
    wrap = <ul id="recentlyUpdated">|</ul>
    1.noBlur = 1
    1.NO {
        stdWrap.field = subtitle // title
        ATagTitle.field = description // subtitle // title
 
            ## Prepend the date
        before.field = SYS_LASTCHANGED
        before.strftime = %d.%m.%Y
        before.wrap = <div class="date">|&nbsp;:</div>&nbsp;
 
        after.cObject = USER
        after.cObject {
            userFunc = user_menuFunc->rootline
 
            range = 1 | -2
            field = nav_title // title
            wrap = <div class="breadcrumb">Localisation&nbsp;:&nbsp;|</div>
        }
    }
}

Créer maintenant le fichier fileadmin/menuFunc.inc :

<?php
class user_menuFunc {
        // The backReference to the mother cObj object set at call time
    var $cObj;
 
    /**
     * Call it from a USER cObject with 'userFunc = user_menuFunc->rootline'
     */
    function rootline($content, $conf) {
            // Debug informations
        //t3lib_div::debug($this->cObj->data);
        //t3lib_div::debug($conf);
 
            // Retrieve the UID of the updated page and the language
        $data = $this->cObj->data;
        $uid = $data['uid'];
        $language = $data['_PAGES_OVERLAY'] ? $data['_PAGES_OVERLAY'] : 0;
 
            // Get its rootline
        $GLOBALS['TSFE']->sys_page = t3lib_div::makeInstance('t3lib_pageSelect');
        $rootline = $GLOBALS['TSFE']->sys_page->getRootLine($uid,'');
        //t3lib_div::debug($rootline);
 
        $begin_end = explode('|', $conf['range']);
        if (!t3lib_div::testInt($begin_end[0])) {intval($begin_end[0]);}
        if (!t3lib_div::testInt($begin_end[1])) {$begin_end[1]=-1;}
 
        $field = $conf['field'];
        $field = $field ? $field : 'title';
        $content = '';
 
        $upper_limit = min(count($rootline), count($rootline) + $begin_end[1]);
        for ($i = $begin_end[0]; $i < $upper_limit; $i++) {
            $rootline_item = $rootline[$i];
 
            $page_uid = $rootline_item['uid'];
                // Is there a translation to be found?
            if ($language) {
                $item = $GLOBALS['TSFE']->sys_page->getPageOverlay($page_uid, $language);
                if ($item) $rootline_item = $item;
            }
 
            $title_fields = explode('//', $field);
                // Find the title field to be used
            foreach ($title_fields as $f) {
                $f = trim($f);
                if ($rootline_item[$f]) break;
            }
 
            if ($content) $content .= ' / ';
            $link = tslib_pibase::pi_linkToPage($rootline_item[$f], $page_uid);
            $content .= $link;
        }
 
            // Return the wrapped rootline
        $wrap = $conf['wrap'];
        return str_replace('|', $content, $wrap);
    }
}
?>

Il ne vous reste plus qu’à adapter votre feuille de styles CSS pour changer la taille des différents éléments !

Flattr