Extension talk:DynamicPageList (Wikimedia)/de

Moin!

Ich betreibe die MediaWiki-Version: 1.5.7. Die DynamicPageList2 hat bei mir einen Fehler ausgeworfen. Deshalb habe ich diese ("alte") DynamicPageList für mich geringfügig erweitert:


 * Caching ausgeschaltet


 * Sortierung nach Titel
 * Neuer Parameterwert: ordermethod=title


 * Zusatz des Datums der letzten Änderung (hinten dran in Klammern)
 * Neuer Parameter: addpagetoucheddate=true|false (default=false)

--Nicolas 18:30, 3 May 2006 (UTC)

function DynamicPageList( $input ) { global $wgUser; global $wgLang; global $wgContLang; global $wgDLPminCategories, $wgDLPmaxCategories,$wgDLPMinResultCount, $wgDLPMaxResultCount; global $wgDLPAllowUnlimitedResults, $wgDLPAllowUnlimitedCategories; $aParams = array; $bCountSet = false; $sStartList = ''; $sEndList = ''; $sStartItem = ''; $sEndItem = ''; $sOrderMethod = 'categoryadd'; $sOrder = 'descending'; $sRedirects = 'exclude'; $bNamespace = false; $iNamespace = 0; $bSuppressErrors = false; $bShowNamespace = true; $bAddFirstCategoryDate = false; $bAddPageTouchedDate = false; $aCategories = array; $aExcludeCategories = array; $aParams = explode("\n", $input); $parser = new Parser; // INVALIDATE CACHE $parser->disableCache; foreach($aParams as $sParam) {     $aParam = explode("=", $sParam); if( count( $aParam ) < 2 ) continue; $sType = trim($aParam[0]); $sArg = trim($aParam[1]); if ($sType == 'category') {       $title = Title::newFromText( $parser->transformMsg($sArg, null) ); if( is_null( $title ) ) continue; $aCategories[] = $title; }     else if ($sType == 'notcategory') {       $title = Title::newFromText( $parser->transformMsg($sArg, null) ); if( is_null( $title ) ) continue; $aExcludeCategories[] = $title; }     else if ('namespace' == $sType) {       $ns = $wgContLang->getNsIndex($sArg); if (NULL != $ns) { 	 $iNamespace = $ns; $bNamespace = true; } 	else { 	 $iNamespace = intval($sArg); if ($iNamespace >= 0) { 	   $bNamespace = true; } 	 else { 	   $bNamespace = false; } 	}     }      else if ('count' == $sType) {       //ensure that $iCount is a number; $iCount = IntVal( $sArg ); $bCountSet = true; }     else if ('mode' == $sType) { 	switch ($sArg) { 	case 'none': $sStartList = ''; $sEndList = ''; $sStartItem = ''; $sEndItem = ' '; break; case 'ordered': $sStartList = ''; $sEndList = ''; $sStartItem = ''; $sEndItem = ''; break; case 'unordered': default: $sStartList = ''; $sEndList = ''; $sStartItem = ''; $sEndItem = ''; break; }     }      else if ('order' == $sType) {       switch ($sArg) { 	case 'ascending': $sOrder = 'ascending'; break; case 'descending': default: $sOrder = 'descending'; break; }     }      else if ('ordermethod' == $sType) { 	switch ($sArg) {        case 'title': $sOrderMethod = 'title'; break; case 'lastedit': $sOrderMethod = 'lastedit'; break; case 'categoryadd': default: $sOrderMethod = 'categoryadd'; break; }     }      else if ('redirects' == $sType) {     	switch ($sArg) {     	case 'include': $sRedirects = 'include'; break; case 'only': $sRedirects = 'only'; break; case 'exclude': default: $sRedirects = 'exclude'; break; }     }      else if ('suppresserrors' == $sType) { 	if ('true' == $sArg) $bSuppressErrors = true; else $bSuppressErrors = false; }     else if ('addfirstcategorydate' == $sType) {       if ('true' == $sArg) $bAddFirstCategoryDate = true; else $bAddFirstCategoryDate = false; }      else if ('addpagetoucheddate' == $sType) {                                                 if ('true' == $sArg) $bAddPageTouchedDate = true; else $bAddPageTouchedDate = false; }                                                else if ('shownamespace' == $sType) { 	if ('false' == $sArg) $bShowNamespace = false; else $bShowNamespace = true; }   }    $iCatCount = count($aCategories); $iExcludeCatCount = count($aExcludeCategories); $iTotalCatCount = $iCatCount + $iExcludeCatCount; if ($iCatCount < 1 && false == $bNamespace) {     if (false == $bSuppressErrors) return htmlspecialchars( wfMsg( 'dynamicpagelist_noincludecats' ) ); // "!!no included categories!!"; else return ''; }   if ($iTotalCatCount < $wgDLPminCategories) {     if (false == $bSuppressErrors) return htmlspecialchars( wfMsg( 'dynamicpagelist_toofewcats' ) ); // "!!too few categories!!"; else return ''; }   if ( $iTotalCatCount > $wgDLPmaxCategories && !$wgDLPAllowUnlimitedCategories ) {     if (false == $bSuppressErrors) return htmlspecialchars( wfMsg( 'dynamicpagelist_toomanycats' ) ); // "!!too many categories!!"; else return ''; }   if ($bCountSet) {     if ($iCount < $wgDLPMinResultCount) $iCount = $wgDLPMinResultCount; if ($iCount > $wgDLPMaxResultCount) $iCount = $wgDLPMaxResultCount; }   else {     if (!$wgDLPAllowUnlimitedResults) {       $iCount = $wgDLPMaxResultCount; $bCountSet = true; }   }    //disallow showing date if the query doesn't have an inclusion category parameter if ($iCatCount < 1) $bAddFirstCategoryDate = false; //build the SQL query $dbr =& wfGetDB( DB_SLAVE ); $sPageTable = $dbr->tableName( 'page' ); $categorylinks = $dbr->tableName( 'categorylinks' ); // Original SQL: // $sSqlSelectFrom = "SELECT page_namespace, page_title, c1.cl_timestamp FROM $sPageTable"; $sSqlSelectFrom = "SELECT page_namespace, page_title, c1.cl_timestamp, page_touched FROM $sPageTable"; if (true == $bNamespace) $sSqlWhere = ' WHERE page_namespace='.$iNamespace.' '; else $sSqlWhere = ' WHERE 1=1 '; switch ($sRedirects) {     case 'only': $sSqlWhere .= ' AND page_is_redirect = 1 '; break; case 'exclude': $sSqlWhere .= ' AND page_is_redirect = 0 '; break; }   $iCurrentTableNumber = 0; for ($i = 0; $i < $iCatCount; $i++) { $sSqlSelectFrom .= " INNER JOIN $categorylinks AS c". ($iCurrentTableNumber+1); $sSqlSelectFrom .= ' ON page_id = c'.($iCurrentTableNumber+1).'.cl_from'; $sSqlSelectFrom .= ' AND c'.($iCurrentTableNumber+1).'.cl_to='. $dbr->addQuotes( $aCategories[$i]->getDbKey ); $iCurrentTableNumber++; }   for ($i = 0; $i < $iExcludeCatCount; $i++) { $sSqlSelectFrom .= " LEFT OUTER JOIN $categorylinks AS c". ($iCurrentTableNumber+1); $sSqlSelectFrom .= ' ON page_id = c'.($iCurrentTableNumber+1).'.cl_from'; $sSqlSelectFrom .= ' AND c'.($iCurrentTableNumber+1).'.cl_to='. $dbr->addQuotes( $aExcludeCategories[$i]->getDbKey ); $sSqlWhere .= ' AND c'.($iCurrentTableNumber+1).'.cl_to IS NULL'; $iCurrentTableNumber++; }    switch ($sOrderMethod) {                                                     case 'lastedit': $sSqlWhere .= ' ORDER BY page_touched '; break; case 'title': $sSqlWhere .= ' ORDER BY page_title '; break; case 'categoryadd': $sSqlWhere .= ' ORDER BY c1.cl_timestamp '; break; }                                                 /* Original was: if ('lastedit' == $sOrderMethod) $sSqlWhere .= ' ORDER BY page_touched '; else $sSqlWhere .= ' ORDER BY c1.cl_timestamp '; */   if ('descending' == $sOrder) $sSqlOrder = 'DESC'; else $sSqlOrder = 'ASC'; $sSqlWhere .= $sSqlOrder; if ($bCountSet) {     $sSqlWhere .= ' LIMIT '. $iCount; }   //DEBUG: output SQL query //$output .= 'QUERY: ['. $sSqlSelectFrom. $sSqlWhere. "] ";       // process the query $res = $dbr->query($sSqlSelectFrom . $sSqlWhere); $sk =& $wgUser->getSkin; if ($dbr->numRows( $res ) == 0) {     if (false == $bSuppressErrors) return htmlspecialchars( wfMsg( 'dynamicpagelist_noresults' ) ); else return ''; }   //start unordered list $output .= $sStartList. "\n"; //process results of query, outputing equivalent of Article</li> for each result, //or something similar if the list uses other startlist/endlist while ($row = $dbr->fetchObject( $res ) ) { $title = Title::makeTitle( $row->page_namespace, $row->page_title); $output .= $sStartItem; if (true == $bAddFirstCategoryDate) $output .= $wgLang->date($row->cl_timestamp). ': ';     if (true == $bShowNamespace) $output .= $sk->makeKnownLinkObj($title); else $output .= $sk->makeKnownLinkObj($title, htmlspecialchars($title->getText)); if (true == $bAddPageTouchedDate) $output .= ' (' . $wgLang->date($row->page_touched) . ')'; $output .= $sEndItem. "\n"; }
 * Die Änderungen / Ergänzungen sind hier grün hinterlegt: