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

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

namespace Contao;


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

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


    
/**
     * 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']['newslist'][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));

        
// Return if there are no archives
        
if (!is_array($this->news_archives) || empty($this->news_archives))
        {
            return 
'';
        }

        return 
parent::generate();
    }


    
/**
     * Generate the module
     */
    
protected function compile()
    {
        
$limit null;
        
$offset intval($this->skipFirst);

        
// Maximum number of items
        
if ($this->numberOfItems 0)
        {
            
$limit $this->numberOfItems;
        }

        
// Handle featured news
        
if ($this->news_featured == 'featured')
        {
            
$blnFeatured true;
        }
        elseif (
$this->news_featured == 'unfeatured')
        {
            
$blnFeatured false;
        }
        else
        {
            
$blnFeatured null;
        }

        
$this->Template->articles = array();
        
$this->Template->empty $GLOBALS['TL_LANG']['MSC']['emptyList'];

        
// Get the total number of items
        
$intTotal $this->countItems($this->news_archives$blnFeatured);

        if (
$intTotal 1)
        {
            return;
        }

        
$total $intTotal $offset;

        
// Split the results
        
if ($this->perPage && (!isset($limit) || $this->numberOfItems $this->perPage))
        {
            
// Adjust the overall limit
            
if (isset($limit))
            {
                
$total min($limit$total);
            }

            
// Get the current page
            
$id 'page_n' $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 PageModel $objPage */
                
global $objPage;

                
/** @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;
            
$skip intval($this->skipFirst);

            
// Overall limit
            
if ($offset $limit $total $skip)
            {
                
$limit $total $skip $offset;
            }

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

        
$objArticles $this->fetchItems($this->news_archives$blnFeatured, ($limit ?: 0), $offset);

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

        
$this->Template->archives $this->news_archives;
    }


    
/**
     * Count the total matching items
     *
     * @param array $newsArchives
     * @param boolean $blnFeatured
     *
     * @return integer
     */
    
protected function countItems($newsArchives$blnFeatured)
    {
        
// HOOK: add custom logic
        
if (isset($GLOBALS['TL_HOOKS']['newsListCountItems']) && is_array($GLOBALS['TL_HOOKS']['newsListCountItems']))
        {
            foreach (
$GLOBALS['TL_HOOKS']['newsListCountItems'] as $callback)
            {
                if ((
$intResult System::importStatic($callback[0])->{$callback[1]}($newsArchives$blnFeatured$this)) === false)
                {
                    continue;
                }

                if (
is_int($intResult))
                {
                    return 
$intResult;
                }
            }
        }

        return 
NewsModel::countPublishedByPids($newsArchives$blnFeatured);
    }


    
/**
     * Fetch the matching items
     *
     * @param  array   $newsArchives
     * @param  boolean $blnFeatured
     * @param  integer $limit
     * @param  integer $offset
     *
     * @return ModelCollection|NewsModel|null
     */
    
protected function fetchItems($newsArchives$blnFeatured$limit$offset)
    {
        
// HOOK: add custom logic
        
if (isset($GLOBALS['TL_HOOKS']['newsListFetchItems']) && is_array($GLOBALS['TL_HOOKS']['newsListFetchItems']))
        {
            foreach (
$GLOBALS['TL_HOOKS']['newsListFetchItems'] as $callback)
            {
                if ((
$objCollection System::importStatic($callback[0])->{$callback[1]}($newsArchives$blnFeatured$limit$offset$this)) === false)
                {
                    continue;
                }

                if (
$objCollection === null || $objCollection instanceof ModelCollection)
                {
                    return 
$objCollection;
                }
            }
        }

        return 
NewsModel::findPublishedByPids($newsArchives$blnFeatured$limit$offset);
    }
}
Онлайн: 0
Реклама