Contao\ModuleArticle::compile PHP Method

compile() protected method

Generate the module
protected compile ( )
    protected function compile()
    {
        /** @var PageModel $objPage */
        global $objPage;
        $id = 'article-' . $this->id;
        // Generate the CSS ID if it is not set
        if (empty($this->cssID[0])) {
            $this->cssID = array($id, $this->cssID[1]);
        }
        $this->Template->column = $this->inColumn;
        $this->Template->noMarkup = $this->blnNoMarkup;
        // Add the modification date
        $this->Template->timestamp = $this->tstamp;
        $this->Template->date = \Date::parse($objPage->datimFormat, $this->tstamp);
        // Clean the RTE output
        $this->teaser = \StringUtil::toHtml5($this->teaser);
        // Show the teaser only
        if ($this->multiMode && $this->showTeaser) {
            $this->cssID = array($id, '');
            $arrCss = \StringUtil::deserialize($this->teaserCssID);
            // Override the CSS ID and class
            if (is_array($arrCss) && count($arrCss) == 2) {
                if ($arrCss[0] == '') {
                    $arrCss[0] = $id;
                }
                $this->cssID = $arrCss;
            }
            $article = $this->alias ?: $this->id;
            $href = '/articles/' . ($this->inColumn != 'main' ? $this->inColumn . ':' : '') . $article;
            $this->Template->teaserOnly = true;
            $this->Template->headline = $this->headline;
            $this->Template->href = $objPage->getFrontendUrl($href);
            $this->Template->teaser = $this->teaser;
            $this->Template->readMore = \StringUtil::specialchars(sprintf($GLOBALS['TL_LANG']['MSC']['readMore'], $this->headline), true);
            $this->Template->more = $GLOBALS['TL_LANG']['MSC']['more'];
            return;
        }
        // Get section and article alias
        list($strSection, $strArticle) = explode(':', \Input::get('articles'));
        if ($strArticle === null) {
            $strArticle = $strSection;
        }
        // Overwrite the page title (see #2853 and #4955)
        if (!$this->blnNoMarkup && $strArticle != '' && ($strArticle == $this->id || $strArticle == $this->alias) && $this->title != '') {
            $objPage->pageTitle = strip_tags(\StringUtil::stripInsertTags($this->title));
            if ($this->teaser != '') {
                $objPage->description = $this->prepareMetaDescription($this->teaser);
            }
        }
        $this->Template->printable = false;
        $this->Template->backlink = false;
        // Back link
        if (!$this->multiMode && $strArticle != '' && ($strArticle == $this->id || $strArticle == $this->alias)) {
            $this->Template->backlink = 'javascript:history.go(-1)';
            // see #6955
            $this->Template->back = \StringUtil::specialchars($GLOBALS['TL_LANG']['MSC']['goBack']);
        }
        $arrElements = array();
        $objCte = \ContentModel::findPublishedByPidAndTable($this->id, 'tl_article');
        if ($objCte !== null) {
            $intCount = 0;
            $intLast = $objCte->count() - 1;
            while ($objCte->next()) {
                $arrCss = array();
                /** @var ContentModel $objRow */
                $objRow = $objCte->current();
                // Add the "first" and "last" classes (see #2583)
                if ($intCount == 0 || $intCount == $intLast) {
                    if ($intCount == 0) {
                        $arrCss[] = 'first';
                    }
                    if ($intCount == $intLast) {
                        $arrCss[] = 'last';
                    }
                }
                $objRow->classes = $arrCss;
                $arrElements[] = $this->getContentElement($objRow, $this->strColumn);
                ++$intCount;
            }
        }
        $this->Template->teaser = $this->teaser;
        $this->Template->elements = $arrElements;
        if ($this->keywords != '') {
            $GLOBALS['TL_KEYWORDS'] .= ($GLOBALS['TL_KEYWORDS'] != '' ? ', ' : '') . $this->keywords;
        }
        // Deprecated since Contao 4.0, to be removed in Contao 5.0
        if ($this->printable == 1) {
            @trigger_error('Setting tl_article.printable to "1" has been deprecated and will no longer work in Contao 5.0.', E_USER_DEPRECATED);
            $this->Template->printable = true;
            $this->Template->pdfButton = true;
        } elseif ($this->printable != '') {
            $options = \StringUtil::deserialize($this->printable);
            if (!empty($options) && is_array($options)) {
                $this->Template->printable = true;
                $this->Template->printButton = in_array('print', $options);
                $this->Template->pdfButton = in_array('pdf', $options);
                $this->Template->facebookButton = in_array('facebook', $options);
                $this->Template->twitterButton = in_array('twitter', $options);
                $this->Template->gplusButton = in_array('gplus', $options);
            }
        }
        // Add syndication variables
        if ($this->Template->printable) {
            $request = \Environment::get('indexFreeRequest');
            // URL encoding will be handled by the Symfony router, so do not apply rawurlencode() here anymore
            $this->Template->print = '#';
            $this->Template->encUrl = \Environment::get('base') . \Environment::get('request');
            $this->Template->encTitle = $objPage->pageTitle;
            $this->Template->href = $request . (strpos($request, '?') !== false ? '&' : '?') . 'pdf=' . $this->id;
            $this->Template->printTitle = \StringUtil::specialchars($GLOBALS['TL_LANG']['MSC']['printPage']);
            $this->Template->pdfTitle = \StringUtil::specialchars($GLOBALS['TL_LANG']['MSC']['printAsPdf']);
            $this->Template->facebookTitle = \StringUtil::specialchars($GLOBALS['TL_LANG']['MSC']['facebookShare']);
            $this->Template->twitterTitle = \StringUtil::specialchars($GLOBALS['TL_LANG']['MSC']['twitterShare']);
            $this->Template->gplusTitle = \StringUtil::specialchars($GLOBALS['TL_LANG']['MSC']['gplusShare']);
        }
        // HOOK: add custom logic
        if (isset($GLOBALS['TL_HOOKS']['compileArticle']) && is_array($GLOBALS['TL_HOOKS']['compileArticle'])) {
            foreach ($GLOBALS['TL_HOOKS']['compileArticle'] as $callback) {
                $this->import($callback[0]);
                $this->{$callback[0]}->{$callback[1]}($this->Template, $this->arrData, $this);
            }
        }
    }

Usage Example

Example #1
0
 /**
  * Generate the module
  */
 protected function compile()
 {
     \Contao\ModuleArticle::compile();
     $this->Template->show_tags = $this->tags_showtags;
     if ($this->tags_showtags) {
         $this->Template->tags = $this->getTagsForArticle($this->tags_max_tags, $this->tags_relevance, $this->tags_jumpto);
     }
 }