From 3e8f5c9817edffb40b2be83b29710734b163fe6e Mon Sep 17 00:00:00 2001 From: Dmitry Dobrokhvalov Date: Tue, 14 May 2019 00:08:05 +0300 Subject: [PATCH] test work --- getLastNews.php | 21 +++++++++++ iblock_list_class.php | 81 +++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 102 insertions(+) create mode 100644 getLastNews.php create mode 100644 iblock_list_class.php diff --git a/getLastNews.php b/getLastNews.php new file mode 100644 index 0000000..c9c0690 --- /dev/null +++ b/getLastNews.php @@ -0,0 +1,21 @@ +channel->item as $item){ + if(count($items) < $count){ + $items[] = array('title'=>$item->title->__toString(), 'link'=>$item->link->__toString(), 'description'=>$item->description->__toString()); + } +} + +foreach ($items as $item){ + print $item['title'].' '.$item['link'].' '.$item['description'].'/n'; +} diff --git a/iblock_list_class.php b/iblock_list_class.php new file mode 100644 index 0000000..6f2a22f --- /dev/null +++ b/iblock_list_class.php @@ -0,0 +1,81 @@ +cache= new CPHPCache(); + $this->cache_time = $cache_time; + $this->cache_path = $cache_path; + } + + //Метод получения списка без кэша. Параметры метода полностью аналогичные CIBlockElement::GetList + private function getElementList($arOrder=array("SORT"=>"ASC"), $arFilter=array(), $arGroupBy=false, $arNavStartParams=false, $arSelectFields=array('ID','NAME')){ + CModule::IncludeModule('iblock'); + $res = CIBlockElement::GetList($arOrder, $arFilter, $arGroupBy, $arNavStartParams, $arSelectFields); + $arResult = array(); + while($rec = $res->fetch()){ + $arResult[] = $rec; + } + return $arResult; + } + + //Метод с кэшем. Параметры метода полностью аналогичные CIBlockElement::GetList и предыдущему методу. + public function getCachedElementList($arOrder=array("SORT"=>"ASC"), $arFilter=array(), $arGroupBy=false, $arNavStartParams=false, $arSelectFields=array('ID','NAME')){ + $arParams = array('arOrder'=>$arOrder, 'arFilter'=>$arFilter, 'arGroupBy'=>$arGroupBy, 'arNavStartParams'=>$arNavStartParams, 'arSelectFields'=>$arSelectFields); + + $cache_id=md5(serialize($arParams)); + $arResult = false; + //дебаг параметров кэша + /*print_r("
");
+		print_r(array($this->cache_time, $cache_id, $this->cache_path));
+		print_r("
");*/ + /** + * Если есть кэш и он не просрочен + * берем данные из кэша + */ + if ($this->cache_time > 0 && $this->cache->InitCache($this->cache_time, $cache_id, $this->cache_path)){ + $cache_res = $this->cache->GetVars(); + if (is_array($cache_res["arResult"]) && (count($cache_res["arResult"]) > 0)){ + $arResult = $cache_res["arResult"]; + //print_r("из кэша"); + } + }else{ + /** + * иначе чистим кэш + */ + $this->clearCache(); + } + + /** + * Если кэш пустой или просрочен + * или время жизни кэша = 0 + * получаем данные из ИБ некэшированным методом. + */ + if(!$arResult){ + $arResult = $this->getElementList($arOrder, $arFilter, $arGroupBy, $arNavStartParams, $arSelectFields); + //print_r("без кэша"); + if ($this->cache_time > 0) + { + $this->cache->StartDataCache($this->cache_time, $cache_id, $this->cache_path); + $this->cache->EndDataCache(array("arResult"=>$arResult)); + } + } + return $arResult; + } + + private function clearCache(){ + $this->cache->CleanDir( $this->cache_path ); + } +} + +$test_obj = new testIblockElementList(300); +$test_list = $test_obj->getCachedElementList(array("SORT"=>"ASC"), array("IBLOCK_ID"=>"1")); +print_r("
");
+print_r($test_list);
+print_r("
");