/** * Render the facebook like viewhelper * * @return string */ public function render() { $code = ''; $url = !empty($this->arguments['href']) ? $this->arguments['href'] : \TYPO3\CMS\Core\Utility\GeneralUtility::getIndpEnv('TYPO3_REQUEST_URL'); // absolute urls are needed $this->tag->addAttribute('href', Tx_News_Utility_Url::prependDomain($url)); $this->tag->forceClosingTag(TRUE); // -1 means no JS if ($this->arguments['javaScript'] != '-1') { if (empty($this->arguments['javaScript'])) { $tsSettings = $this->pluginSettingsService->getSettings(); $locale = !empty($tsSettings['facebookLocale']) && strlen($tsSettings['facebookLocale']) <= 5 ? $tsSettings['facebookLocale'] : 'en_US'; $code = '<script src="https://connect.facebook.net/' . $locale . '/all.js#xfbml=1"></script>'; // Social interaction Google Analytics if ($this->pluginSettingsService->getByPath('analytics.social.facebookLike') == 1) { $code .= \TYPO3\CMS\Core\Utility\GeneralUtility::wrapJS("\n\t\t\t\t\t\tFB.Event.subscribe('edge.create', function(targetUrl) {\n\t\t\t\t\t\t \t_gaq.push(['_trackSocial', 'facebook', 'like', targetUrl]);\n\t\t\t\t\t\t});\n\t\t\t\t\t\tFB.Event.subscribe('edge.remove', function(targetUrl) {\n\t\t\t\t\t\t _gaq.push(['_trackSocial', 'facebook', 'unlike', targetUrl]);\n\t\t\t\t\t\t});\n\t\t\t\t\t"); } } else { $code = '<script src="' . htmlspecialchars($this->arguments['javaScript']) . '"></script>'; } } // seems as if a div with id fb-root is needed this is just a dirty // workaround to make things work again Perhaps we should // use the iframe variation. $code .= '<div id="fb-root"></div>' . $this->tag->render(); return $code; }
/** * Render link to news item or internal/external pages * * @param Tx_News_Domain_Model_News $newsItem current news object * @param array $settings * @param boolean $uriOnly return only the url without the a-tag * @param array $configuration optional typolink configuration * @return string link */ public function render(Tx_News_Domain_Model_News $newsItem, array $settings = array(), $uriOnly = FALSE, $configuration = array()) { $tsSettings = $this->pluginSettingsService->getSettings(); $this->init(); $newsType = (int) $newsItem->getType(); switch ($newsType) { // internal news case 1: $configuration['parameter'] = $newsItem->getInternalurl(); break; // external news // external news case 2: $configuration['parameter'] = $newsItem->getExternalurl(); break; // normal news record // normal news record default: $configuration = $this->getLinkToNewsItem($newsItem, $tsSettings, $configuration); } if (isset($tsSettings['link']['typesOpeningInNewWindow'])) { if (\TYPO3\CMS\Core\Utility\GeneralUtility::inList($tsSettings['link']['typesOpeningInNewWindow'], $newsType)) { $this->tag->addAttribute('target', '_blank'); } } $url = $this->cObj->typoLink_URL($configuration); if ($uriOnly) { return $url; } $this->tag->addAttribute('href', $url); $this->tag->setContent($this->renderChildren()); return $this->tag->render(); }
/** * Render facebook comment viewhelper * * @param string $appId * @return string */ public function render($appId) { $tsSettings = $this->pluginSettingsService->getSettings(); $this->tag->addAttribute('data-href', \TYPO3\CMS\Core\Utility\GeneralUtility::getIndpEnv('TYPO3_REQUEST_URL')); $this->tag->forceClosingTag(TRUE); $locale = !empty($tsSettings['facebookLocale']) && strlen($tsSettings['facebookLocale']) <= 5 ? $tsSettings['facebookLocale'] : 'en_US'; $code = '<div id="fb-root"></div> <script src="http://connect.facebook.net/' . $locale . '/all.js#appId=' . htmlspecialchars($appId) . '&xfbml=1"></script>'; $code .= $this->tag->render(); return $code; }
/** * Render the Google+ button * * @param string $jsCode Alternative JavaScript code which is used * @return string */ public function render($jsCode = '') { if (empty($jsCode)) { $jsCode = 'https://apis.google.com/js/plusone.js'; } elseif ($jsCode != '-1') { $jsCode = htmlspecialchars($jsCode); } $tsSettings = $this->pluginSettingsService->getSettings(); $locale = !empty($tsSettings['googlePlusLocale']) && strlen($tsSettings['googlePlusLocale']) <= 5 ? '{lang:\'' . $tsSettings['googlePlusLocale'] . '\'}' : ''; $code = '<script type="text/javascript" src="' . $jsCode . '">' . $locale . '</script>'; $this->tag->setContent(' '); $code .= $this->tag->render(); return $code; }
/** * Render disqus thread * * @param Tx_News_Domain_Model_News $newsItem news item * @param string $shortName shortname * @param string $link link * @return string */ public function render(Tx_News_Domain_Model_News $newsItem, $shortName, $link) { $tsSettings = $this->pluginSettingsService->getSettings(); $code = '<script type="text/javascript"> var disqus_shortname = ' . t3lib_div::quoteJSvalue($shortName, TRUE) . '; var disqus_identifier = \'news_' . $newsItem->getUid() . '\'; var disqus_url = ' . t3lib_div::quoteJSvalue($link, TRUE) . '; var disqus_title = ' . t3lib_div::quoteJSvalue($newsItem->getTitle(), TRUE) . '; var disqus_config = function () { this.language = ' . t3lib_div::quoteJSvalue($tsSettings['disqusLang']) . '; }; (function() { var dsq = document.createElement("script"); dsq.type = "text/javascript"; dsq.async = true; dsq.src = "http://" + disqus_shortname + ".disqus.com/embed.js"; (document.getElementsByTagName("head")[0] || document.getElementsByTagName("body")[0]).appendChild(dsq); })(); </script>'; return $code; }
/** * Render link to news item or internal/external pages * * @param Tx_News_Domain_Model_News $newsItem current news object * @param array $settings * @param boolean $uriOnly return only the url without the a-tag * @param array $configuration optional typolink configuration * @return string link */ public function render(Tx_News_Domain_Model_News $newsItem, array $settings = array(), $uriOnly = FALSE, $configuration = array()) { $tsSettings = $this->pluginSettingsService->getSettings(); /** @var $cObj tslib_cObj */ $cObj = t3lib_div::makeInstance('tslib_cObj'); $newsType = (int) $newsItem->getType(); switch ($newsType) { // internal news case 1: $configuration['parameter'] = $newsItem->getInternalurl(); break; // external news // external news case 2: $configuration['parameter'] = $newsItem->getExternalurl(); break; // normal news record // normal news record default: $detailPid = 0; $detailPidDeterminationMethods = t3lib_div::trimExplode(',', $settings['detailPidDetermination'], TRUE); // if TS is not set, prefer flexform setting if (!isset($settings['detailPidDetermination'])) { $detailPidDeterminationMethods[] = 'flexform'; } foreach ($detailPidDeterminationMethods as $determinationMethod) { if ($callback = $this->detailPidDeterminationCallbacks[$determinationMethod]) { if ($detailPid = call_user_func(array($this, $callback), $settings, $newsItem)) { break; } } } if (!$detailPid) { $detailPid = $GLOBALS['TSFE']->id; } $configuration['useCacheHash'] = 1; $configuration['parameter'] = $detailPid; $configuration['additionalParams'] .= '&tx_news_pi1[news]=' . $newsItem->getUid(); if ((int) $tsSettings['link']['skipControllerAndAction'] !== 1) { $configuration['additionalParams'] .= '&tx_news_pi1[controller]=News' . '&tx_news_pi1[action]=detail'; } // Add date as human readable (30/04/2011) if ($tsSettings['link']['hrDate'] == 1 || $tsSettings['link']['hrDate']['_typoScriptNodeValue'] == 1) { $dateTime = $newsItem->getDatetime(); if (!empty($tsSettings['link']['hrDate']['day'])) { $configuration['additionalParams'] .= '&tx_news_pi1[day]=' . $dateTime->format($tsSettings['link']['hrDate']['day']); } if (!empty($tsSettings['link']['hrDate']['month'])) { $configuration['additionalParams'] .= '&tx_news_pi1[month]=' . $dateTime->format($tsSettings['link']['hrDate']['month']); } if (!empty($tsSettings['link']['hrDate']['year'])) { $configuration['additionalParams'] .= '&tx_news_pi1[year]=' . $dateTime->format($tsSettings['link']['hrDate']['year']); } } } if (isset($tsSettings['link']['typesOpeningInNewWindow'])) { if (t3lib_div::inList($tsSettings['link']['typesOpeningInNewWindow'], $newsType)) { $this->tag->addAttribute('target', '_blank'); } } $url = $cObj->typoLink_URL($configuration); if ($uriOnly) { return $url; } $this->tag->addAttribute('href', $url); $this->tag->setContent($this->renderChildren()); return $this->tag->render(); }