Receiving data from the infoblock section by section with caching, for example, for a landing page
Rus
Eng
Получение данных из инфоблока посекционно с кешированием, например, для лендинга
I solve complex technical challenges for Bitrix and 1C—ranging from auditing existing code to website development and configuring complex integrations—with a guarantee of results.
Recommended

Website hosting

If you are choosing hosting for your project, I recommend Timeweb. Modern infrastructure, a wide range of plans from starter options to high-load VPS, and responsive tech support that actually helps instead of sending template replies. I host some of my own projects there and recommend it to my clients.

Go to site Affiliate link. The price remains the same for you.

All English-language materials have been translated fully automatically using the Google service

Quite often I am asked to make a fairly voluminous page with content located in the infoblock. Where sections are sections of the page, and section items are section list items or settings. Here is the code that I use for most of these cases

  if (CModule :: IncludeModule ("iblock")) {
    $ cntIBLOCK_List = 50;

    $ cache = new CPHPCache ();
    $ cache_time = 3600 * 12 * 7; // cache for a week
    $ cache_id = 'preferences'. $ cntIBLOCK_List;
    $ cache_path = 'preferences';
    if ($ cache_time> 0 && $ cache-> InitCache ($ cache_time, $ cache_id, $ cache_path))
    {
        $ res = $ cache-> GetVars ();
        if (is_array ($ res ["preferences"]) && (count ($ res ["preferences"])> 0)) {
            $ preferences = $ res ["preferences"];
        }
        $ preferences ['CACHE'] = 'true';

    }
    if (! is_array ($ preferences))
    {
        $ preferences ['CACHE'] = 'false';

        $ arFilter = Array ('IBLOCK_TYPE' => 'content', 'IBLOCK_ID' => $ cntIBLOCK_List, 'GLOBAL_ACTIVE' => 'Y');
        $ arSelect = array ("ID", "IBLOCK_ID", "NAME", "CODE", "UF_ *");

        $ rsCityList = CIBlockSection :: GetList (Array (), $ arFilter, true, $ arSelect);

        while ($ item = $ rsCityList-> GetNext ()) {

            $ preferences [$ item ['ID']] = $ item;

            $ arSort = array ('SORT' => 'ASC', 'ID' => 'DESC');
            $ arFilter = array ('ACTIVE' => 'Y', 'IBLOCK_ID' => $ cntIBLOCK_List, 'IBLOCK_SECTION_ID' => $ item ['ID']);
            $ arSelect = array ('ID', 'NAME', 'DETAIL_PAGE_URL', 'PREVIEW_TEXT');

            $ res = CIBlockElement :: getList ($ arSort, $ arFilter, false, array (), $ arSelect);
            while ($ row = $ res-> fetch ()) {
                $ preferences [$ item ['ID']] ['ITEMS'] [] = $ row;
            }

        }

        //////////// end cache /////////
        if ($ cache_time> 0)
        {
            $ cache-> StartDataCache ($ cache_time, $ cache_id, $ cache_path);
            $ cache-> EndDataCache (array ("preferences" => $ preferences));
        }
    }

}  
Aleksandr Tichiy
Author

Aleksandr Tichiy

Fullstack developer · 1C-Bitrix

I build and modernize online stores and corporate portals on 1C-Bitrix. Integrations with 1C, high-load performance, 152-FZ compliance. Writing about architecture and e-commerce.


Comments

There are no comments yet, you can be the first to leave it

Leave a comment

The site uses a comment pre-moderation system, so your message will be published only after approval by the moderator

You are replying to a user's comment

Send

FEEDBACK

Email me

Please message me to discuss the task. I work remotely and officially (as a self-employed professional); my hourly rate is 1,800 RUB, and I can dedicate 3–4 hours a day to the project. I respond quickly, and the consultation is free.

An error occurred while sending, please try again after a while
Message sent successfully

Phones

+7(993) 007-18-96

Email

info@tichiy.ru

Address

Россия, г. Москва

By submitting the form, you automatically confirm that you have read and accept the Privacy Policy site