From 3b8f77652ecd3f9ffd8c7f090dd00a72a3c216d2 Mon Sep 17 00:00:00 2001 From: xantos008 Date: Tue, 9 Jul 2019 03:37:58 +0700 Subject: [PATCH] test-rykin Spend not a huge time. Less then 2 hours --- ClassCache.php | 63 ++++++++++++++++++++++++++++++++++++++++++++++++++ README.md | 58 +++++++++++++++++++++++----------------------- Rss.php | 15 ++++++++++++ 3 files changed, 107 insertions(+), 29 deletions(-) create mode 100644 ClassCache.php create mode 100644 Rss.php diff --git a/ClassCache.php b/ClassCache.php new file mode 100644 index 0000000..6a78708 --- /dev/null +++ b/ClassCache.php @@ -0,0 +1,63 @@ +cache= new CPHPCache(); + $this->cache_time = $cache_time; + $this->cache_path = $cache_path; + } + + 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; + } + + 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; + + 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"]; + } + }else{ + $this->clearCache(); + } + + if(!$arResult){ + $arResult = $this->getElementList($arOrder, $arFilter, $arGroupBy, $arNavStartParams, $arSelectFields); + 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 ); + } +} + +//Непосредственно Usage +$testing = new iElemsCached(300); +$testing_glist = $testing->getCachedElementList(array("SORT"=>"ASC"), array("IBLOCK_ID"=>"1")); +echo "
";
+var_dump($testing_glist);
+echo"
"; \ No newline at end of file diff --git a/README.md b/README.md index 1b297da..fd48c41 100644 --- a/README.md +++ b/README.md @@ -1,29 +1,29 @@ -# Тестовое задание для разработчика -
    -
  1. Форкнуть текущий репозиторий.
  2. -
  3. Создать ветку test-#ФАМИЛИЯ_ЛАТИНИЦЕЙ#.
  4. -
  5. Реализовать в репозитории следующий функционал -
      -
    • Создать php класс по работе с инфоблоками, в котором будет реализован кешированный метод получения списка элементов инфоблока. Метод должен быть гибким (возможность задать сортировку, фильтр, список выбираемых полей при вызове метода)
    • -
    • - Новостной сайт Lenta.ru отдает список новостей в формате rss по адресу https://lenta.ru/rss. Необходимо создать скрипт getLastNews.php, который при запуске из командной строки выведет последние 5 новостей в формате -
        -
      • - Название -
      • -
      • - Ссылка на новость -
      • -
      • - Анонс -
      • -
      -
    • -
    -
  6. -
  7. - Закрепить реализованный функционал коммитом и отправить коммит в репозиторий -
  8. -
- -По результатам работы отписаться на адреса su@p-w-d.ru, a@p-w-d.ru, e@p-w-d.ru. и прикрепить в письмо архив с выполненным функционалом и ссылку на резюме. +# Тестовое задание для разработчика +
    +
  1. Форкнуть текущий репозиторий.
  2. +
  3. Создать ветку test-#ФАМИЛИЯ_ЛАТИНИЦЕЙ#.
  4. +
  5. Реализовать в репозитории следующий функционал +
      +
    • Создать php класс по работе с инфоблоками, в котором будет реализован кешированный метод получения списка элементов инфоблока. Метод должен быть гибким (возможность задать сортировку, фильтр, список выбираемых полей при вызове метода)
    • +
    • + Новостной сайт Lenta.ru отдает список новостей в формате rss по адресу https://lenta.ru/rss. Необходимо создать скрипт getLastNews.php, который при запуске из командной строки выведет последние 5 новостей в формате +
        +
      • + Название +
      • +
      • + Ссылка на новость +
      • +
      • + Анонс +
      • +
      +
    • +
    +
  6. +
  7. + Закрепить реализованный функционал коммитом и отправить коммит в репозиторий +
  8. +
+ +По результатам работы отписаться на адреса su@p-w-d.ru, a@p-w-d.ru, e@p-w-d.ru. и прикрепить в письмо архив с выполненным функционалом и ссылку на резюме. diff --git a/Rss.php b/Rss.php new file mode 100644 index 0000000..cb8dfd7 --- /dev/null +++ b/Rss.php @@ -0,0 +1,15 @@ +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'; +} \ No newline at end of file