OXID eShop CE  4.10.1
 All Classes Namespaces Files Functions Variables Pages
oxrssfeed.php
Go to the documentation of this file.
1 <?php
2 
8 class oxRssFeed extends oxSuperCfg
9 {
10 
14  const CACHE_TTL = 10800;
15 
19  const RSS_TOPSHOP = 'RSS_TopShop';
20  const RSS_NEWARTS = 'RSS_NewArts';
21  const RSS_CATARTS = 'RSS_CatArts';
22  // @deprecated since v5.3 (2016-06-17); Listmania will be moved to an own module.
23  const RSS_ARTRECOMMLISTS = 'RSS_ARTRECOMMLISTS';
24  const RSS_RECOMMLISTARTS = 'RSS_RECOMMLISTARTS';
25  // END deprecated
26  const RSS_BARGAIN = 'RSS_Bargain';
27 
34  protected $_aChannel = array();
35 
43  public function mapOxActionToFileCache($sOxActionId)
44  {
45  $aOxActionToCacheIds = array(
46  'oxbargain' => 'RSS_BARGAIN',
47  'oxtop5' => 'RSS_TopShop',
48  'oxnewest' => 'RSS_NewArts'
49  );
50 
51  $sFileCacheName = $aOxActionToCacheIds[$sOxActionId];
52 
53  if (is_null($sFileCacheName)) {
54  $sFileCacheName = '';
55  }
56 
57  return $sFileCacheName;
58  }
59 
66  public function getChannel()
67  {
68  return $this->_aChannel;
69  }
70 
76  public function removeCacheFile($sName)
77  {
78  $sFileKey = $this->mapOxActionToFileCache($sName);
79  $sFilePath = oxRegistry::getUtils()->getCacheFilePath($this->_getCacheId($sFileKey));
80 
81  $this->_deleteFile($sFilePath);
82  }
83 
89  protected function _loadBaseChannel()
90  {
91  $oShop = $this->getConfig()->getActiveShop();
92  $this->_aChannel['title'] = $oShop->oxshops__oxname->value;
93  $this->_aChannel['link'] = oxRegistry::get("oxUtilsUrl")->prepareUrlForNoSession($this->getConfig()->getShopUrl());
94  $this->_aChannel['description'] = '';
95  $oLang = oxRegistry::getLang();
96  $aLangIds = $oLang->getLanguageIds();
97  $this->_aChannel['language'] = $aLangIds[$oLang->getBaseLanguage()];
98  $this->_aChannel['copyright'] = $oShop->oxshops__oxname->value;
99  $this->_aChannel['selflink'] = '';
100  if (oxRegistry::getUtils()->isValidEmail($oShop->oxshops__oxinfoemail->value)) {
101  $this->_aChannel['managingEditor'] = $oShop->oxshops__oxinfoemail->value;
102  if ($oShop->oxshops__oxfname) {
103  $this->_aChannel['managingEditor'] .= " ({$oShop->oxshops__oxfname} {$oShop->oxshops__oxlname})";
104  }
105  }
106  //$this->_aChannel['webMaster'] = '';
107 
108  $this->_aChannel['generator'] = $oShop->oxshops__oxname->value;
109  $this->_aChannel['image']['url'] = $this->getConfig()->getImageUrl() . 'logo.png';
110 
111 
112  $this->_aChannel['image']['title'] = $this->_aChannel['title'];
113  $this->_aChannel['image']['link'] = $this->_aChannel['link'];
114  }
115 
124  protected function _getCacheId($name)
125  {
126  $oConfig = $this->getConfig();
127 
128  return $name . '_' . $oConfig->getShopId() . '_' . oxRegistry::getLang()->getBaseLanguage() . '_' . (int) $oConfig->getShopCurrency();
129  }
130 
139  protected function _loadFromCache($name)
140  {
141  if ($aRes = oxRegistry::getUtils()->fromFileCache($this->_getCacheId($name))) {
142  if ($aRes['timestamp'] > time() - self::CACHE_TTL) {
143  return $aRes['content'];
144  }
145  }
146 
147  return false;
148  }
149 
150 
161  protected function _getLastBuildDate($name, $aData)
162  {
163  if ($aData2 = oxRegistry::getUtils()->fromFileCache($this->_getCacheId($name))) {
164  $sLastBuildDate = $aData2['content']['lastBuildDate'];
165  $aData2['content']['lastBuildDate'] = '';
166  $aData['lastBuildDate'] = '';
167  if (!strcmp(serialize($aData), serialize($aData2['content']))) {
168  return $sLastBuildDate;
169  }
170  }
171 
172  return date('D, d M Y H:i:s O');
173  }
174 
187  protected function _saveToCache($name, $aContent)
188  {
189  $aData = array('timestamp' => time(), 'content' => $aContent);
190 
191  return oxRegistry::getUtils()->toFileCache($this->_getCacheId($name), $aData);
192  }
193 
194 
203  protected function _getArticleItems(oxArticleList $oList)
204  {
205  $myUtilsUrl = oxRegistry::get("oxUtilsUrl");
206  $aItems = array();
207  $oLang = oxRegistry::getLang();
208  $oStr = getStr();
209 
210  foreach ($oList as $oArticle) {
211  $oItem = new stdClass();
212  $oActCur = $this->getConfig()->getActShopCurrencyObject();
213  $sPrice = '';
214  if ($oPrice = $oArticle->getPrice()) {
215  $sFrom = ($oArticle->isRangePrice()) ? oxRegistry::getLang()->translateString('PRICE_FROM') : '';
216  $sPrice .= ' ' . $sFrom . $oLang->formatCurrency($oPrice->getBruttoPrice(), $oActCur) . " " . $oActCur->sign;
217  }
218  $oItem->title = strip_tags($oArticle->oxarticles__oxtitle->value . $sPrice);
219  $oItem->guid = $oItem->link = $myUtilsUrl->prepareUrlForNoSession($oArticle->getLink());
220  $oItem->isGuidPermalink = true;
221  // $oItem->description = $oArticle->getLongDescription()->value; //oxarticles__oxshortdesc->value;
222  //#4038: Smarty not parsed in RSS, although smarty parsing activated for longdescriptions
223  if (oxRegistry::getConfig()->getConfigParam('bl_perfParseLongDescinSmarty')) {
224  $oItem->description = $oArticle->getLongDesc();
225  } else {
226  $oItem->description = $oArticle->getLongDescription()->value;
227  }
228 
229  if (trim(str_replace('&nbsp;', '', (strip_tags($oItem->description)))) == '') {
230  $oItem->description = $oArticle->oxarticles__oxshortdesc->value;
231  }
232 
233  $oItem->description = trim($oItem->description);
234  if ($sThumb = $oArticle->getThumbnailUrl()) {
235  $oItem->description = "<img src='$sThumb' border=0 align='left' hspace=5>" . $oItem->description;
236  }
237  $oItem->description = $oStr->htmlspecialchars($oItem->description);
238 
239  if ($oArticle->oxarticles__oxtimestamp->value) {
240  list($date, $time) = explode(' ', $oArticle->oxarticles__oxtimestamp->value);
241  $date = explode('-', $date);
242  $time = explode(':', $time);
243  $oItem->date = date('D, d M Y H:i:s O', mktime($time[0], $time[1], $time[2], $date[1], $date[2], $date[0]));
244  } else {
245  $oItem->date = date('D, d M Y H:i:s O', time());
246  }
247 
248  $aItems[] = $oItem;
249  }
250 
251  return $aItems;
252  }
253 
264  protected function _prepareUrl($sUri, $sTitle)
265  {
266  $iLang = oxRegistry::getLang()->getBaseLanguage();
267  $sUrl = $this->_getShopUrl();
268  $sUrl .= $sUri . '&amp;lang=' . $iLang;
269 
270  if (oxRegistry::getUtils()->seoIsActive()) {
271  $oEncoder = oxRegistry::get("oxSeoEncoder");
272  $sUrl = $oEncoder->getDynamicUrl($sUrl, "rss/{$sTitle}/", $iLang);
273  }
274 
275  return oxRegistry::get("oxUtilsUrl")->prepareUrlForNoSession($sUrl);
276  }
277 
287  protected function _prepareFeedName($sTitle)
288  {
289  $oShop = $this->getConfig()->getActiveShop();
290 
291  return $oShop->oxshops__oxname->value . "/" . $sTitle;
292  }
293 
300  protected function _getShopUrl()
301  {
302  $sUrl = $this->getConfig()->getShopUrl();
303  $oStr = getStr();
304  if ($oStr->strpos($sUrl, '?') !== false) {
305  if (!$oStr->preg_match('/[?&](amp;)?$/i', $sUrl)) {
306  $sUrl .= '&amp;';
307  }
308  } else {
309  $sUrl .= '?';
310  }
311 
312  return $sUrl;
313  }
314 
329  protected function _loadData($sTag, $sTitle, $sDesc, $aItems, $sRssUrl, $sTargetUrl = null)
330  {
331  $this->_loadBaseChannel();
332 
333  $this->_aChannel['selflink'] = $sRssUrl;
334 
335  if ($sTargetUrl) {
336  $this->_aChannel['link'] = $this->_aChannel['image']['link'] = $sTargetUrl;
337  }
338 
339  $this->_aChannel['image']['title'] = $this->_aChannel['title'] = $sTitle;
340  $this->_aChannel['image']['description'] = $this->_aChannel['description'] = $sDesc;
341 
342  $this->_aChannel['items'] = $aItems;
343 
344  if ($sTag) {
345  $this->_aChannel['lastBuildDate'] = $this->_getLastBuildDate($sTag, $this->_aChannel);
346  $this->_saveToCache($sTag, $this->_aChannel);
347  } else {
348  $this->_aChannel['lastBuildDate'] = date('D, d M Y H:i:s O', oxRegistry::get("oxUtilsDate")->getTime());
349  }
350  }
351 
359  public function getTopInShopTitle()
360  {
361  $oLang = oxRegistry::getLang();
362  $iLang = $oLang->getBaseLanguage();
363 
364  return $this->_prepareFeedName($oLang->translateString('TOP_OF_THE_SHOP', $iLang));
365  }
366 
374  public function getTopInShopUrl()
375  {
376  return $this->_prepareUrl("cl=rss&amp;fnc=topshop", $this->getTopInShopTitle());
377  }
378 
386  public function loadTopInShop()
387  {
388  if (($this->_aChannel = $this->_loadFromCache(self::RSS_TOPSHOP))) {
389  return;
390  }
391 
392  $oArtList = oxNew('oxarticlelist');
393  $oArtList->loadTop5Articles($this->getConfig()->getConfigParam('iRssItemsCount'));
394 
395  $oLang = oxRegistry::getLang();
396  $this->_loadData(
397  self::RSS_TOPSHOP,
398  $this->getTopInShopTitle(),
399  $oLang->translateString('TOP_SHOP_PRODUCTS', $oLang->getBaseLanguage()),
400  $this->_getArticleItems($oArtList),
401  $this->getTopInShopUrl()
402  );
403  }
404 
405 
413  public function getNewestArticlesTitle()
414  {
415  $oLang = oxRegistry::getLang();
416  $iLang = $oLang->getBaseLanguage();
417 
418  return $this->_prepareFeedName($oLang->translateString('NEWEST_SHOP_PRODUCTS', $iLang));
419  }
420 
428  public function getNewestArticlesUrl()
429  {
430  return $this->_prepareUrl("cl=rss&amp;fnc=newarts", $this->getNewestArticlesTitle());
431  }
432 
440  public function loadNewestArticles()
441  {
442  if (($this->_aChannel = $this->_loadFromCache(self::RSS_NEWARTS))) {
443  return;
444  }
445  $oArtList = oxNew('oxarticlelist');
446  $oArtList->loadNewestArticles($this->getConfig()->getConfigParam('iRssItemsCount'));
447 
448  $oLang = oxRegistry::getLang();
449  $this->_loadData(
450  self::RSS_NEWARTS,
451  $this->getNewestArticlesTitle(),
452  $oLang->translateString('NEWEST_SHOP_PRODUCTS', $oLang->getBaseLanguage()),
453  $this->_getArticleItems($oArtList),
454  $this->getNewestArticlesUrl()
455  );
456  }
457 
458 
468  public function getCategoryArticlesTitle(oxCategory $oCat)
469  {
470  $oLang = oxRegistry::getLang();
471  $iLang = $oLang->getBaseLanguage();
472  $sTitle = $this->_getCatPath($oCat);
473 
474  return $this->_prepareFeedName($sTitle . $oLang->translateString('PRODUCTS', $iLang));
475  }
476 
484  protected function _getCatPath($oCat)
485  {
486  $sCatPathString = '';
487  $sSep = '';
488  while ($oCat) {
489  // prepare oCat title part
490  $sCatPathString = $oCat->oxcategories__oxtitle->value . $sSep . $sCatPathString;
491  $sSep = '/';
492  // load parent
493  $oCat = $oCat->getParentCategory();
494  }
495 
496  return $sCatPathString;
497  }
498 
508  public function getCategoryArticlesUrl(oxCategory $oCat)
509  {
510  $oLang = oxRegistry::getLang();
511 
512  return $this->_prepareUrl(
513  "cl=rss&amp;fnc=catarts&amp;cat=" . urlencode($oCat->getId()),
514  sprintf($oLang->translateString('CATEGORY_PRODUCTS_S', $oLang->getBaseLanguage()), $oCat->oxcategories__oxtitle->value)
515  );
516  }
517 
527  public function loadCategoryArticles(oxCategory $oCat)
528  {
529  $sId = $oCat->getId();
530  if (($this->_aChannel = $this->_loadFromCache(self::RSS_CATARTS . $sId))) {
531  return;
532  }
533 
534  $oArtList = oxNew('oxarticlelist');
535  $oArtList->setCustomSorting('oc.oxtime desc');
536  $oArtList->loadCategoryArticles($oCat->getId(), null, $this->getConfig()->getConfigParam('iRssItemsCount'));
537 
538  $oLang = oxRegistry::getLang();
539  $this->_loadData(
540  self::RSS_CATARTS . $sId,
541  $this->getCategoryArticlesTitle($oCat),
542  sprintf($oLang->translateString('S_CATEGORY_PRODUCTS', $oLang->getBaseLanguage()), $oCat->oxcategories__oxtitle->value),
543  $this->_getArticleItems($oArtList),
544  $this->getCategoryArticlesUrl($oCat),
545  $oCat->getLink()
546  );
547  }
548 
549 
562  public function getSearchArticlesTitle($sSearch, $sCatId, $sVendorId, $sManufacturerId)
563  {
564  return $this->_prepareFeedName(getStr()->htmlspecialchars($this->_getSearchParamsTranslation('SEARCH_FOR_PRODUCTS_CATEGORY_VENDOR_MANUFACTURER', $sSearch, $sCatId, $sVendorId, $sManufacturerId)));
565  }
566 
579  protected function _getSearchParamsUrl($sSearch, $sCatId, $sVendorId, $sManufacturerId)
580  {
581  $sParams = "searchparam=" . urlencode($sSearch);
582  if ($sCatId) {
583  $sParams .= "&amp;searchcnid=" . urlencode($sCatId);
584  }
585 
586  if ($sVendorId) {
587  $sParams .= "&amp;searchvendor=" . urlencode($sVendorId);
588  }
589 
590  if ($sManufacturerId) {
591  $sParams .= "&amp;searchmanufacturer=" . urlencode($sManufacturerId);
592  }
593 
594  return $sParams;
595  }
596 
607  protected function _getObjectField($sId, $sObject, $sField)
608  {
609  if (!$sId) {
610  return '';
611  }
612  $oObj = oxNew($sObject);
613  if ($oObj->load($sId)) {
614  return $oObj->$sField->value;
615  }
616 
617  return '';
618  }
619 
633  protected function _getSearchParamsTranslation($sSearch, $sId, $sCatId, $sVendorId, $sManufacturerId)
634  {
635  $oLang = oxRegistry::getLang();
636  $sCatTitle = '';
637  if ($sTitle = $this->_getObjectField($sCatId, 'oxcategory', 'oxcategories__oxtitle')) {
638  $sCatTitle = sprintf($oLang->translateString('CATEGORY_S', $oLang->getBaseLanguage()), $sTitle);
639  }
640  $sVendorTitle = '';
641  if ($sTitle = $this->_getObjectField($sVendorId, 'oxvendor', 'oxvendor__oxtitle')) {
642  $sVendorTitle = sprintf($oLang->translateString('VENDOR_S', $oLang->getBaseLanguage()), $sTitle);
643  }
644  $sManufacturerTitle = '';
645  if ($sTitle = $this->_getObjectField($sManufacturerId, 'oxmanufacturer', 'oxmanufacturers__oxtitle')) {
646  $sManufacturerTitle = sprintf($oLang->translateString('MANUFACTURER_S', $oLang->getBaseLanguage()), $sTitle);
647  }
648 
649  $sRet = sprintf($oLang->translateString($sSearch, $oLang->getBaseLanguage()), $sId);
650 
651  $sRet = str_replace('<TAG_CATEGORY>', $sCatTitle, $sRet);
652  $sRet = str_replace('<TAG_VENDOR>', $sVendorTitle, $sRet);
653  $sRet = str_replace('<TAG_MANUFACTURER>', $sManufacturerTitle, $sRet);
654 
655  return $sRet;
656  }
657 
670  public function getSearchArticlesUrl($sSearch, $sCatId, $sVendorId, $sManufacturerId)
671  {
672  $oLang = oxRegistry::getLang();
673  $sUrl = $this->_prepareUrl("cl=rss&amp;fnc=searcharts", $oLang->translateString('SEARCH', $oLang->getBaseLanguage()));
674 
675  $sJoin = '?';
676  if (strpos($sUrl, '?') !== false) {
677  $sJoin = '&amp;';
678  }
679 
680  return $sUrl . $sJoin . $this->_getSearchParamsUrl($sSearch, $sCatId, $sVendorId, $sManufacturerId);
681  }
682 
693  public function loadSearchArticles($sSearch, $sCatId, $sVendorId, $sManufacturerId)
694  {
695  // dont use cache for search
696  //if ($this->_aChannel = $this->_loadFromCache(self::RSS_SEARCHARTS.md5($sSearch.$sCatId.$sVendorId))) {
697  // return;
698  //}
699 
700  $oConfig = $this->getConfig();
701  $oConfig->setConfigParam('iNrofCatArticles', $oConfig->getConfigParam('iRssItemsCount'));
702 
703  $oArtList = oxNew('oxsearch')->getSearchArticles($sSearch, $sCatId, $sVendorId, $sManufacturerId, oxNew('oxarticle')->getViewName() . '.oxtimestamp desc');
704 
705  $this->_loadData(
706  // dont use cache for search
707  null,
708  //self::RSS_SEARCHARTS.md5($sSearch.$sCatId.$sVendorId),
709  $this->getSearchArticlesTitle($sSearch, $sCatId, $sVendorId, $sManufacturerId),
710  $this->_getSearchParamsTranslation('SEARCH_FOR_PRODUCTS_CATEGORY_VENDOR_MANUFACTURER', getStr()->htmlspecialchars($sSearch), $sCatId, $sVendorId, $sManufacturerId),
711  $this->_getArticleItems($oArtList),
712  $this->getSearchArticlesUrl($sSearch, $sCatId, $sVendorId, $sManufacturerId),
713  $this->_getShopUrl() . "cl=search&amp;" . $this->_getSearchParamsUrl($sSearch, $sCatId, $sVendorId, $sManufacturerId)
714  );
715  }
716 
726  public function getRecommListsTitle(oxArticle $oArticle)
727  {
728  $oLang = oxRegistry::getLang();
729  $iLang = $oLang->getBaseLanguage();
730 
731  return $this->_prepareFeedName(sprintf($oLang->translateString('LISTMANIA_LIST_FOR', $iLang), $oArticle->oxarticles__oxtitle->value));
732  }
733 
743  public function getRecommListsUrl(oxArticle $oArticle)
744  {
745  $oLang = oxRegistry::getLang();
746  $iLang = $oLang->getBaseLanguage();
747 
748  return $this->_prepareUrl(
749  "cl=rss&amp;fnc=recommlists&amp;anid=" . $oArticle->getId(),
750  $oLang->translateString("LISTMANIA", $iLang) . "/" . $oArticle->oxarticles__oxtitle->value
751  );
752  }
753 
763  protected function _getRecommListItems($oList)
764  {
765  $myUtilsUrl = oxRegistry::get("oxUtilsUrl");
766  $aItems = array();
767  foreach ($oList as $oRecommList) {
768  $oItem = new stdClass();
769  $oItem->title = $oRecommList->oxrecommlists__oxtitle->value;
770  $oItem->guid = $oItem->link = $myUtilsUrl->prepareUrlForNoSession($oRecommList->getLink());
771  $oItem->isGuidPermalink = true;
772  $oItem->description = $oRecommList->oxrecommlists__oxdesc->value;
773 
774  $aItems[] = $oItem;
775  }
776 
777  return $aItems;
778  }
779 
789  public function loadRecommLists(oxArticle $oArticle)
790  {
791  if (($this->_aChannel = $this->_loadFromCache(self::RSS_ARTRECOMMLISTS . $oArticle->getId()))) {
792  return;
793  }
794 
795  $oConfig = $this->getConfig();
796  $oConfig->setConfigParam('iNrofCrossellArticles', $oConfig->getConfigParam('iRssItemsCount'));
797 
798  $oList = oxNew('oxrecommlist')->getRecommListsByIds(array($oArticle->getId()));
799  if ($oList == null) {
800  $oList = oxNew('oxlist');
801  }
802 
803  $oLang = oxRegistry::getLang();
804  $this->_loadData(
805  self::RSS_ARTRECOMMLISTS . $oArticle->getId(),
806  $this->getRecommListsTitle($oArticle),
807  sprintf($oLang->translateString('LISTMANIA_LIST_FOR', $oLang->getBaseLanguage()), $oArticle->oxarticles__oxtitle->value),
808  $this->_getRecommListItems($oList),
809  $this->getRecommListsUrl($oArticle),
810  $oArticle->getLink()
811  );
812  }
813 
823  public function getRecommListArticlesTitle(oxRecommList $oRecommList)
824  {
825  $oLang = oxRegistry::getLang();
826  $iLang = $oLang->getBaseLanguage();
827 
828  return $this->_prepareFeedName(sprintf($oLang->translateString('LISTMANIA_LIST_PRODUCTS', $iLang), $oRecommList->oxrecommlists__oxtitle->value));
829  }
830 
840  public function getRecommListArticlesUrl(oxRecommList $oRecommList)
841  {
842  $oLang = oxRegistry::getLang();
843  $iLang = $oLang->getBaseLanguage();
844 
845  return $this->_prepareUrl(
846  "cl=rss&amp;fnc=recommlistarts&amp;recommid=" . $oRecommList->getId(),
847  $oLang->translateString("LISTMANIA", $iLang) . "/" . $oRecommList->oxrecommlists__oxtitle->value
848  );
849  }
850 
860  public function loadRecommListArticles(oxRecommList $oRecommList)
861  {
862  if (($this->_aChannel = $this->_loadFromCache(self::RSS_RECOMMLISTARTS . $oRecommList->getId()))) {
863  return;
864  }
865 
866  $oList = oxNew('oxarticlelist');
867  $oList->loadRecommArticles($oRecommList->getId(), ' order by oxobject2list.oxtimestamp desc limit ' . $this->getConfig()->getConfigParam('iRssItemsCount'));
868 
869  $oLang = oxRegistry::getLang();
870  $this->_loadData(
871  self::RSS_RECOMMLISTARTS . $oRecommList->getId(),
872  $this->getRecommListArticlesTitle($oRecommList),
873  sprintf($oLang->translateString('LISTMANIA_LIST_PRODUCTS', $oLang->getBaseLanguage()), $oRecommList->oxrecommlists__oxtitle->value),
874  $this->_getArticleItems($oList),
875  $this->getRecommListArticlesUrl($oRecommList),
876  $oRecommList->getLink()
877  );
878  }
879 
887  public function getBargainTitle()
888  {
889  $oLang = oxRegistry::getLang();
890  $iLang = $oLang->getBaseLanguage();
891 
892  return $this->_prepareFeedName($oLang->translateString('BARGAIN', $iLang));
893  }
894 
902  public function getBargainUrl()
903  {
904  return $this->_prepareUrl("cl=rss&amp;fnc=bargain", $this->getBargainTitle());
905  }
906 
914  public function loadBargain()
915  {
916  if (($this->_aChannel = $this->_loadFromCache(self::RSS_BARGAIN))) {
917  return;
918  }
919 
920  $oArtList = oxNew('oxarticlelist');
921  $oArtList->loadActionArticles('OXBARGAIN', $this->getConfig()->getConfigParam('iRssItemsCount'));
922 
923  $oLang = oxRegistry::getLang();
924  $this->_loadData(
925  self::RSS_BARGAIN,
926  $this->getBargainTitle(),
927  $oLang->translateString('BARGAIN_PRODUCTS', $oLang->getBaseLanguage()),
928  $this->_getArticleItems($oArtList),
929  $this->getBargainUrl()
930  );
931  }
932 
938  public function getCacheTtl()
939  {
940  return self::CACHE_TTL;
941  }
942 
950  protected function _deleteFile($sFilePath)
951  {
952  return @unlink($sFilePath);
953  }
954 }