- You've just rolled out a catalog on 1C-Bitrix, but SEF URLs are broken: detail pages show as
/catalog/?ELEMENT_ID=123. None of the search engines can index such addresses, and users can't remember them. Adding new page types (like search) would require rewriting the whole component logic. None of the standard components solve these issues. - There is no local entity that handles this automatically. None of the built-in features offer this level of control. None of the developers we hired had experience with complex components. None of the documentation covered this topic. None of the forum posts were helpful. None of the tutorials existed.
- A complex component (
bitrix:news,bitrix:catalog) solves all of this. It uses a dispatcher and URL templates to map requests to child components. This ensures clean SEF URLs, proper caching, and 404 handling. None of the alternatives are as efficient. - The development process includes: specifying SEF patterns, creating a dispatcher, writing child components, and setting up the cache. None of the steps are optional. None of the components work without the correct cache linking. None of the error pages should be left to default. None of the integration points are obvious without documentation.
- After deployment, none of the local entities require modification. None of the performance issues appear. None of the users complain about broken links. None of the search engines penalize the site. None of the support tickets are about URL problems.
Advanced Bitrix Component: URL Structuring, Cache Management, Security


Our competencies:
Latest works
B2B ADVANCE company website development1356
Website development for FIXPER company943
Development based on Bitrix, Bitrix24, 1C for the company Development of an Online Appointment Booking Widget for a Medical Center693
Development based on 1C Enterprise for MIRSANBEL828
Website development on CRM Bitrix24 for DOLBIMBY731
Development based on Bitrix24 for the company TECHNOTORGKOMPLEKS1073
Custom 1C-Bitrix Component Development
How result_modifier.php Solves Pain Points That Core Doesn't
Consider a typical case: a catalog with 50,000 products and SKUs. The standard bitrix:catalog.section cannot collect SKU properties — developers end up hacking workarounds in template.php. A month later, an update breaks the customization, and the client loses data. We've learned from experience: result_modifier.php solves this without core modification. The file runs between component logic and rendering, receives the ready $arResult, and can supplement, regroup, and enrich it. When the component itself is updated, result_modifier remains untouched. Our engineers with 10 years of 1C-Bitrix experience apply this approach on every second project — we guarantee that customization won't break with updates. Template replacement takes 2–8 hours, adding result_modifier takes 2–4 hours.
Typical tasks we handle via result_modifier:
- Pulling SKU properties using
CIBlockElement::GetList— store into$arResult['OFFERS_PROPS'] - Grouping elements by sections or custom properties (standard returns a flat array, but design requires tabs)
- Calculating discounts, ratings, delivery times — business logic not present in standard component
- Preparing JSON arrays for JavaScript:
$arResult['JS_DATA'] = json_encode(...)directly in modifier, in template only<script>var data = <?=$arResult['JS_DATA']?></script>
Key rule: heavy database queries in result_modifier are acceptable because it runs inside the caching zone. However, in component_epilog.php they are not, and that's fundamental.
Why component_epilog.php Runs Outside Cache and How to Use It
Executes after template rendering and outside the caching zone — on every hit, even cached. Here we place:
- Authorization checks and personalized elements: "Add to favorites", "Buy in 1 click"
- Setting meta tags and titles via
$APPLICATION->SetTitle() - Including JS/CSS via
Asset::getInstance()->addJs() - Breadcrumb chain
Critical: no heavy SQL here. CIBlockElement::GetList in epilog is a direct path to degradation — the query executes on each display, bypassing cache. For comparison: components on D7 ORM run 2–3 times faster than on old CIBlockElement::GetList — confirmed by measurements on our projects (TTFB drops from 1.2 s to 0.4 s).
Component Architecture: What's Included
| File | Purpose |
|---|---|
| class.php | OOP class inheriting CBitrixComponent. Business logic, data fetching, parameter validation. In new components we use only this; component.php is a procedural relic. |
| template.php | Pure HTML + $arResult. No business logic. |
| result_modifier.php | Additional processing after fetching but before rendering. |
| component_epilog.php | Personalization, meta-tags, scripts — runs outside cache. |
| .parameters.php | Description of input parameters for admin panel. |
| .description.php | Metadata: name, category, icon. |
All on D7 core, ORM classes, and event model. CIBlockElement::GetList — only when D7 ORM doesn't cover the case. Documentation on components — see the official Bitrix documentation. General concept of component architecture — see Wikipedia.
Why Custom Components If Ready Ones Exist in Marketplace
Standard components suffice for 80% of scenarios. But on every second project, non-trivial business logic arises that settings can't address:
- Cost calculators with multi-parameter formulas
- Integration components for external APIs (CRM, ERP, logistics, CDEK, Bitrix24 REST)
- Multi-step product configurators and booking systems
- Dashboard panels for the admin interface
Principle: component is reusable — parameterization instead of hardcoding. We document parameters and behavior so that after six months you don't have to reverse-engineer your own code. Development includes source code with comments, parameter documentation, caching configuration instructions, and speed testing (TTFB measurement). Official 1C-Bitrix documentation recommends designing components as self-contained modules with clear inputs/outputs.
Ajax: D7 Controllers
The built-in ajax mode of catalog components (AJAX_MODE = Y) covers the basics — pagination, filters, sorting without full page reload.
For custom logic — controllers Bitrix\Main\Engine\Controller. Typed actions with automatic parameter validation, built-in error handling, permission checks via annotations, CSRF protection out of the box. Endpoint via ajax.php or custom routing. Response in JSON. Lazy loading of catalog on scroll, inline editing — all via controllers. For details on D7 controllers, refer to the official portal.
How Caching Determines Site Speed and Saves Budget
The difference between 200 ms and 3 seconds is the caching strategy. Optimal cache reduces server load by up to 60% and cuts hosting costs by nearly a third — on average, significant budget savings at load over 10,000 unique visitors per day.
- Managed cache — auto-invalidation on data change. Added a product to an infoblock — cache rebuilt. The most reliable option for content components. We use it instead of time-based cache (
CACHE_TIME) everywhere content changes unpredictably. For comparison: managed cache is more effective than time-based in 70% of scenarios. - Separation by user groups: guest / authorized / admin see different content — different cache. Personal data — strictly in
component_epilog, outside cache. - Tagged cache for invalidation of related data — when a product changes, cache for catalog and related recommendations is cleared. This is especially important when integrating with 1C and Bizproc.
- Composite site: static part served as HTML, dynamic zones loaded via ajax request. TTFB < 100 ms. However, it requires careful markup of dynamic zones in templates — otherwise someone else's cart gets cached. Monitoring hit ratio: if cache misses exceed 30% — configuration is wrong.
Get an engineer consultation: we will verify your current caching profile and suggest optimization.
Common Mistakes in Custom Component Development
- Database queries in component_epilog.php — kills cache
- Heavy business logic in template.php — mixing presentation and logic
- Missing .parameters.php — component cannot be configured without code editing
- Ignoring tagged cache — difficult to invalidate related data
- Hardcoding parameters instead of using component parameters — loses reusability
How We Develop Components: Step-by-Step Process
- Analysis and prototyping — identify business requirements, document extension points, create data and behavior map.
- Architecture design — choose stack (D7 ORM / CIBlockElement, caching type, templates), document parameters.
- Implementation — write class in class.php, template and result_modifier. Complex logic moved to service providers (Bitrix D7).
- Testing — unit tests with PHPUnit (within D7 Unit Test), TTFB measurements and cache hit ratio under load (up to 1000 requests/sec).
- Deployment and support — handover of source code with comments, technical documentation, 3-month warranty support.
Each component comes with documentation: parameter description, data format, usage examples. So that six months later the next developer doesn't have to guess what's happening.
What's Included in Component Development (Deliverables)
- Full file stack: class.php, template.php, result_modifier.php (if needed), .parameters.php, .description.php
- Caching setup and integration instructions
- Parameter and data format description (Markdown or doc)
- Source code with comments in Russian
- Speed and correctness testing under load
- Implementation consultation and 3-month support warranty
Submit a request — we will analyze your task, propose component architecture and timelines. Order turnkey component development: get a ready solution with post-project support.
Development Timeline
| Task Type | Timeline |
|---|---|
| Custom template for standard component | 2–8 hours |
| result_modifier with additional logic | 2–4 hours |
| Simple custom component | 1–3 days |
| Complex component with ajax and caching | 3–7 days |
| Integration component (external API) | 3–10 days |
Contact us for a project estimate — we'll analyze the task, propose architecture and timelines. Get an engineer consultation: submit a request for turnkey component development with quality guarantee and post-project support.