22
33namespace Prokl \BitrixOrdinaryToolsBundle \Services \Iblock ;
44
5+ use Bitrix \Iblock \IblockTable ;
56use Bitrix \Main \ArgumentException ;
67use CFile ;
78use CIBlock ;
1314 */
1415class IblockManager
1516{
17+ /**
18+ * @var integer $defaultCacheTTl Время жизни кэша по умолчанию.
19+ */
20+ private $ defaultCacheTTl = 86400 ;
21+
1622 /** ID инфоблока по коду.
1723 *
1824 * @param string $iblockType Тип инфоблока.
1925 * @param string $iblockCode Код инфоблока.
2026 * @return mixed
2127 *
22- * @throws ArgumentException
28+ * @throws ArgumentException Когда инфоблок не найден.
2329 */
24- public function getIBlockIdByCode (string $ iblockType , string $ iblockCode )
30+ public function getIBlockIdByCode (string $ iblockType , string $ iblockCode ) : int
2531 {
26- $ res = CIBlock::GetList (
27- [],
28- ['ACTIVE ' => 'Y ' , 'TYPE ' => $ iblockType , 'CODE ' => $ iblockCode ]
29- );
30- $ arResult = $ res ->Fetch ();
31- if ($ arResult ['ID ' ] > 0 ) {
32- return $ arResult ['ID ' ];
32+ $ iBlockTable = IblockTable::getList ([
33+ 'select ' => ['ID ' ],
34+ 'filter ' => ['=CODE ' => $ iblockCode , "=TYPE " => $ iblockType ],
35+ 'cache ' => ['ttl ' => $ this ->defaultCacheTTl ],
36+ ]);
37+
38+ if ($ iblockData = $ iBlockTable ->fetch ()) {
39+ return (int )$ iblockData ['ID ' ];
3340 }
3441
3542 throw new ArgumentException ('Инфоблок ' .$ iblockCode .' не найден ' , $ iblockCode );
3643 }
3744
38- /**
39- * ID инфоблока по его коду из кэша.
40- *
41- * @param string $sIBlockType Тип инфоблока.
42- * @param string $sIBlockCode Код инфоблока.
43- *
44- * @return integer
45- */
46- public function getIBlockIdByCodeCached (string $ sIBlockType , string $ sIBlockCode )
47- {
48- $ cacher = CacherFacade::setCacheId ($ sIBlockType . $ sIBlockCode )
49- ->setCallback ([$ this , 'getIBlockIdByCode ' ])
50- ->setCallbackParams ($ sIBlockType , $ sIBlockCode )
51- ->setTtl (604800 );
52-
53-
54- return $ cacher ->returnResultCache ();
55- }
56-
5745 /**
5846 * Описание инфоблока.
5947 *
60- * @param string $typeIblock
61- * @param string $codeIblock
48+ * @param string $iblockType Тип инфоблока.
49+ * @param string $iblockCode Код инфоблока.
50+ *
6251 * @return mixed
63- * @throws ArgumentException
52+ * @throws ArgumentException Когда инфоблок не найден.
6453 */
65- public function getIBlockDescriptionByCode (string $ typeIblock , string $ codeIblock )
54+ public function getIBlockDescriptionByCode (string $ iblockType , string $ iblockCode )
6655 {
67- $ res = CIBlock::GetList (
68- [],
69- ['ACTIVE ' => 'Y ' , 'TYPE ' => $ typeIblock , 'CODE ' => $ codeIblock ]
70- );
56+ $ iBlockTable = IblockTable::getList ([
57+ 'select ' => ['ID ' , 'DESCRIPTION ' ],
58+ 'filter ' => ['=ACTIVE ' => 'Y ' , '=CODE ' => $ iblockCode , "=TYPE " => $ iblockType ],
59+ 'cache ' => ['ttl ' => $ this ->defaultCacheTTl ],
60+ ]);
7161
72- $ arResult = $ res ->Fetch ();
62+ $ arResult = $ iBlockTable ->Fetch ();
7363 if ($ arResult ['ID ' ] > 0 ) {
7464 return $ arResult ['DESCRIPTION ' ];
7565 }
7666
77- throw new ArgumentException ('Инфоблок ' .$ codeIblock .' не найден ' , $ codeIblock );
78- }
79-
80- /**
81- * Описание инфоблока по его коду из кэша.
82- *
83- * @param string $sIBlockType Тип инфоблока.
84- * @param string $sIBlockCode Код инфоблока.
85- *
86- * @return string
87- */
88- public function getIBlockDescriptionByCodeCached ($ sIBlockType , $ sIBlockCode )
89- {
90- /** @noinspection PhpUndefinedMethodInspection */
91- $ cacher = CacherFacade::setCacheId ('iblockDescription ' .$ sIBlockType . $ sIBlockCode )
92- ->setCallback ([$ this , 'getIBlockDescriptionByCode ' ])
93- ->setCallbackParams ($ sIBlockType , $ sIBlockCode )
94- ->setTtl (604800 );
95-
96-
97- return $ cacher ->returnResultCache ();
67+ throw new ArgumentException ('Инфоблок ' .$ iblockCode .' не найден ' , $ iblockCode );
9868 }
9969
10070 /**
@@ -120,7 +90,6 @@ public function getDescriptionById(int $iblockId) : string
12090 */
12191 public function getDescriptionByIdCached (int $ iblockId ) : string
12292 {
123- /** @noinspection PhpUndefinedMethodInspection */
12493 $ cacher = CacherFacade::setCacheId ('iblockDescription ' . $ iblockId )
12594 ->setCallback ([$ this , 'getDescriptionById ' ])
12695 ->setCallbackParams ($ iblockId )
@@ -152,7 +121,6 @@ public function getNameById(int $iblockId) : string
152121 */
153122 public function getNameByIdCached (int $ iblockId ) : string
154123 {
155- /** @noinspection PhpUndefinedMethodInspection */
156124 $ cacher = CacherFacade::setCacheId ('iblockName ' . $ iblockId )
157125 ->setCallback ([$ this , 'getNameById ' ])
158126 ->setCallbackParams ($ iblockId )
@@ -212,7 +180,6 @@ public function getIblockUrlByCode($arParams = ['TYPE', 'CODE'])
212180 */
213181 public function getIblockUrlByCodeCached ($ sIBlockType , $ sIBlockCode )
214182 {
215- /** @noinspection PhpUndefinedMethodInspection */
216183 $ cacher = CacherFacade::setCacheId ('iblockurl ' .$ sIBlockType . $ sIBlockCode )
217184 ->setCallback ([$ this , 'getIblockUrlByCode ' ])
218185 ->setCallbackParams ($ sIBlockType , $ sIBlockCode )
@@ -301,4 +268,12 @@ private function getFieldValue(int $iblockId, string $field)
301268
302269 return $ arData [$ field ];
303270 }
271+
272+ /**
273+ * @param integer $defaultCacheTTl
274+ */
275+ public function setCacheTTl (int $ defaultCacheTTl ): void
276+ {
277+ $ this ->defaultCacheTTl = $ defaultCacheTTl ;
278+ }
304279}
0 commit comments