Вход Регистрация
Файл: contao-3.5.8/system/modules/news/modules/ModuleNewsArchive.php
Строк: 188
<?php

/**
 * Contao Open Source CMS
 *
 * Copyright (c) 2005-2016 Leo Feyer
 *
 * @license LGPL-3.0+
 */

namespace Contao;


/**
 * Front end module "news archive".
 *
 * @author Leo Feyer <https://github.com/leofeyer>
 */
class ModuleNewsArchive extends ModuleNews
{

    
/**
     * Template
     * @var string
     */
    
protected $strTemplate 'mod_newsarchive';


    
/**
     * Display a wildcard in the back end
     *
     * @return string
     */
    
public function generate()
    {
        if (
TL_MODE == 'BE')
        {
            
/** @var BackendTemplate|object $objTemplate */
            
$objTemplate = new BackendTemplate('be_wildcard');

            
$objTemplate->wildcard '### ' utf8_strtoupper($GLOBALS['TL_LANG']['FMD']['newsarchive'][0]) . ' ###';
            
$objTemplate->title $this->headline;
            
$objTemplate->id $this->id;
            
$objTemplate->link $this->name;
            
$objTemplate->href 'contao/main.php?do=themes&amp;table=tl_module&amp;act=edit&amp;id=' $this->id;

            return 
$objTemplate->parse();
        }

        
$this->news_archives $this->sortOutProtected(deserialize($this->news_archives));

        
// No news archives available
        
if (!is_array($this->news_archives) || empty($this->news_archives))
        {
            return 
'';
        }

        
// Show the news reader if an item has been selected
        
if ($this->news_readerModule && (isset($_GET['items']) || (Config::get('useAutoItem') && isset($_GET['auto_item']))))
        {
            return 
$this->getFrontendModule($this->news_readerModule$this->strColumn);
        }

        
// Hide the module if no period has been selected
        
if ($this->news_jumpToCurrent == 'hide_module' && !isset($_GET['year']) && !isset($_GET['month']) && !isset($_GET['day']))
        {
            return 
'';
        }

        return 
parent::generate();
    }


    
/**
     * Generate the module
     */
    
protected function compile()
    {
        
/** @var PageModel $objPage */
        
global $objPage;

        
$limit null;
        
$offset 0;
        
$intBegin 0;
        
$intEnd 0;

        
$intYear Input::get('year');
        
$intMonth Input::get('month');
        
$intDay Input::get('day');

        
// Jump to the current period
        
if (!isset($_GET['year']) && !isset($_GET['month']) && !isset($_GET['day']) && $this->news_jumpToCurrent != 'all_items')
        {
            switch (
$this->news_format)
            {
                case 
'news_year':
                    
$intYear date('Y');
                    break;

                default:
                case 
'news_month':
                    
$intMonth date('Ym');
                    break;

                case 
'news_day':
                    
$intDay date('Ymd');
                    break;
            }
        }

        
// Create the date object
        
try
        {
            if (
$intYear)
            {
                
$strDate $intYear;
                
$objDate = new Date($strDate'Y');
                
$intBegin $objDate->yearBegin;
                
$intEnd $objDate->yearEnd;
                
$this->headline .= ' ' date('Y'$objDate->tstamp);
            }
            elseif (
$intMonth)
            {
                
$strDate $intMonth;
                
$objDate = new Date($strDate'Ym');
                
$intBegin $objDate->monthBegin;
                
$intEnd $objDate->monthEnd;
                
$this->headline .= ' ' Date::parse('F Y'$objDate->tstamp);
            }
            elseif (
$intDay)
            {
                
$strDate $intDay;
                
$objDate = new Date($strDate'Ymd');
                
$intBegin $objDate->dayBegin;
                
$intEnd $objDate->dayEnd;
                
$this->headline .= ' ' Date::parse($objPage->dateFormat$objDate->tstamp);
            }
            elseif (
$this->news_jumpToCurrent == 'all_items')
            {
                
$intBegin 0;
                
$intEnd time();
            }
        }
        catch (
OutOfBoundsException $e)
        {
            
/** @var PageError404 $objHandler */
            
$objHandler = new $GLOBALS['TL_PTY']['error_404']();
            
$objHandler->generate($objPage->id);
        }

        
$this->Template->articles = array();

        
// Split the result
        
if ($this->perPage 0)
        {
            
// Get the total number of items
            
$intTotal NewsModel::countPublishedFromToByPids($intBegin$intEnd$this->news_archives);

            if (
$intTotal 0)
            {
                
$total $intTotal;

                
// Get the current page
                
$id 'page_a' $this->id;
                
$page = (Input::get($id) !== null) ? Input::get($id) : 1;

                
// Do not index or cache the page if the page number is outside the range
                
if ($page || $page max(ceil($total/$this->perPage), 1))
                {
                    
/** @var PageError404 $objHandler */
                    
$objHandler = new $GLOBALS['TL_PTY']['error_404']();
                    
$objHandler->generate($objPage->id);
                }

                
// Set limit and offset
                
$limit $this->perPage;
                
$offset = (max($page1) - 1) * $this->perPage;

                
// Add the pagination menu
                
$objPagination = new Pagination($total$this->perPageConfig::get('maxPaginationLinks'), $id);
                
$this->Template->pagination $objPagination->generate("n  ");
            }
        }

        
// Get the news items
        
if (isset($limit))
        {
            
$objArticles NewsModel::findPublishedFromToByPids($intBegin$intEnd$this->news_archives$limit$offset);
        }
        else
        {
            
$objArticles NewsModel::findPublishedFromToByPids($intBegin$intEnd$this->news_archives);
        }

        
// Add the articles
        
if ($objArticles !== null)
        {
            
$this->Template->articles $this->parseArticles($objArticles);
        }

        
$this->Template->headline trim($this->headline);
        
$this->Template->back $GLOBALS['TL_LANG']['MSC']['goBack'];
        
$this->Template->empty $GLOBALS['TL_LANG']['MSC']['empty'];
    }
}
Онлайн: 1
Реклама