Language School Website Development on 1C-Bitrix
A language school sells a result, not a product: "speak English in 3 months." The website should not just list courses but help a potential student determine their level, find a suitable group, and enroll — without a phone call. On 1C-Bitrix, this is implemented through information blocks with multidimensional filtering, a custom testing component, and integration with online learning platforms.
Course Catalog: Three-Dimensional Structure
The main challenge of a language school catalog is three filtering axes: language, level, format. A student needs to quickly find "English, B1, group class, evening time."
The "Courses" information block contains first-level sections by languages (English, German, French, Spanish, Chinese), second-level sections by programs (General, Business, Exam Prep, Conversational). Element properties:
- Level (multiselect list): A1, A2, B1, B2, C1, C2 according to CEFR
- Format (list): group class, mini-group (3-5 people), individual, online group, online individual
- Intensity (list): standard (2x/week), intensive (4-5x/week), weekend
- Duration (number): number of academic hours
- Age Group (list): children 7-10, teens 11-15, adults 16+
- Learning Outcome (text): what the student will be able to do after the course
Filtering is implemented via bitrix:catalog.smart.filter with AJAX. Three dropdown lists (language → level → format) work in cascade: selecting a language loads only available levels.
Online Enrollment with Group Selection
The "Groups" Highload block is similar in structure to the driving school catalog but with additions:
- UF_TEACHER_ID — binding to the "Teachers" information block
- UF_LEVEL — group level
- UF_WEEKDAYS — class days (bitmask: MON=1, TUE=2, WED=4...)
- UF_TIME_START — class start time
- UF_CLASSROOM — classroom / Zoom link
The enrollment form suggests suitable groups based on the level test result. If the test is completed and the result saved in the profile — the "Level" field is filled automatically, and the student only needs to choose a convenient schedule.
Integration with LMS and Zoom
For online format, integration with LMS (Moodle, iSpring) and Zoom/Google Meet is necessary. Integration works via REST API:
- When creating a group with "online" format, a recurring meeting is automatically created in Zoom via API and the link is recorded in the group property
- Access to the link opens in the personal account only for enrolled students after payment
- Lesson materials (presentations, audio, homework) are stored in the "Materials" information block with binding to course and lesson
Student Personal Account
The account is built on a custom bitrix:main.profile template with tabs:
- My Courses — active, completed, upcoming
- Schedule — calendar view with color coding by languages
- Homework — list with deadlines and statuses (new / submitted / checked)
-
Payment — payment history, debts, link to online payment via
salemodule - Test Results — level dynamics, recommendations for advancing to the next level
Level Determination Test: Deep-Dive
The level test is a critical conversion point. A visitor arrives with the request "I want to learn English" but doesn't know their level. If you suggest a phone call — conversion drops. If you let them take a 15-minute test and immediately show suitable groups — they enroll.
Test Architecture
The "Test Questions" information block with sections by languages. Each language contains subsections by levels (A1–C2). Question properties:
- Type (list): grammar, vocabulary, reading, listening
- Level (list): A1–C2 — actual question level
- Question Text — detailed description
- Media — audio file for listening questions
- Answer Options — 3-4 string properties
- Correct Answer — option number
- Weight — numeric value for scoring algorithm
Adaptive Algorithm
The standard approach "50 questions from A1 to C2 in order" is long and boring. We implement an adaptive algorithm (simplified CAT — Computerized Adaptive Testing):
- Test starts with 5 B1-level questions (median level)
- If student answers 4-5 out of 5 correctly — next block is one level higher (B2)
- If fewer than 2 correct — one level lower (A2)
- If 2-3 correct — 5 more questions of the same level for refinement
- Test completes when algorithm determines stable level (two consecutive blocks with 60-80% result) or maximum 30 questions passed
Server-side part is a D7 controller (/api/placement-test/). Client sends answer to current question, server determines next question based on accumulated statistics. Correct answer numbers are not sent to client. Test state is stored in $_SESSION with backup save to Highload block (in case of tab closure — test can be resumed).
Result Routing
After test completion, the controller:
- Determines overall level by weighted average formula (grammar-type questions have weight 1.0, vocabulary — 0.8, reading — 1.2)
- Saves result in user profile (property
UF_LANGUAGE_LEVEL_{LANG}) - Retrieves from "Groups" Highload block with filter by language, level, and "Enrollment open" status
- Returns result page with blocks:
- Determined level with description ("B1 — Intermediate: you understand main ideas of texts, can communicate in most travel situations...")
- Recommended courses — cards from information block filtered by level
- Nearest groups — specific start dates, schedule, teacher
- Enrollment button — leads to form with pre-filled fields (language, level)
For unauthorized users, results are saved in cookie for 30 days. On registration, data is transferred to profile.
Retesting
Students who completed a course are offered to retake the test after 3 months. Trigger is automatic email notification via sale.personal.section and business process. "Before and after" comparison is displayed in personal account as a progress bar with two marks.
Promotions and Referral Program
The "Promotions" information block with validity dates (ACTIVE_FROM, ACTIVE_TO) and types:
-
Refer a Friend — referral link is generated in personal account, when new student enrolls via link both get discount (coupons from
salemodule) - Corporate Training — separate landing with application form, calculation by number of employees
- Seasonal — summer intensive, IELTS preparation before deadlines
Corporate applications are processed separately: data enters Bitrix24 CRM via REST API webhook.
Stages and Timeline
| Stage | What We Do | Timeline |
|---|---|---|
| Analysis | Course map, "language × level × format" matrix, test requirements | 5–7 days |
| Design | Wireframes, information block structure, adaptive test algorithm | 7–10 days |
| UI Design | Mockups, UI-kit, mobile responsive | 10–14 days |
| Catalog Development | Information blocks, filtering, course cards, group pages | 10–14 days |
| Level Test | Component, adaptive algorithm, result page | 10–12 days |
| Personal Account & Integrations | Student cabinet, Zoom API, payment | 10–14 days |
| Content & Testing | Question database population, QA | 7–10 days |
Total Timeline — 9–12 weeks. Question database population for test (minimum 120 questions per language, 20 per level) can run parallel with development.







