Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
63 changes: 63 additions & 0 deletions ClassCache.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,63 @@
<?php

require($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/prolog_before.php");

class iElemsCached{

public $cache_time;
public $cache_path;
public $cache;

function __construct($cache_time=3600, $cache_path="icache"){
$this->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 "<pre>";
var_dump($testing_glist);
echo"</pre>";
58 changes: 29 additions & 29 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,29 +1,29 @@
# Тестовое задание для разработчика
<ol>
<li>Форкнуть текущий репозиторий.</li>
<li>Создать ветку test-#ФАМИЛИЯ_ЛАТИНИЦЕЙ#.</li>
<li>Реализовать в репозитории следующий функционал
<ul>
<li>Создать php класс по работе с инфоблоками, в котором будет реализован кешированный метод получения списка элементов инфоблока. Метод должен быть гибким (возможность задать сортировку, фильтр, список выбираемых полей при вызове метода)</li>
<li>
Новостной сайт Lenta.ru отдает список новостей в формате rss по адресу https://lenta.ru/rss. Необходимо создать скрипт getLastNews.php, который при запуске из командной строки выведет последние 5 новостей в формате
<ul>
<li>
Название
</li>
<li>
Ссылка на новость
</li>
<li>
Анонс
</li>
</ul>
</li>
</ul>
</li>
<li>
Закрепить реализованный функционал коммитом и отправить коммит в репозиторий
</li>
</ol>

По результатам работы отписаться на адреса su@p-w-d.ru, a@p-w-d.ru, e@p-w-d.ru. и прикрепить в письмо архив с выполненным функционалом и ссылку на резюме.
# Тестовое задание для разработчика
<ol>
<li>Форкнуть текущий репозиторий.</li>
<li>Создать ветку test-#ФАМИЛИЯ_ЛАТИНИЦЕЙ#.</li>
<li>Реализовать в репозитории следующий функционал
<ul>
<li>Создать php класс по работе с инфоблоками, в котором будет реализован кешированный метод получения списка элементов инфоблока. Метод должен быть гибким (возможность задать сортировку, фильтр, список выбираемых полей при вызове метода)</li>
<li>
Новостной сайт Lenta.ru отдает список новостей в формате rss по адресу https://lenta.ru/rss. Необходимо создать скрипт getLastNews.php, который при запуске из командной строки выведет последние 5 новостей в формате
<ul>
<li>
Название
</li>
<li>
Ссылка на новость
</li>
<li>
Анонс
</li>
</ul>
</li>
</ul>
</li>
<li>
Закрепить реализованный функционал коммитом и отправить коммит в репозиторий
</li>
</ol>
По результатам работы отписаться на адреса su@p-w-d.ru, a@p-w-d.ru, e@p-w-d.ru. и прикрепить в письмо архив с выполненным функционалом и ссылку на резюме.
15 changes: 15 additions & 0 deletions Rss.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
<?php

$url = "https://lenta.ru/rss";
$count = 5;
$response = simplexml_load_file($url);
$items = array();

foreach($response->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';
}