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

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

namespace Contao;


/**
 * Front end module "custom navigation".
 *
 * @author Leo Feyer <https://github.com/leofeyer>
 */
class ModuleCustomnav extends Module
{

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


    
/**
     * Redirect to the selected page
     *
     * @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']['customnav'][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();
        }

        
// Always return an array (see #4616)
        
$this->pages deserialize($this->pagestrue);

        if (empty(
$this->pages) || $this->pages[0] == '')
        {
            return 
'';
        }

        
$strBuffer parent::generate();

        return (
$this->Template->items != '') ? $strBuffer '';
    }


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

        
$items = array();
        
$groups = array();

        
// Get all groups of the current front end user
        
if (FE_USER_LOGGED_IN)
        {
            
$this->import('FrontendUser''User');
            
$groups $this->User->groups;
        }

        
// Get all active pages
        
$objPages PageModel::findPublishedRegularWithoutGuestsByIds($this->pages);

        
// Return if there are no pages
        
if ($objPages === null)
        {
            return;
        }

        
$arrPages = array();

        
// Sort the array keys according to the given order
        
if ($this->orderPages != '')
        {
            
$tmp deserialize($this->orderPages);

            if (!empty(
$tmp) && is_array($tmp))
            {
                
$arrPages array_map(function(){}, array_flip($tmp));
            }
        }

        
// Add the items to the pre-sorted array
        
while ($objPages->next())
        {
            
$arrPages[$objPages->id] = $objPages->current();
        }

        
$arrPages array_values(array_filter($arrPages));

        
// Set default template
        
if ($this->navigationTpl == '')
        {
            
$this->navigationTpl 'nav_default';
        }

        
/** @var FrontendTemplate|object $objTemplate */
        
$objTemplate = new FrontendTemplate($this->navigationTpl);

        
$objTemplate->type get_class($this);
        
$objTemplate->cssID $this->cssID// see #4897 and 6129
        
$objTemplate->level 'level_1';

        
/** @var PageModel[] $arrPages */
        
foreach ($arrPages as $objModel)
        {
            
$_groups deserialize($objModel->groups);

            
// Do not show protected pages unless a back end or front end user is logged in
            
if (!$objModel->protected || BE_USER_LOGGED_IN || (is_array($_groups) && count(array_intersect($_groups$groups))) || $this->showProtected)
            {
                
// Get href
                
switch ($objModel->type)
                {
                    case 
'redirect':
                        
$href $objModel->url;
                        break;

                    case 
'forward':
                        if ((
$objNext $objModel->getRelated('jumpTo')) !== null)
                        {
                            
/** @var PageModel $objNext */
                            
$href $objNext->getFrontendUrl();
                            break;
                        }
                        
// DO NOT ADD A break; STATEMENT

                    
default:
                        
$href $objModel->getFrontendUrl();
                        break;
                }

                
$trail in_array($objModel->id$objPage->trail);

                
// Active page
                
if ($objPage->id == $objModel->id && $href == Environment::get('request'))
                {
                    
$strClass trim($objModel->cssClass);
                    
$row $objModel->row();

                    
$row['isActive'] = true;
                    
$row['isTrail'] = false;
                    
$row['class'] = trim('active ' $strClass);
                    
$row['title'] = specialchars($objModel->titletrue);
                    
$row['pageTitle'] = specialchars($objModel->pageTitletrue);
                    
$row['link'] = $objModel->title;
                    
$row['href'] = $href;
                    
$row['nofollow'] = (strncmp($objModel->robots'noindex'7) === 0);
                    
$row['target'] = '';
                    
$row['description'] = str_replace(array("n""r"), array(' ' ''), $objModel->description);

                    
// Override the link target
                    
if ($objModel->type == 'redirect' && $objModel->target)
                    {
                        
$row['target'] = ($objPage->outputFormat == 'xhtml') ? ' onclick="return !window.open(this.href)"' ' target="_blank"';
                    }

                    
$items[] = $row;
                }

                
// Regular page
                
else
                {
                    
$strClass trim($objModel->cssClass . ($trail ' trail' ''));
                    
$row $objModel->row();

                    
$row['isActive'] = false;
                    
$row['isTrail'] = $trail;
                    
$row['class'] = $strClass;
                    
$row['title'] = specialchars($objModel->titletrue);
                    
$row['pageTitle'] = specialchars($objModel->pageTitletrue);
                    
$row['link'] = $objModel->title;
                    
$row['href'] = $href;
                    
$row['nofollow'] = (strncmp($objModel->robots'noindex'7) === 0);
                    
$row['target'] = '';
                    
$row['description'] = str_replace(array("n""r"), array(' ' ''), $objModel->description);

                    
// Override the link target
                    
if ($objModel->type == 'redirect' && $objModel->target)
                    {
                        
$row['target'] = ($objPage->outputFormat == 'xhtml') ? ' onclick="return !window.open(this.href)"' ' target="_blank"';
                    }

                    
$items[] = $row;
                }
            }
        }

        
// Add classes first and last
        
$items[0]['class'] = trim($items[0]['class'] . ' first');
        
$last count($items) - 1;
        
$items[$last]['class'] = trim($items[$last]['class'] . ' last');

        
$objTemplate->items $items;

        
$this->Template->request Environment::get('indexFreeRequest');
        
$this->Template->skipId 'skipNavigation' $this->id;
        
$this->Template->skipNavigation specialchars($GLOBALS['TL_LANG']['MSC']['skipNavigation']);
        
$this->Template->items = !empty($items) ? $objTemplate->parse() : '';
    }
}
Онлайн: 0
Реклама