ich nutze eine Artikelliste Code:
Code: Alles auswählen
<?php
// Includes
//removed functions.include.UTF8decoding.php, as was only needed for PHP <= 4.
//removed older versions of data replacement and php check, as CON 4.9 is not running with php lower than 5.2.3
//moved all include-files to module/php folder which makes transfering this module easier
cInclude('module', 'class.datetimereplacelang.php');
cInclude('module', 'functions.alr.php');
//in case thumbs are not displayed properly, this might help:
putenv("MAGICK_THREAD_LIMIT=1");
// initialize
$tpl = cSmartyFrontend::getInstance();
$articleList = array();
$listObj = new stdClass();
// Prepare module info. Needed later to check if defined default smarty template is a real file
$mod = new cApiModule($cCurrentModule);
$tplpath = $cfgClient[$client]["path"]["frontend"]."data/modules/".$mod->get("alias")."/template/";
$bDebug = false;
$iDataStart = 1000; // Startwert fuer dynamisch generierte CMS_VAR Elemente !!!Muss im Input gleich sein!!!
$lCount = 0;
// Base settings
/**
* Base information:
* $aSettings['ArtListHeadline']: Value for article list headline
* $aSettings['Elements']: Number of expected, additional elements from each article
* $aSettings['ArticlePerPage']: Number of articles per page (0: show all)
* $aSettings['k'.$i]['ElementType']: Per Element: Type of Element: Text, Image or ExtractedImage
* $aSettings['k'.$i]['ElementWidth']: Per Element: Text length or image width (-> recycling ...)
* $aSettings['k'.$i]['ElementHeight']: Per Element: Image width
* $aSettings['k'.$i]['DontStripTags'] Per Element: Strip tags or not
* $aSettings['k'.$i]['ElementAllowedTags'] Per Element: Allowed tags
*/
unset ($aSettings);
$aSettings = array();
$oLang = new cApiLanguage();
$oLang->loadByPrimaryKey($lang);
$aSettings['DateLanguage'] = $oLang->getProperty("dateformat", "locale");
$aSettings['ShowModul'] = ( "CMS_VALUE[0]" == 'true' ) ? true : false ;
$aSettings['Category'] = str_replace('cat_', '', "CMS_VALUE[100]" );
$aSettings['Category'] = ( $aSettings['Category'] <= 0 ) ? 0 : $aSettings['Category'];
$aSettings['AddCats'] = str_replace('cat_','', "CMS_VALUE[106]");
$aSettings['CatTypeSel'] = ( "CMS_VALUE[105]" == '' || ($aSettings['AddCats'] == '' && "CMS_VALUE[105]" == 'selected') ) ? 'none' : "CMS_VALUE[105]";
$aSettings['ArticleCount'] = ( "CMS_VALUE[110]" < 0) ? 0 : "CMS_VALUE[110]";
$aSettings['SortBy'] = ( "CMS_VALUE[115]" == '' ) ? "catart.idart" : "CMS_VALUE[115]";
$aSettings['SortDir'] = "CMS_VALUE[116]";
$aSettings['ShowStart'] = ( "CMS_VALUE[120]" == 'startinclude' ) ? true : false ;
$aSettings['ShowOnlyStart'] = ( "CMS_VALUE[120]" == 'startonly' ) ? true : false ;
$aSettings['ShowCurrentArticle'] = ( "CMS_VALUE[123]" == 'true' ) ? true : false ;
$aSettings['ArtListHeadline'] = "CMS_VALUE[301]";
$aSettings['DefaultTextArticle'] = str_replace('art_', '', "CMS_VALUE[306]");
$aSettings['DefaultTextFree'] = "CMS_VALUE[307]";
$aSettings['OverviewLink'] = "CMS_VALUE[311]";
$aSettings['OverviewLinkText'] = ( "CMS_VALUE[312]" == "") ? mi18n("Link to overview") : "CMS_VALUE[312]" ;
$aSettings['DateFormat'] = ( "CMS_VALUE[316]" == "") ? "d.m" : "CMS_VALUE[316]" ;
$aSettings['DateChoice'] = "CMS_VALUE[317]";
$aSettings['PaginationType'] = "CMS_VALUE[330]";
$aSettings['ArticlePerPage'] = ( $aSettings['PaginationType'] != '' && "CMS_VALUE[331]" >= 2) ? "CMS_VALUE[331]" : 1;
$aSettings['PaginationType05MaxPages'] = ( !is_numeric("CMS_VALUE[332]") || "CMS_VALUE[332]" == '' || "CMS_VALUE[332]" <= 3 ) ? 3 : "CMS_VALUE[332]";
$aSettings['UseUTF8Decoding'] = ( "CMS_VALUE[340]" == 'true' ) ? true : false ;
$aSettings['HeadlineIdentifier'] = "CMS_VALUE[510]";
$aSettings['HeadlineLength'] = ( !is_numeric("CMS_VALUE[511]") || "CMS_VALUE[511]" < 0) ? 0 : "CMS_VALUE[511]";
$aSettings['UseSummary'] = ( "CMS_VALUE[516]" == 'true' ) ? true : false ;
$aSettings['SummaryWidth'] = ( !is_numeric("CMS_VALUE[515]") || "CMS_VALUE[515]" < 0) ? 0 : "CMS_VALUE[515]";
$aSettings['UsePageTitle'] = ( "CMS_VALUE[521]" == 'true' ) ? true : false ;
$aSettings['PageTitleWidth'] = ( !is_numeric("CMS_VALUE[520]") || "CMS_VALUE[520]" < 0) ? 0 : "CMS_VALUE[520]";
$aSettings['Elements'] = ( !is_numeric("CMS_VALUE[525]") || "CMS_VALUE[525]" < 0) ? 0 : "CMS_VALUE[525]";
$aSettings['CurrentPage'] = ( !is_numeric($_REQUEST['page']) || !isset($_REQUEST['page']) ) ? 1 : $_REQUEST['page'];
if ( $aSettings['ShowOnlyStart'] ) $aSettings['ShowStart'] = true;
$aSettings['Template'] = "CMS_VALUE[125]";
if ( $aSettings['ShowModul'] ) {
// Client Cache loeschen um auf jeden Fall alle Aenderungen an Inhalten zu beruecksichtigen
// Es wird explizit nur der content-Ordner geloescht um zu verhindern, dass es Fehler bei der Darstellung von Bildern gibt
cInclude('classes', 'class.purge.php');
$oPurge = new cSystemPurge($db, $cfg, $cfgClient);
$oPurge->clearClientCache($iClientId, 'cache/content/');
// Detail settings
if ($aSettings['Elements'] > 0) {
for ($i = 1; $i <= $aSettings['Elements']; $i++) {
$iElementType = $iDataStart + ($i * 10);
$iElementIdentifier = $iElementType + 1;
$iElementWidth = $iElementType + 2;
$iElementHeight = $iElementType + 3;
$iElementDontStripTags = $iElementType + 3;
$iElementAllowedTags = $iElementType + 4;
$aSettings['k'.$i] = array();
$aSettings['k'.$i]['ElementType'] = "CMS_VALUE[$iElementType]"; // Text, Image, ExtractedImage, FixedDate
$aSettings['k'.$i]['Identifier'] = "CMS_VALUE[$iElementIdentifier]";
// Der obige Wert muss hier nochmal umgebogen werden, weil im Inputbereich der QueryString in der functions.input.helpr.gw.php leider geändert werden musste.
$aSettings['k'.$i]['Identifier'] = str_replace("tblDataidtype", "tblData.idtype = '", $aSettings['k'.$i]['Identifier']);
$aSettings['k'.$i]['Identifier'] = str_replace("tblDatatypeid", "' AND tblData.typeid = '", $aSettings['k'.$i]['Identifier']);
$aSettings['k'.$i]['Identifier'] = $aSettings['k'.$i]['Identifier']."'";
$aSettings['k'.$i]['ElementWidth'] = "CMS_VALUE[$iElementWidth]"; // Textlength or ImageWidth
$aSettings['k'.$i]['ElementHeight'] = "CMS_VALUE[$iElementHeight]";
$aSettings['k'.$i]['DontStripTags'] = ("CMS_VALUE[$iElementDontStripTags]" == 'true' ) ? true : false ;
$aSettings['k'.$i]['ElementAllowedTags'] = ("CMS_VALUE[$iElementAllowedTags]" != '') ? '\''."CMS_VALUE[$iElementAllowedTags]".'\'' : '';
// Check detail settings
if ($aSettings['k'.$i]['ElementType'] == '') $aSettings['k'.$i]['ElementType'] == 'Text';
if ($aSettings['k'.$i]['ElementType'] == 'Text') {
$aSettings['ElementHeight'] = 0;
if (!is_numeric($aSettings['k'.$i]['ElementWidth']) || $aSettings['k'.$i]['ElementWidth'] < 0) {
$aSettings['k'.$i]['ElementWidth'] = 0;
}
} elseif (!is_numeric($aSettings['k'.$i]['ElementWidth']) || $aSettings['k'.$i]['ElementWidth'] <= 0 ||
!is_numeric($aSettings['k'.$i]['ElementHeight']) || $aSettings['k'.$i]['ElementHeight'] <= 0) {
$aSettings['k'.$i]['ElementWidth'] = 0;
$aSettings['k'.$i]['ElementHeight'] = 0;
}
if (strlen($aSettings['Identifier']) > 50) $aSettings['Identifier'] = '';
} // end for
}
unset ($iDataStart);
unset ($iElementType);
unset ($iElementIdentifier);
unset ($iElementWidth);
unset ($iElementHeight);
unset ($iElementDontStripTags);
unset ($iElementAllowedTags);
//if ($aSettings['Category'] !== '0' && $aSettings['HeadlineIdentifier'] !== '') {
if ($aSettings['Category'] !== '0') {
$db2 = cRegistry::getDb();
// Specifying search categories
$sSelCats = '"'.$aSettings['Category'].'"';
// Adding categories "below" primary category
switch ($aSettings['CatTypeSel']) {
case 'below':
$lCatLevel = -1;
$sql = 'SELECT'."\n".
' a.idcat AS idcat,'."\n".
' b.level AS level'."\n".
'FROM'."\n".
' '.$cfg['tab']['cat'].' a,'."\n".
' '.$cfg['tab']['cat_tree'].' b'."\n".
'WHERE'."\n".
' a.idcat = b.idcat'."\n".
'ORDER BY'."\n".
' b.idtree';
$db2->query($sql);
while($db2->nextRecord()) {
if ($db2->f('idcat') == $aSettings['Category'])
$lCatLevel = $db2->f('level');
elseif ($lCatLevel > -1 && $db2->f('level') > $lCatLevel)
$sSelCats .= ',"'.$db2->f('idcat').'"';
elseif ($db2->f('level') <= $lCatLevel)
break;
} // end while
break;
case 'select':
$aCats = explode(",", $aSettings["AddCats"] ); // http://forum.contenido.org/viewtopic.php?p=149395#p149395
foreach ($aCats as $value)
if (is_numeric($value))
$sSelCats .= ',"'.$value.'"';
break;
default:
} // end switch
// prepare alternative inputs:
if ($aSettings['HeadlineIdentifier'] != '' ) {
$aSettings['HeadlineIdentifier'] = str_replace("tblDataidtype", "tblData.idtype = '", $aSettings['HeadlineIdentifier']);
$aSettings['HeadlineIdentifier'] = str_replace("tblDatatypeid", "' AND tblData.typeid = '", $aSettings['HeadlineIdentifier']);
$addsql01 = ' tblData.value AS headline,'."\n";
$addsql02 = $cfg['tab']['content'].' AS tblData,'."\n";
$addsql04 = 'AND '."\n".' tblData.idartlang != catlang.startidartlang ';
$addsql05 = 'AND '."\n".' tblData.idartlang = catlang.startidartlang ';
}
$sql = 'SELECT'."\n".
' artlang.author AS author,'."\n".
$addsql01.
' artlang.pagetitle AS pagetitle,'."\n".
' artlang.summary AS summary,'."\n".
' artlang.idart AS idart,'."\n".
' artlang.idart AS idartlang,'."\n".
' artlang.lastmodified AS lastmodified,'."\n".
' artlang.modifiedby AS autor,'."\n".
' artlang.created AS created,'."\n".
' artlang.published AS published,'."\n".
' artlang.idartlang AS idartlang,'."\n".
' catlang.name AS category,'."\n".
' catlang.startidartlang AS startid,'."\n".
' catart.is_start AS isstart,'."\n".
' catart.idcat AS idcat,'."\n".
' catart.idcatart AS idcatart'."\n".
'FROM'."\n".
' '.$cfg['tab']['cat_art'].' AS catart,'."\n".
' '.$cfg['tab']['art_lang'].' AS artlang,'."\n".
$addsql02.
' '.$cfg['tab']['cat_lang'].' AS catlang'."\n".
'WHERE'."\n".
' catart.idcat IN ('.$sSelCats.') AND'."\n".
' artlang.idlang = '.$lang.' AND'."\n".
//$addsql03.
' catlang.idlang = artlang.idlang AND'."\n".
' catlang.idcat = catart.idcat AND'."\n".
' artlang.idart = catart.idart AND'."\n".
' artlang.online = 1 ';
if ( !$aSettings['ShowStart'] ) $sql .= 'AND '."\n".' artlang.idartlang != catlang.startidartlang ' . $addsql04 ;
if ( $aSettings['ShowOnlyStart'] ) $sql .= 'AND '."\n".' artlang.idartlang = catlang.startidartlang ' .$addsql05 ;
if ( $aSettings['ShowCurrentArticle'] ) $sql .= 'AND'."\n".' artlang.idart <> ' . $idart . ' ';
if ($aSettings['HeadlineIdentifier'] != '' ) {
$sql .= 'AND tblData.idartlang = artlang.idartlang '."\n";
$sql .= 'AND '."\n".$aSettings['HeadlineIdentifier']."'";
}
// Sort by
$sql .= "\n".'ORDER BY'."\n".
' '.$aSettings['SortBy']."\n".
' '.$aSettings['SortDir']."\n";
// LIMIT
if ($aSettings['ArticleCount'] > 0) $sql .= 'LIMIT 0, '.$aSettings['ArticleCount'];
if ($bDebug) {
echo '<pre>'.$sql.'</pre>', chr(10);
}
// execute query
$db2->query($sql);
$lCount = $db2->numRows();
if ($lCount > 0) {
if (!is_object($db3)) $db3 = cRegistry::getDb();
if (!is_object($db4)) $db4 = cRegistry::getDb();
if (!is_object($db5)) $db5 = cRegistry::getDb();
//falsche GET-Werte für "page" auf 0 setzen, Kurzcheck:
if ( $aSettings['CurrentPage'] > ceil( $lCount / $aSettings['ArticlePerPage'] ) ) $aSettings['CurrentPage'] = 1;
if ($aSettings['ArticlePerPage'] > 0 && $aSettings['PaginationType'] != '' ) {
$lStartCount = ($aSettings['CurrentPage'] - 1) * $aSettings['ArticlePerPage'];
$lEndCount = (($aSettings['CurrentPage'] - 1) * $aSettings['ArticlePerPage']) + $aSettings['ArticlePerPage'];
if ($lEndCount > $lCount) $lEndCount = $lCount;
} else {
$lStartCount = 0;
$lEndCount = $lCount;
}
$lRow = 0;
$i = 0;
while ($db2->nextRecord())
{
if ($lRow >= $lStartCount && $lRow < $lEndCount)
{
$article = array();
//generate first values
$article['number'] = $lRow+1 ;
$article['category'] = urldecode($db2->f('category'));
$article['categoryid'] = urldecode($db2->f('idcat'));
//article link, relative to get to the listed article
if ($db2->f('startid') == $db2->f('idartlang') || $db2->f('isstart')) {
$aParams = array('lang' => $lang, 'idcat' => $db2->f('idcat'));
} else {
$aParams = array('lang' => $lang, 'idcat' => $db2->f('idcat'), 'idart' => $db2->f('idart'));
}
$article['link'] = cUri::getInstance()->buildRedirect($aParams);
// new: create link to category in which article is located in
$aParams = array('lang' => $lang, 'idcat' => $db2->f('idcat'));
$article['linkcat'] = cUri::getInstance()->buildRedirect($aParams);
//Generate ALL date values possible and store them in array
$oDate = new DateTimeReplaceLang( $db2->f('lastmodified') );
$article['lastmodified_long'] = $oDate->format($aSettings['DateFormat'], $aSettings['DateLanguage'], 'long');
$article['lastmodified_short'] = $oDate->format($aSettings['DateFormat'], $aSettings['DateLanguage'], 'short');
$oDate = new DateTimeReplaceLang( $db2->f('created') );
$article['created_long'] = $oDate->format($aSettings['DateFormat'], $aSettings['DateLanguage'], 'long');
$article['created_short'] = $oDate->format($aSettings['DateFormat'], $aSettings['DateLanguage'], 'short');
$oDate = new DateTimeReplaceLang( $db2->f('published') );
$article['published_long'] = $oDate->format($aSettings['DateFormat'], $aSettings['DateLanguage'], 'long');
$article['published_short'] = $oDate->format($aSettings['DateFormat'], $aSettings['DateLanguage'], 'short');
$article['published'] = ($aSettings['DateFormat'] == 'F j, Y' || $aSettings['DateFormat'] == 'j F Y') ? $article['published_long'] : $article['published_short'];
$article['created'] = ($aSettings['DateFormat'] == 'F j, Y' || $aSettings['DateFormat'] == 'j F Y') ? $article['created_long'] : $article['created_short'];
$article['lastmodified'] = ($aSettings['DateFormat'] == 'F j, Y' || $aSettings['DateFormat'] == 'j F Y') ? $article['lastmodified'] : $article['lastmodified'];
$article['date'] = ($aSettings['DateChoice'] != '') ? $article[$aSettings['DateChoice']] : '';
//get author's real name
$author = new cApiUser();
$author->loadUserByUsername( $db2->f('author'));
$article["author"] = text2utf8( $author->getRealName( ), false, $aSettings['UseUTF8Decoding'] );
// Generate Summary
$article['summary_full'] = text2utf8( $db2->f('summary') , false , $aSettings['UseUTF8Decoding'] );
$article['summary_trimmed'] = capiStrTrimAfterWord($article['summary_full'], $aSettings['SummaryWidth']).'...';
$article['summary'] = ($aSettings['SummaryWidth'] > 0 && strlen($article['summary_full'] ) > $aSettings['SummaryWidth'] ) ? $article['summary_trimmed'] : $article['summary_full'] ;
// Generate pagetitle
$article['pagetitle_full'] = text2utf8( $db2->f('pagetitle') , false , $aSettings['UseUTF8Decoding'] );
$article['pagetitle_trimmed'] = capiStrTrimAfterWord($article['pagetitle_full'], $aSettings['PageTitleWidth']).'...';
$article['pagetitle'] = ($aSettings['PageTitleWidth'] > 0 && strlen($article['pagetitle_full'] ) > $aSettings['PageTitleWidth'] ) ? $article['pagetitle_trimmed'] : $article['pagetitle_full'] ;
// Generate headline
$article['headline_full'] = text2utf8( $db2->f('headline') , false , $aSettings['UseUTF8Decoding'] );
$article['headline_trimmed'] = capiStrTrimAfterWord($article['headline_full'], $aSettings['HeadlineLength']).'...';
$article['headline'] = ($aSettings['HeadlineLength'] > 0 && strlen($article['headline_full'] ) > $aSettings['HeadlineLength']) ? $article['headline_trimmed'] : $article['headline_full'] ;
// Replace headline with summary or page title if clicked
if ( $aSettings['UseSummary'] ) $article['headline'] = $article['summary'] ;
if ( $aSettings['UsePageTitle'] ) $article['headline'] = $article['pagetitle'] ;
//go through all chosen elements defined by user one by one
if ($aSettings['Elements'] > 0) {
$sql = 'SELECT'."\n".
' tblData.value AS value,'."\n".
' tblData.idtype AS idtype,'."\n".
' tblData.typeid AS typeid'."\n".
'FROM'."\n".
' '.$cfg['tab']['cat_art'].' AS tblCatArt,'."\n".
' '.$cfg['tab']['art_lang'].' AS tblArtLang,'."\n".
' '.$cfg['tab']['content'].' AS tblData'."\n".
'WHERE'."\n".
' tblData.idartlang = tblArtLang.idartlang AND'."\n".
' tblArtLang.idlang = "'.$lang.'" AND'."\n".
' tblArtLang.idart = tblCatArt.idart AND'."\n".
' tblCatArt.idcatart = "'.$db2->f('idcatart').'" AND'."\n".
' ('."\n";
$sql_items = '';
for ($k = 1; $k <= $aSettings['Elements']; $k++) {
if ($aSettings['k'.$k]['Identifier'] != '' && $aSettings['k'.$k]['Identifier'] != 'none') {
if ($sql_items != '') {
$sql_items .= ' OR'."\n".
' ('.$aSettings['k'.$k]['Identifier'].')';
} else {
$sql_items = ' ('.$aSettings['k'.$k]['Identifier'].')';
}
}
} // end for
$sql .= $sql_items."\n".' )';
if ($bDebug) {
echo '<pre>'.$sql.'</pre>', chr(10);
}
// execute query
$db3->query($sql);
while ($db3->nextRecord()) {
$sTypeIdentifier = "tblData.idtype = '".$db3->f('idtype')."' AND tblData.typeid = '".$db3->f('typeid')."'";
/**
* Note: The TypeIdentifier for one item may be the same as for another item.
* Therefore, we are storing the content everywhere as needed
*/
for ($k = 1; $k <= $aSettings['Elements']; $k++) {
if ($sTypeIdentifier == $aSettings['k'.$k]['Identifier']) {
switch (TRUE) {
case ($aSettings['k'.$k]['ElementType'] == 'Image' || $aSettings['k'.$k]['ElementType'] == 'ExtractedImage'):
$sql = '';
if ($aSettings['k'.$k]['ElementType'] == 'Image') {
$sql = 'SELECT idupl, dirname, filename FROM '.$cfg['tab']['upl']. ' WHERE idupl = "'.$db3->f('value').'"';
$db4->query($sql);
if ($db4->nextRecord()) {
$ChosenImage[path] = $db4->f('dirname');
$ChosenImage[name] = $db4->f('filename');
}
} else {
$sTmpValue = urldecode($db3->f('value'));
$doc=new DOMDocument();
$doc->loadHTML($sTmpValue);
$xpath = new DOMXPath($doc);
$aImg=$xpath->evaluate('//img');
$allImages = array();
if($aImg->length>0) {
foreach($aImg as $val)
{
$extractedImg = array();
$uploadfilepath = explode("upload/",$val->getAttribute('src') );
$extractedImg[name] = basename ( $uploadfilepath[1] );
$uploaddirpath = explode($extractedImg[name], $uploadfilepath[1] );
$extractedImg[path] = $uploaddirpath[0];
array_push($allImages, $extractedImg);
}
$ChosenImage[name] = $allImages[0][name] ;
$ChosenImage[path] = $allImages[0][path] ;
}
}
if ($bDebug) {
echo '<pre>'.$sql.'</pre>';
}
// execute query and calculate image values
$thisServerPath = $cfgClient[$client]['upl']['path'].$ChosenImage[path].$ChosenImage[name];
$image = $cfgClient[$client]['upl']['htmlpath'].$ChosenImage[path].$ChosenImage[name];
list ($width, $height, $type, $attr ) = getimagesize($thisServerPath);
// print $k."elementwidth: ". $aSettings['k'.$k]['ElementWidth'] . "elementheight ".$aSettings['k'.$k]['ElementHeight'] ;
if ($aSettings['k'.$k]['ElementWidth'] > 0 && $aSettings['k'.$k]['ElementHeight'] > 0 && file_exists($thisServerPath) &&
($width > $aSettings['k'.$k]['ElementWidth'] || $height > $aSettings['k'.$k]['ElementHeight'])) {
// Scale image
$image = capiImgScale($thisServerPath, $aSettings['k'.$k]['ElementWidth'], $aSettings['k'.$k]['ElementHeight'], false, false, 10, true, 100, true);
$image = str_replace($cfgClient[$client]['path']['htmlpath'], '', $image);
// Get dimensions of the image
list ($width, $height, $type, $attr ) = getimagesize($image);
}
$metatags = new cApiUploadMeta();
$metatags->loadByUploadIdAndLanguageId( $db4->f('idupl'), $lang );
$article[$k."_img"] = $image;
$article[$k."_img_src"] = $cfgClient[$client]['upl']['htmlpath'].$db4->f('dirname').$db4->f('filename');
$article[$k."_width"] = $width;
$article[$k."_height"] = $height;
$article[$k."_medianame"] = $metatags->get("medianame");;
$article[$k."_description"] = $metatags->get("description");;
$article[$k."_keywords"] = $metatags->get("keywords");;
$article[$k."_copyright"] = $metatags->get("copyright");;
$article[$k."_internal_description"] = $metatags->get("internal_description");;
break;
case ($aSettings['k'.$k]['ElementType'] == 'FixedDate'):
$dom = new domDocument;
$dom->loadXML($db3->f('value'));
$xml = simplexml_import_dom($dom);
$date_Ymd = date('Y-m-d', (int)$xml->timestamp);
$oDate = new DateTimeReplaceLang( $date_Ymd );
$article[$k."article_long"] = $oDate->format($aSettings['DateFormat'], $aSettings['DateLanguage'], 'long');
$article[$k."article_short"] = $oDate->format($aSettings['DateFormat'], $aSettings['DateLanguage'], 'short');
$article[$k."_date"] = ($aSettings['DateFormat'] == 'F j, Y' || $aSettings['DateFormat'] == 'j F Y') ? $article[$k."article_long"] : $article[$k."article_short"];
break;
default:
$article[$k."_text_full"] = urldecode($db3->f('value'));
$article[$k."_text_strippedabit"] = str_replace(' ', ' ', preg_replace('/\r/s', '', preg_replace('/\n|\t/s', ' ', strip_tags(urldecode($db3->f('value')), $aSettings['k'.$k]['ElementAllowedTags']))));
$article[$k."_text_stripped"] = strip_tags($db3->f('value'));
$article[$k."_text_cut"] = capiStrTrimAfterWord($article[$k."_text_stripped"], $aSettings['k'.$k]['ElementWidth']).'...';
if ( $aSettings['k'.$k]['DontStripTags'] ) {
if ( strlen($aSettings['k'.$k]['ElementAllowedTags']) != 0 ) {
$article[$k."_text"] = $article[$k."_text_strippedabit"];
} else {
$article[$k."_text"] = $article[$k."_text_full"];
}
} else {
if ( $aSettings['k'.$k]['ElementWidth'] > 0 && strlen($article[$k."_text_stripped"]) > $aSettings['k'.$k]['ElementWidth'] ) {
$article[$k."_text"] = $article[$k."_text_cut"];
} else {
$article[$k."_text"] = $article[$k."_text_stripped"];
}
}
$article[$k."_text"] = text2utf8( $article[$k."_text"] , false , $aSettings['UseUTF8Decoding'] );
// special customer request. extracts <h3>-tags from news that are used as headlines
$anfang = strpos($article[$k."_text_full"] ,"<h3>")+4;
$ende = strpos($article[$k."_text_full"] ,"</h3>");
$num = ($ende - $anfang);
$article[$k."_textstolzenberger"] = substr($article[$k."_text_full"], $anfang, $num);
} // end switch
} // end if ($sTypeIdentifier == $aSettings['k'.$k]['Identifier'])
} // end for
} // end while
}
$i++;
//add this article to our main array
array_push($articleList, $article);
}
elseif ($lRow == $lEndCount) {
break;
}
$lRow++;
} // end while
// Clearing memory
unset ($db2);
unset ($db3);
unset ($db4);
unset ($sql);
unset ($lStartIDArtLang);
unset ($lStartCount);
unset ($lEndCount);
/**
* Page browsing
* Hint: Number of max available records: $lCount
* Number of pages: ceil($lCount / $aSettings['ArticlePerPage'])
* First page: page=1;
* Last page: page=ceil($lCount / $aSettings['ArticlePerPage']);
*/
$sPagination = array();
$iPages = ceil($lCount / $aSettings['ArticlePerPage']);
if ($bDebug) {
echo '<p>$iPages = '.$iPages.' / $aSettings[\'currentPage\'] = '.$aSettings['CurrentPage'].'</p>';
}
// Example: Back and Next
$sPaginationType01 = array();
if ($iPages > 1 && $aSettings['CurrentPage'] > 1) {
$aParams = array('lang' => $lang, 'idcat' => $idcat, 'idart' => $idart, 'page' => ($aSettings['CurrentPage'] - 1));
$sPaginationType01[0][0] = cUri::getInstance()->buildRedirect($aParams);
} else {
$sPaginationType01[0][0] = '';
}
$sPaginationType01[0][1] = 'back';
if ($iPages > 1 && $aSettings['CurrentPage'] < $iPages) {
$aParams = array('lang' => $lang, 'idcat' => $idcat, 'idart' => $idart, 'page' => ($aSettings['CurrentPage'] + 1));
$sPaginationType01[1][0] = cUri::getInstance()->buildRedirect($aParams);
} else {
$sPaginationType01[1][0] = '';
}
$sPaginationType01[1][1] = 'next';
if ( $aSettings['PaginationType'] == 1 ) array_push($sPagination, $sPaginationType01);
// Example: 1 2 3 4 5 6 7 ...
$sPaginationType02 = array();
for ($i = 1; $i <= $iPages; $i++) {
$aParams = array('lang' => $lang, 'idcat' => $idcat, 'idart' => $idart, 'page' => $i);
if ( $aSettings['CurrentPage'] != $i) {
$sPaginationType02[] = array( cUri::getInstance()->buildRedirect($aParams), $i);
} else {
$sPaginationType02[] = array( '', $i);
}
}
if ( $aSettings['PaginationType'] == 2 ) array_push($sPagination, $sPaginationType02);
// Example: Seite 1 von 7
$sPaginationType03[0][0] = '';
$sPaginationType03[0][1] = mi18n("Page %s of %s", $aSettings['CurrentPage'], $iPages);
if ( $aSettings['PaginationType'] == 3 ) array_push($sPagination, $sPaginationType03);
// Example: << < 1 2 3 ... 5 6 7 ... 9 10 11 > >>
$sPaginationType04 = array();
if ($aSettings['CurrentPage'] != 1) {
$aParams = array('lang' => $lang, 'idcat' => $idcat, 'idart' => $idart, 'page' => 1);
$sPaginationType04[] = array( cUri::getInstance()->buildRedirect($aParams), mi18n("«") );
} else {
$sPaginationType04[] = array( '', mi18n("«") );
}
if (($aSettings['CurrentPage'] - 1) >= 1) {
$aParams = array('lang' => $lang, 'idcat' => $idcat, 'idart' => $idart, 'page' => ($aSettings['CurrentPage'] - 1));
$sPaginationType04[] = array( cUri::getInstance()->buildRedirect($aParams), mi18n("â¹") );
} else {
$sPaginationType04[] = array( '', mi18n("â¹") );
}
for ($i = 1; $i <= $iPages; $i++) {
$aStartRange = array(1, 2, 3);
$aEndRange = array($iPages, ($iPages-1), ($iPages-2));
if (in_array($i, $aStartRange) || in_array($i, $aEndRange)) {
$aParams = array('lang' => $lang, 'idcat' => $idcat, 'idart' => $idart, 'page' => $i);
if ($aSettings['CurrentPage'] != $i) {
$sPaginationType04[] = array( cUri::getInstance()->buildRedirect($aParams), $i );
} else {
$sPaginationType04[] = array( '', $i ); // I'm on the current page, no link
}
} elseif ($aSettings['CurrentPage'] == ($i+1)) {
// Front
$aParams = array('lang' => $lang, 'idcat' => $idcat, 'idart' => $idart, 'page' => $i);
$sPaginationType04[] = array( cUri::getInstance()->buildRedirect($aParams), $i );
} elseif ($aSettings['CurrentPage'] == ($i-1)) {
// Back
$aParams = array('lang' => $lang, 'idcat' => $idcat, 'idart' => $idart, 'page' => $i);
$sPaginationType04[] = array( cUri::getInstance()->buildRedirect($aParams), $i );
} elseif ($aSettings['CurrentPage'] == ($i-2) ||
$aSettings['CurrentPage'] == ($i+2) ||
($aSettings['CurrentPage'] == ($i-3) && (($i-3)==1)) ||
($aSettings['CurrentPage'] == ($i+3) && (($i+3)==$iPages))) {
$sPaginationType04[] = array( '', ' ...' );
}
}
if (($aSettings['CurrentPage'] + 1) <= $iPages) {
$aParams = array('lang' => $lang, 'idcat' => $idcat, 'idart' => $idart, 'page' => ($aSettings['CurrentPage'] + 1));
$sPaginationType04[] = array( cUri::getInstance()->buildRedirect($aParams), mi18n("âº") );
} else {
$sPaginationType04[] = array( '', mi18n("âº") );
}
if ($aSettings['CurrentPage'] != $iPages) {
$aParams = array('lang' => $lang, 'idcat' => $idcat, 'idart' => $idart, 'page' => $iPages);
$sPaginationType04[] = array( cUri::getInstance()->buildRedirect($aParams), mi18n("»") );
} else {
$sPaginationType04[] = array( '', mi18n("»") );
}
if ( $aSettings['PaginationType'] == 4 ) array_push($sPagination, $sPaginationType04);
// Example: << < 1 2 3 4 5 6 7 8 ... > >>
// This version is newly programmed and will produce errors for a start
$sPaginationType05 = array();
if ($aSettings['CurrentPage'] != 1) {
$aParams = array('lang' => $lang, 'idcat' => $idcat, 'idart' => $idart, 'page' => 1);
$sPaginationType05[] = array( cUri::getInstance()->buildRedirect($aParams), mi18n("«") );
} else {
$sPaginationType05[] = array( '', mi18n("«") );
}
if (($aSettings['CurrentPage'] - 1) >= 1) {
$aParams = array('lang' => $lang, 'idcat' => $idcat, 'idart' => $idart, 'page' => ($aSettings['CurrentPage'] - 1));
$sPaginationType05[] = array( cUri::getInstance()->buildRedirect($aParams), mi18n("â¹") );
} else {
$sPaginationType05[] = array( '', mi18n("â¹") );
}
if ($iPages > $aSettings['PaginationType05MaxPages'] && ($aSettings['CurrentPage'] + 1) > $aSettings['PaginationType05MaxPages']) $sPaginationType05[] = array( '', ' ...' );
$start = ( $aSettings['CurrentPage'] > $aSettings['PaginationType05MaxPages']) ? $aSettings['CurrentPage']-$aSettings['PaginationType05MaxPages'] : 1;
$end = ( $start != 1 ) ? $aSettings['CurrentPage'] : $iPages ;
for($i = $start; $i <= $end; $i ++) {
if ($i == $aSettings['CurrentPage'] ) {
$sPaginationType05[] = array( '', $i );
} else {
$aParams = array('lang' => $lang, 'idcat' => $idcat, 'idart' => $idart, 'page' => $i);
$sPaginationType05[] = array( cUri::getInstance()->buildRedirect($aParams), $i );
}
}
if ($iPages > $aSettings['PaginationType05MaxPages'] && ($aSettings['CurrentPage'] + 1) <= $aSettings['PaginationType05MaxPages']) $sPaginationType05[] = array( '', '... ' );
if (($aSettings['CurrentPage'] + 1) <= $iPages) {
$aParams = array('lang' => $lang, 'idcat' => $idcat, 'idart' => $idart, 'page' => ($aSettings['CurrentPage'] + 1));
$sPaginationType05[] = array( cUri::getInstance()->buildRedirect($aParams), mi18n("âº") );
} else {
$sPaginationType05[] = array( '', mi18n("âº") );
}
if ($aSettings['CurrentPage'] != $iPages) {
$aParams = array('lang' => $lang, 'idcat' => $idcat, 'idart' => $idart, 'page' => $iPages);
$sPaginationType05[] = array( cUri::getInstance()->buildRedirect($aParams), mi18n("»") );
} else {
$sPaginationType05[] = array( '', mi18n("»") );
}
if ( $aSettings['PaginationType'] == 5 ) array_push($sPagination, $sPaginationType05);
// Pagination calculation finished
// end of IF articles found; if none are found, deal with it in the html-template
}
if ( $bDebug ) { print "<pre>"; print_r($articleList); print "</pre>"; }
// nun noch ein paar Hauptwerte übergeordneter Art
// Generate article list headline
$listObj->artlistHeadline = text2utf8( $aSettings['ArtListHeadline'] , false , $aSettings['UseUTF8Decoding'] );
// Generate overview link. check on string being empty is mandatory, or cUri will crash the script
if ( $aSettings['OverviewLink'] != '' ) {
$aParams = (($iCount = substr_count($aSettings['OverviewLink'],'cat_')) > 0) ? array('lang' => $lang, 'idcat' => str_replace('cat_', '', $aSettings['OverviewLink'])) : '';
$aParams = (($iCount = substr_count($aSettings['OverviewLink'],'art_')) > 0) ? array('lang' => $lang, 'idart' => str_replace('art_', '', $aSettings['OverviewLink'])) : $aParams;
$listObj->overviewLink = cUri::getInstance()->buildRedirect($aParams);
}
// Generate a) default article text or b) free default text in case the article list will be empty
// regarding the output priority: chosen article text ranks higher than free text
$listObj->nolistFreetext = $aSettings['DefaultTextFree'];
if ( $aSettings['DefaultTextArticle'] != '' ) {
$oCatArt = new cApiCategoryArticle( $aSettings['DefaultTextArticle']);
$thisidart = $oCatArt->getField("idart");print $thisidart;
$oArt = new cApiArticleLanguage( $thisidart, $lang);
$oArt->loadByArticleAndLanguageId( $thisidart, $lang, true);
$listObj->nolistArticletext = $oArt->getContent('html', 1);
}
$listObj->nolistText = ( $listObj->nolistArticletext != '' ) ? $listObj->nolistArticletext : $listObj->nolistFreetext ;
$listObj->more1 = mi18n("more_linktext1");
$listObj->more2 = mi18n("more_linktext2");
$listObj->more3 = mi18n("more_linktext3");
$listObj->dateLabel1 = mi18n("date_label1");
$listObj->dateLabel2 = mi18n("date_label2");
$listObj->dateLabel3 = mi18n("date_label3");
$listObj->overviewText1 = mi18n("overview_text1");
$listObj->overviewText2 = mi18n("overview_text2");
$listObj->overviewText3 = mi18n("overview_text3");
$listObj->authorLabel1 = mi18n("author_label1");
$listObj->authorLabel2 = mi18n("author_label2");
$listObj->authorLabel3 = mi18n("author_label3");
// create template
$tpl->assign('alrId', "articleList"); // sets main container ID
$tpl->assign('listObj', $listObj); // an object
$tpl->assign('allPaginations', $sPagination); // an array to walk through in template
$tpl->assign('paginationType1', $sPaginationType01); // an array to walk through in template
$tpl->assign('paginationType2', $sPaginationType02); // an array to walk through in template
$tpl->assign('paginationType3', $sPaginationType03); // an array to walk through in template
$tpl->assign('paginationType4', $sPaginationType04); // an array to walk through in template
$tpl->assign('paginationType5', $sPaginationType05); // an array to walk through in template
$tpl->assign('articleList', $articleList ); // an array to walk through in template
if ( file_exists($tplpath.$aSettings['Template']) ) {
$tpl->display($aSettings['Template']);
} else {
print mi18n("no_template_found");
}
}
// Clearing memory
unset ($aSettings);
unset ($i);
unset ($lCount);
unset ($bDebug);
unset ($db5);
} elseif ($bDebug) {
echo '<strong>ShowModuleSetting: '.$aSettings['ShowModul'].'</strong>';
} else {
// do nothing
}
?>
Code: Alles auswählen
{* Mastervorlage für die Article List Reloaded *}
{* *}
{* LISTE ALLER VARIABLEN AM ENDE DIESER DATEI!!!! *}
{* *}
{* Das Modul erzeugt und übergibt weit mehr Werte, als in der Vorlage konfiguriert werden (Liste s.u.). *}
{* In der Vorlagenkonfiguration werden aus der Vielzahl der erzeugten Werte lediglich eine Auswahl in "default"-values gespeichert, so dass sich diese hier variabel verhalten, wenn man die Vorlage ändert. *}
{* Alle anderen Werte stehen dennoch zur Verfügung und können bei händischer Anpassung hier eingesetzt werden. *}
{* So ist es denkbar, sowohl z.B. einen gekürzten Seitentitel als Headline zu verwenden und den ungekürzten Seitentitel als Bildbeschreibung usw. *}
{* Zudem stehen für einige Fälle standardmäßig 3 zusätzliche Variablen zur Auswahl, falls z.B. verschiedene Versionen von "weiter"-Links zum Einsatz kommen müssen. *}
{* Auch jede Pagination steht zusätzlich zur jeweils ausgewählten in je eigenen Variablen zur Verfügung. *}
{* Diese Seite zeigt im Beispielcode nur EINE mögliche Darstellung, und die Elementnummern müssen jeweils neu zugeordnet werden. *}
{* NEU: Ein Artikelelement behält seine laufende Nummer aus der Vorlagenkonfiguration, also: "2. Element" = $article.2_img *}
<div id="{$alrId}">
{if !empty($articleList) }
{if $listObj->artlistHeadline != '' }
<h1>{$listObj->artlistHeadline}</h1>
{/if}
<div class="newsPagination">
{if !empty($allPaginations) }
{foreach from=$allPaginations item=paginationtype}
<div class="pagination paginationtype clearfix">
{foreach from=$paginationtype item=page}
{if $page.0 == '' }
<a class="active">{$page.1}</a>
{else}
<a href="{$page.0}" class="pageCounter">{$page.1}</a>
{/if}
{/foreach}
</div>
{/foreach}
{/if}
</div>
{foreach from=$articleList item=article}
<div class="col-md-6">
<div class="newsItem">
{if $article.headline != '' }
<h4>{$article.headline}</h4>
{/if}
{if $article.date != '' }
<div class="newsDate">
<div class="newsDay">
{{$article.date}|regex_replace:"/[a-zA-Z.]/":" "}
</div>
<div class="newsMonth">
{$article.date|regex_replace:"/[0-9,]/":" "}
</div>
</div>
{/if}
<div class="newsEntryWrapper">
<p class="artText">{$article.1_text}<br />{$article.3_text}</p>
</div>
<div class="clear"></div>
{if $article.link != '' }
<p class="linkMore"><img src="images/misc/Arrow_News.png" /><a href="{$article.link}">{$listObj->more1}</a></p>
{/if}
</div>
</div>
{/foreach}
{if $listObj->overviewLink != '' }
<p class="linkOverview"><a href="{$listObj->overviewLink}">{$listObj->overviewText1}</a></p>
{/if}
{else} {* if articleList == empty *}
<p>{$listObj->nolistText}</p>
{/if}
</div>
{*
Auf die Liste bezogene Variablen als Objekt:
$listObj->artlistHeadline // in der Konfiguration eingegebene Überschrift über die ganze Liste
$listObj->authorLabel1 // 1-3 enthalten über die Übersetzung konfigurierbare Texte als Umfeld zu $article.author ("veröffentlicht von...")
$listObj->authorLabel2
$listObj->authorLabel3
$listObj->dateLabel1 // 1-3 enthalten über die Übersetzung konfigurierbare Texte als Umfeld zu $article.date ("veröffentlicht am...")
$listObj->dateLabel2
$listObj->dateLabel3
$listObj->more1 // 1-3 enthalten über die Übersetzung konfigurierbare Links für "weiter"-Buttons
$listObj->more2
$listObj->more3
$listObj->overviewLink // Link zu einer weiterführenden Übersichtsseite, z.B. mit ALLEN Teasern statt nur einer Auswahlteaserliste
$listObj->overviewText1 // 1-3 enthalten über die Übersetzung konfigurierbare Linktexte für den Link zur weiterführenden Seite (Übersicht)
$listObj->overviewText2
$listObj->overviewText3
$listObj->nolistArticletext // enthält ggf. den Text aus dem CMS_TEXT[1] des in der Konfiguration genannten Artikels
$listObj->nolistFreetext // enthält den in der Konfiguration angegebenen freien Text
$listObj->nolistText // Dynamische Variable, enthält je nach Einstellung entweder $listObj->nolistFreetext oder $listObj->nolistArticletext
Arrays für die Pagination:
allPaginations // enthält alle 5 u.g. Paginationen in einem mehrdimensionalen Array. Abhängig vom Paginationsdropdown wird aber nur die gewünschte ausgegeben.
paginationType1 // enthält Typ 1 als Array. $page.0 ist der Link, $page.1 ist der Linktext
paginationType2
paginationType3
paginationType4
paginationType5
Dynamisch artikelbezogene Variablen:
// diese passen ihren Inhalt an, je nach Einstellungen in der Konfiguration der Vorlage
// daher sind diese bevorzugt zu verwenden, da die Änderungen in der Konfiguration sich dann auch sichtbar auswirken:
article.headline // enthält entweder einen Containertext, die Zusammenfassung oder den Seitentitel, ggf. sogar gekürzt, je nach Einstellung
$article.date // enthält das in der Konfiguration ausgewählte Datum (created, published oder lastmodified) in der gewünschten Formatierung
// folgende Datumsvariablen passen sich an einen TEIL der Konfiguration an, nämlich das Datumsformat
$article.lastmodified // Datum, wann Artikel zuletzt geändert wurde, enthält entweder Variante long oder short
$article.created // wie lastmodified, nur bezogen auf das Erstellungsdatum des Artikels
$article.published // wie lastmodified, nur bezogen auf das Veröffentlichungsdatum
// folgende Textvariablen passen sich an, falls Kürzungen in der Konfiguration gewünscht sind oder nicht:
$article.pagetitle // enthält entweder die lange oder gekürzte Form des Seitentitels, je nach Einstellung
$$article.summary // Zusammenfassung (erstellbar in den Artikeleigenschaften), enthält entweder die lange oder gekürzte Form, je nach Einstellung
Weitgehend statische Variablen:
// von den Einstellungen in der Konfiguration nicht beeinflusst
$article.number // fortlaufende Nummer ab 1 pro ausgegebenem Artikel
$article.category // Echtname der Kategorie, in zu der der Artikel gehört
$article.categoryid // idcat der Kategorie, zu der der Artikel gehört
$article.link // Link zum ARTIKEL, aus dem sich der Teaser speist
$article.linkcat // Link zur KATEGORIE des Artikels (für "...more")
$article.lastmodified_long // Datum im Langformat, z.B. "13. Dezember 2012"
$article.lastmodified_short // Datum im Kurzformat, z.B. "13. Dez. 2012"
$article.created_long
$article.created_short
$article.published_long
$article.published_short
$article.author // Echtname des Autors
$article.headline_full // Ungekürzte Version des gewählten Containers in der Konfiguration
$article.headline_trimmed // Gekürzte Version, falls gewünscht
$article.pagetitle_full // Ungekürzter Seitentitel
$article.pagetitle_trimmed // Gekürzter Seitentitel, falls in der Konfiguration gewünscht
$article.summary_full // Ungekürzte Version der Zusammenfassung (erfassbar in den Artikeleigenschaften)
$article.summary_trimmed // Gekürzte Version der Zusammenfassung, falls gewünscht
Einzelne Artikelelemente im Stil, wobei die Nummer jeweils zu ersetzen ist:
// Wenn Text, dann
$article.1_text // Containertext in der Variante, wie in der Konfiguration gewünscht
$article.1_text_full // Ungekürzte Version
$article.1_text_stripped // Version ohne jegliche Tags
$article.1_text_strippedabit // Version mit den verbliebenen gewünschten Tags
$article.1_text_cut // gekürzter Text ohne jegliche Tags
// Wenn Bild, dann
$article.2_img // Pfad zur Bilddatei
$article.2_img_src // Pfad zur Originaldatei, ggf. nutzbar für ein Popup/Lightbox innerhalb der Artikelliste
$article.2_width // Breite des (ggf. neu berechneten) Bildes
$article.2_height // Höhe des (ggf. neu berechneten) Bildes
$article.2_medianame // Metatag, einstellbar im Uploadbereich bei den Bildeigenschaften
$article.2_description // Metatag
$article.2_keywords // Metatag
$article.2_copyrights // Metatag
$article.2_internal_description // Metatag
*}
Wenn auf created eingestellt ist funktioniert es.
Was ist der Fehler?
DANKE