Сканер структуры файлов

Корневая папка: /home/d/docdelux/tech-stc.ru/public_html/hub

Всего папок: 17

Всего файлов: 25

Общий размер: 150,353 байт

Создано: 2026-06-23 04:55:35

=== СТРУКТУРА ПАПОК И ФАЙЛОВ ===

[DIR] _templates/
_templates/hub-template.php (5,475 байт)
[DIR] climate-and-loads/
climate-and-loads/index.php (11,393 байт)
[DIR] concrete-rebar/
concrete-rebar/index.php (16,895 байт)
[DIR] construction-materials/
construction-materials/config.php (3,149 байт)
construction-materials/index.php (109 байт)
[DIR] engineering-norms/
engineering-norms/index.php (12,132 байт)
[DIR] exterior-landscaping/
exterior-landscaping/config.php (5,498 байт)
exterior-landscaping/index.php (109 байт)
[DIR] foundations-earthworks/
foundations-earthworks/config.php (4,236 байт)
foundations-earthworks/index.php (109 байт)
[DIR] heating-hvac/
heating-hvac/config.php (4,374 байт)
heating-hvac/index.php (109 байт)
[DIR] insulation-materials/
insulation-materials/index.php (10,808 байт)
[DIR] pile-foundation/
pile-foundation/index.php (20,701 байт)
[DIR] roofing/
roofing/index.php (13,021 байт)
[DIR] smart-home-green-tech/
smart-home-green-tech/config.php (2,800 байт)
smart-home-green-tech/index.php (109 байт)
[DIR] soil-reference/
soil-reference/index.php (13,996 байт)
[DIR] structural-engineering/
structural-engineering/config.php (2,656 байт)
structural-engineering/index.php (109 байт)
[DIR] timber/
timber/index.php (13,330 байт)
[DIR] water-supply-plumbing/
water-supply-plumbing/config.php (3,707 байт)
water-supply-plumbing/index.php (109 байт)
[DIR] wooden-construction/
wooden-construction/config.php (5,310 байт)
wooden-construction/index.php (109 байт)

=== СОДЕРЖИМОЕ ФАЙЛОВ ===

========================================
ФАЙЛ #1: _templates/hub-template.php
Расширение: php
Размер: 5,475 байт
========================================
<?php /**  * Универсальный шаблон для страниц хабов (только калькуляторы)  * /hub/_templates/hub-template.php  */  // Подавляем предупреждение IDE о необъявленной переменной /** @var array $config */  // Защита от отсутствия конфига if (!isset($config) || !is_array($config)) {     $config = []; }  $protocol = isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] === 'on' ? 'https://' : 'http://'; $host = $_SERVER['HTTP_HOST']; $uri = $_SERVER['REQUEST_URI']; $canonicalUrl = $protocol . $host . $uri; $siteUrl = $protocol . $host;  $pageTitle = $config['title'] ?? 'Хаб | ТЕХСТАНДАРТ'; $description = $config['description'] ?? ''; $h1 = $config['h1'] ?? 'Хаб'; $keywords = $config['keywords'] ?? '';  // ========== ГЕНЕРАЦИЯ HTML-КОНТЕНТА ========== ob_start(); ?>  <div class="hub-container">          <!-- Вступление -->     <?php if (!empty($config['intro_text'])): ?>         <div class="hub-intro mb-5">             <p class="text-lead"><?= htmlspecialchars($config['intro_text']) ?></p>         </div>     <?php endif; ?>      <!-- Блок: Калькуляторы -->     <?php if (!empty($config['calculators'])): ?>         <div class="categories-grid">             <?php foreach ($config['calculators'] as $calc): ?>                 <?php                  // Генерируем slug из последней части URL                 $slug = basename(rtrim($calc['url'], '/'));                  ?>                 <a href="<?= htmlspecialchars($calc['url']) ?>" class="categories-card">                     <span class="categories-card-name"><?= htmlspecialchars($calc['title']) ?></span>                     <span class="categories-card-slug"><?= htmlspecialchars($slug) ?></span>                 </a>             <?php endforeach; ?>         </div>     <?php else: ?>         <div class="alert alert--info">Калькуляторы временно отсутствуют</div>     <?php endif; ?>  </div>  <?php $htmlContent = ob_get_clean();  // ========== JSON-LD МИКРОРАЗМЕТКА ========== $jsonLd = [];  // 1. WebPage $jsonLd[] = [     '@context' => 'https://schema.org',     '@type' => 'WebPage',     '@id' => $canonicalUrl,     'name' => $pageTitle,     'description' => $description,     'url' => $canonicalUrl,     'inLanguage' => 'ru-RU',     'dateModified' => date('Y-m-d'),     'isPartOf' => [         '@type' => 'WebSite',         'name' => 'Tech-stc.ru',         'url' => $siteUrl     ],     'breadcrumb' => ['@id' => $canonicalUrl . '#breadcrumb'] ];  // 2. BreadcrumbList $jsonLd[] = [     '@context' => 'https://schema.org',     '@type' => 'BreadcrumbList',     '@id' => $canonicalUrl . '#breadcrumb',     'itemListElement' => [         ['@type' => 'ListItem', 'position' => 1, 'name' => 'Главная', 'item' => $siteUrl . '/'],         ['@type' => 'ListItem', 'position' => 2, 'name' => $config['breadcrumb_name'] ?? $h1, 'item' => $canonicalUrl]     ] ];  // 3. CollectionPage $jsonLd[] = [     '@context' => 'https://schema.org',     '@type' => 'CollectionPage',     'name' => $h1,     'description' => $description,     'url' => $canonicalUrl ];  // 4. Organization $jsonLd[] = [     '@context' => 'https://schema.org',     '@type' => 'Organization',     '@id' => $siteUrl . '#organization',     'name' => 'ТЕХСТАНДАРТ',     'url' => $siteUrl,     'logo' => $siteUrl . '/assets/images/logo.png',     'sameAs' => [         'https://rutube.ru/channel/29434378/',         'https://t.me/techchsanel',         'https://vk.com/techstandart'     ] ];  // 5. WebSite + SearchAction $jsonLd[] = [     '@context' => 'https://schema.org',     '@type' => 'WebSite',     '@id' => $siteUrl . '#website',     'url' => $siteUrl,     'name' => 'ТЕХСТАНДАРТ',     'description' => 'Отраслевая платформа цифрового прототипирования',     'potentialAction' => [         '@type' => 'SearchAction',         'target' => [             '@type' => 'EntryPoint',             'urlTemplate' => $siteUrl . '/system/search/search.php?q={search_term_string}'         ],         'query-input' => 'required name=search_term_string'     ] ];  // ========== ПОДГОТОВКА ДАННЫХ ДЛЯ renderModule ========== // Проверяем, нужно ли добавлять "| ТЕХСТАНДАРТ" к заголовку $finalTitle = (strpos($pageTitle, 'ТЕХСТАНДАРТ') === false) ? $pageTitle . ' | ТЕХСТАНДАРТ' : $pageTitle;  $pageData = [     'title' => $finalTitle,     'description' => $description,     'h1' => $h1,     'content' => $htmlContent,          'breadcrumb' => [         ['name' => 'Главная', 'url' => '/'],         ['name' => $config['breadcrumb_name'] ?? $h1, 'url' => '']     ],          'template' => 'default',     'canonical_url' => $canonicalUrl,     'robots' => 'index, follow',     'keywords' => $keywords,          'og_title' => $finalTitle,     'og_description' => $description,     'og_image' => 'https://tech-stc.ru/assets/images/og/hub-og.jpg',     'og_type' => 'website',          'json_ld' => $jsonLd ];  require_once $_SERVER['DOCUMENT_ROOT'] . '/shell/render.php'; renderModule($pageData);
========================================
ФАЙЛ #2: climate-and-loads/index.php
Расширение: php
Размер: 11,393 байт
========================================
<?php declare(strict_types=1);  require_once $_SERVER['DOCUMENT_ROOT'] . '/regulations/lib/loader.php'; require_once $_SERVER['DOCUMENT_ROOT'] . '/shell/json-ld-hub-generator.php';  // 1. Загружаем данные из 4-х нормативов $tempData  = NormLoader::getTable('sp-131-13330-2020', 'appendix-a'); $frostData = NormLoader::getTable('sp-131-13330-2020', 'appendix-v'); $snowData  = NormLoader::getTable('sp-20-13330-2016',  'appendix-m'); $windData  = NormLoader::getTable('sp-20-13330-2016',  'appendix-n');  $cities = [];  // 2. Базовый список городов if ($tempData && !empty($tempData['rows'])) {     foreach ($tempData['rows'] as $row) {         $city = trim((string)$row[0]);         $cities[$city] = [             'name'        => $city,             't_ne'        => $row[1] ?? '—',             'frost_sand'  => '—',             'frost_loam'  => '—',             'frost_clay'  => '—',             'snow_s0'     => '—',             'snow_dist'   => '—',             'wind_w0'     => '—',             'wind_dist'   => '—',         ];     } }  // 3. Обогащаем данными if ($frostData && !empty($frostData['rows'])) {     foreach ($frostData['rows'] as $row) {         $city = trim((string)$row[0]);         if (isset($cities[$city])) {             $cities[$city]['frost_sand'] = $row[1] ?? '—';             $cities[$city]['frost_loam'] = $row[2] ?? '—';             $cities[$city]['frost_clay'] = $row[3] ?? '—';         }     } } if ($snowData && !empty($snowData['rows'])) {     foreach ($snowData['rows'] as $row) {         $city = trim((string)$row[0]);         if (isset($cities[$city])) {             $cities[$city]['snow_s0']   = $row[1] ?? '—';             $cities[$city]['snow_dist'] = $row[2] ?? '—';         }     } } if ($windData && !empty($windData['rows'])) {     foreach ($windData['rows'] as $row) {         $city = trim((string)$row[0]);         if (isset($cities[$city])) {             $cities[$city]['wind_w0']   = $row[1] ?? '—';             $cities[$city]['wind_dist'] = $row[2] ?? '—';         }     } }  ksort($cities, SORT_NATURAL | SORT_FLAG_CASE); $totalCities = count($cities);  // 4. Генерация HTML  ob_start(); ?> <div class="hub-container">          <p class="lead">Сводные климатические параметры для инженерных расчётов: температуры, глубина промерзания грунтов, снеговые и ветровые нагрузки (СП 131.13330.2020, СП 20.13330.2016).</p>      <!-- Блок калькуляторов -->     <div class="card mb-6">         <div class="card__body">             <h3>                 Инженерные расчёты             </h3>             <div class="btn-group flex-wrap">                 <a href="/engineering-calculators/foundations/foundation-calculation-depth-laying/" class="btn btn-primary btn-sm">                     Глубина заложения фундамента                 </a>                 <a href="/engineering-calculators/engineering-systems/heating-calculator-heat-loss-home/" class="btn btn-outline btn-sm">                     Теплопотери дома                 </a>                 <a href="/engineering-calculators/roofing/roof-calculator-snow-load/" class="btn btn-outline btn-sm">                    Снеговая нагрузка на кровлю                 </a>             </div>         </div>     </div>      <!-- Блок методик расчётов -->     <div class="card mb-6">         <div class="card__body">             <h3 class="card__title hub-card-title">                 Методики расчётов             </h3>             <div class="btn-group flex-wrap">                 <a href="/guides/foundation/foundation-reinforcement-calculation.php" class="btn btn-outline btn-sm">                     Расчёт армирования фундамента                 </a>                 <a href="/guides/foundation/concrete-calculation.php" class="btn btn-outline btn-sm">                     Расчёт бетона для фундамента                 </a>                 <a href="/guides/foundation/blind-area-calculation.php" class="btn btn-outline btn-sm">                     Расчёт отмостки                 </a>                 <a href="/guides/roof/flat-roof-calculation.php" class="btn btn-outline btn-sm">                     Расчёт плоской кровли                 </a>                 <a href="/guides/water/water-consumption-calculation.php" class="btn btn-outline btn-sm">                     Расчёт водопотребления                 </a>             </div>         </div>     </div>      <!-- Поиск -->     <div class="hub-search-box">         <i class="bi bi-search hub-search-icon"></i>         <input type="text" id="citySearch" class="hub-search-input" placeholder="Введите название города..." onkeyup="filterTable()">     </div>      <!-- Сводная таблица -->     <div class="table-responsive">         <table class="norm-table table-sticky-first-col" id="climateTable">             <thead>                 <tr>                     <th>Город</th>                     <th class="numeric">t<sub>н.е</sub>, °С</th>                     <th>Промерзание (песок), м</th>                     <th>Промерзание (суглинок), м</th>                     <th>Промерзание (глина), м</th>                     <th class="numeric">Снег S₀, кПа</th>                     <th>Снег. район</th>                     <th class="numeric">Ветер w₀, кПа</th>                     <th>Ветр. район</th>                 </tr>             </thead>             <tbody>                 <?php foreach ($cities as $city): ?>                 <tr>                     <td><?= htmlspecialchars($city['name']) ?></td>                     <td class="numeric"><?= htmlspecialchars($city['t_ne']) ?></td>                     <td class="numeric"><?= htmlspecialchars($city['frost_sand']) ?></td>                     <td class="numeric"><?= htmlspecialchars($city['frost_loam']) ?></td>                     <td class="numeric"><?= htmlspecialchars($city['frost_clay']) ?></td>                     <td class="numeric"><?= htmlspecialchars($city['snow_s0']) ?></td>                     <td><?= htmlspecialchars($city['snow_dist']) ?></td>                     <td class="numeric"><?= htmlspecialchars($city['wind_w0']) ?></td>                     <td><?= htmlspecialchars($city['wind_dist']) ?></td>                 </tr>                 <?php endforeach; ?>             </tbody>         </table>     </div>      <div class="mt-4 text-muted">         * Найдено городов: <span id="cityCount"><?= $totalCities ?></span>. Данные взяты напрямую из приложений СП.     </div> </div>  <script> function filterTable() {     const input = document.getElementById('citySearch');     const filter = input.value.toLowerCase();     const table = document.getElementById('climateTable');     const tr = table.getElementsByTagName('tr');     let visibleCount = 0;      for (let i = 1; i < tr.length; i++) {         const td = tr[i].getElementsByTagName('td')[0];         if (td) {             const txtValue = td.textContent || td.innerText;             if (txtValue.toLowerCase().indexOf(filter) > -1) {                 tr[i].style.display = '';                 visibleCount++;             } else {                 tr[i].style.display = 'none';             }         }     }     document.getElementById('cityCount').textContent = visibleCount; } </script>  <?php $htmlContent = ob_get_clean();  // 5. SEO и рендеринг $protocol = isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] === 'on' ? 'https://' : 'http://'; $host = $_SERVER['HTTP_HOST']; $uri = $_SERVER['REQUEST_URI']; $canonicalUrl = $protocol . $host . $uri;  // Вызов генератора микроразметки с ПОЛНЫМИ параметрами $jsonLd = generateHubJsonLd([     'title' => 'Климат и нагрузки по городам РФ',     'description' => 'Температуры, промерзание, снег, ветер',     'url' => $canonicalUrl,     'item_count' => $totalCities,     'hub_type' => 'dataset',     'source_norms' => ['СП 131.13330.2020', 'СП 20.13330.2016'],     'spatial_coverage' => 'Россия',     'breadcrumb' => [         ['name' => 'Главная', 'url' => '/'],         ['name' => 'Климат и нагрузки', 'url' => ''],     ],     // ПОЛНАЯ МИКРОРАЗМЕТКА:     'include_website' => true,     'date_published' => '2024-01-15',     'search_url' => 'https://tech-stc.ru/hub/climate-and-loads/?search={search_term_string}',     'tables' => [         [             'name' => 'Климатические параметры по городам РФ',             'description' => 'Температура холодной пятидневки, глубина промерзания грунтов, снеговая и ветровая нагрузки',             'citation' => 'СП 131.13330.2020, СП 20.13330.2016',             'rows' => $totalCities,             'columns' => 9,         ],     ],     'variable_measured' => [         'Температура холодной пятидневки (°С)',         'Глубина промерзания песков (м)',         'Глубина промерзания суглинков (м)',         'Глубина промерзания глин (м)',         'Снеговая нагрузка (кПа)',         'Снеговой район',         'Ветровая нагрузка (кПа)',         'Ветровой район',     ], ]);  $pageData = [     'title'         => 'Климат и нагрузки по городам РФ (СП 131, СП 20) | ТЕХСТАНДАРТ',     'description'   => 'Сводная таблица климатических параметров: температура, глубина промерзания грунтов, снеговые и ветровые нагрузки для всех крупных городов России.',     'h1'            => 'Справочник климата и нагрузок по городам РФ',     'content'       => $htmlContent,     'breadcrumb'    => [         ['name' => 'Главная', 'url' => '/'],         ['name' => 'Климат и нагрузки', 'url' => '']     ],     'template'      => 'default',     'canonical_url' => $canonicalUrl,     'robots'        => 'index, follow',     'keywords'      => 'глубина промерзания грунта, снеговая нагрузка по городам, ветровая нагрузка, температура холодной пятидневки, сп 131, сп 20',     'json_ld'       => $jsonLd ];  require_once $_SERVER['DOCUMENT_ROOT'] . '/shell/render.php'; renderModule($pageData);
========================================
ФАЙЛ #3: concrete-rebar/index.php
Расширение: php
Размер: 16,895 байт
========================================
<?php declare(strict_types=1);  require_once $_SERVER['DOCUMENT_ROOT'] . '/regulations/lib/loader.php'; require_once $_SERVER['DOCUMENT_ROOT'] . '/shell/json-ld-hub-generator.php';  // 1. Загружаем данные из СП 63 $concreteData = NormLoader::getTable('sp-63-13330-2018', 'appendix-a'); $rebarData = NormLoader::getTable('sp-63-13330-2018', 'appendix-b'); $coverData = NormLoader::getTable('sp-63-13330-2018', 'appendix-v');  $concreteGrades = []; $rebarGrades = []; $coverLayers = [];  // 2. Бетон: классы и марки if ($concreteData && !empty($concreteData['rows'])) {     foreach ($concreteData['rows'] as $row) {         $concreteGrades[] = [             'class' => $row[0] ?? '—',             'grade' => $row[1] ?? '—',             'tensile_class' => $row[2] ?? '—',             'tensile_grade' => $row[3] ?? '—',             'e_modulus' => $row[4] ?? '—',         ];     } }  // 3. Арматура: классы и характеристики if ($rebarData && !empty($rebarData['rows'])) {     foreach ($rebarData['rows'] as $row) {         $rebarGrades[] = [             'class' => $row[0] ?? '—',             'diameter' => $row[1] ?? '—',             'r_sn' => $row[2] ?? '—',             'r_s' => $row[3] ?? '—',             'r_sc' => $row[4] ?? '—',             'e_s' => $row[5] ?? '—',         ];     } }  // 4. Защитные слои бетона if ($coverData && !empty($coverData['rows'])) {     foreach ($coverData['rows'] as $row) {         $coverLayers[] = [             'structure' => $row[0] ?? '—',             'conditions' => $row[1] ?? '—',             'cover_b15_b25' => $row[2] ?? '—',             'cover_b30_plus' => $row[3] ?? '—',         ];     } }  $totalConcrete = count($concreteGrades); $totalRebar = count($rebarGrades); $totalCover = count($coverLayers);  // 5. Генерация HTML ob_start(); ?> <div class="hub-container">     <p class="lead">Справочник бетона и арматуры по СП 63.13330.2018: классы бетона, классы арматурной стали, защитные слои бетона для железобетонных конструкций.</p>      <!-- Блок калькуляторов -->     <div class="card mb-6">         <div class="card__body">             <h3 class="card__title hub-card-title">                 Расчёты железобетонных конструкций             </h3>             <div class="btn-group flex-wrap">                 <a href="/engineering-calculators/foundations/foundation-calculation-reinforcement-tape-foundation/" class="btn btn-primary btn-sm">                     Армирование ленточного фундамента                 </a>                 <a href="/engineering-calculators/structures/beams-calculator-reinforcement/" class="btn btn-outline btn-sm">                     Расчёт армирования балок                 </a>                 <a href="/engineering-calculators/foundations/foundation-calculation-pile-foundation/" class="btn btn-outline btn-sm">                     Расчёт свайного фундамента                 </a>             </div>         </div>     </div>      <!-- Блок методик расчётов -->     <div class="card mb-6">         <div class="card__body">             <h3 class="card__title hub-card-title">                 Методики расчётов             </h3>             <div class="btn-group flex-wrap">                 <a href="/guides/foundation/foundation-reinforcement-calculation.php" class="btn btn-outline btn-sm">                     Расчёт армирования фундамента                 </a>                 <a href="/guides/foundation/concrete-calculation.php" class="btn btn-outline btn-sm">                     Расчёт бетона для фундамента                 </a>                 <a href="/guides/foundation/blind-area-calculation.php" class="btn btn-outline btn-sm">                     Расчёт отмостки                 </a>                 <a href="/guides/roof/flat-roof-calculation.php" class="btn btn-outline btn-sm">                     Расчёт плоской кровли                 </a>                 <a href="/guides/water/water-consumption-calculation.php" class="btn btn-outline btn-sm">                     Расчёт водопотребления                 </a>             </div>         </div>     </div>      <!-- Поиск -->     <div class="hub-search-box">         <i class="bi bi-search hub-search-icon"></i>         <input type="text" id="materialSearch" class="hub-search-input" placeholder="Введите класс бетона, арматуры или тип конструкции..." onkeyup="filterTables()">     </div>      <!-- Таблица 1: Классы бетона -->     <h2 class="mt-5 mb-3">Классы и марки бетона (приложение А СП 63.13330)</h2>     <div class="table-responsive">         <table class="norm-table" id="concreteTable">             <thead>                 <tr>                     <th>Класс бетона (B)</th>                     <th class="numeric">Марка (M), кгс/см²</th>                     <th>Класс растяжения (Bt)</th>                     <th class="numeric">Марка растяжения, кгс/см²</th>                     <th class="numeric">Модуль упругости E_b, МПа</th>                 </tr>             </thead>             <tbody>                 <?php foreach ($concreteGrades as $item): ?>                 <tr data-material-name="<?= htmlspecialchars(strtolower($item['class'])) ?>">                     <td class="material-name"><?= htmlspecialchars($item['class']) ?></td>                     <td class="numeric"><?= htmlspecialchars($item['grade']) ?></td>                     <td><?= htmlspecialchars($item['tensile_class']) ?></td>                     <td class="numeric"><?= htmlspecialchars($item['tensile_grade']) ?></td>                     <td class="numeric"><?= htmlspecialchars($item['e_modulus']) ?></td>                 </tr>                 <?php endforeach; ?>             </tbody>         </table>     </div>      <!-- Таблица 2: Классы арматуры -->     <h2 class="mt-5 mb-3">Классы арматурной стали (приложение Б СП 63.13330)</h2>     <div class="table-responsive">         <table class="norm-table" id="rebarTable">             <thead>                 <tr>                     <th>Класс арматуры</th>                     <th>Диаметр, мм</th>                     <th class="numeric">R_sn, МПа</th>                     <th class="numeric">R_s, МПа</th>                     <th class="numeric">R_sc, МПа</th>                     <th class="numeric">E_s, МПа</th>                 </tr>             </thead>             <tbody>                 <?php foreach ($rebarGrades as $item): ?>                 <tr data-material-name="<?= htmlspecialchars(strtolower($item['class'])) ?>">                     <td class="material-name"><?= htmlspecialchars($item['class']) ?></td>                     <td><?= htmlspecialchars($item['diameter']) ?></td>                     <td class="numeric"><?= htmlspecialchars($item['r_sn']) ?></td>                     <td class="numeric"><?= htmlspecialchars($item['r_s']) ?></td>                     <td class="numeric"><?= htmlspecialchars($item['r_sc']) ?></td>                     <td class="numeric"><?= htmlspecialchars($item['e_s']) ?></td>                 </tr>                 <?php endforeach; ?>             </tbody>         </table>     </div>      <!-- Таблица 3: Защитные слои бетона -->     <h2 class="mt-5 mb-3">Защитные слои бетона (приложение В СП 63.13330)</h2>     <div class="table-responsive">         <table class="norm-table" id="coverTable">             <thead>                 <tr>                     <th>Тип конструкции</th>                     <th>Условия эксплуатации</th>                     <th class="numeric">Защитный слой, мм (B15-B25)</th>                     <th class="numeric">Защитный слой, мм (B30+)</th>                 </tr>             </thead>             <tbody>                 <?php foreach ($coverLayers as $item): ?>                 <tr data-material-name="<?= htmlspecialchars(strtolower($item['structure'])) ?>">                     <td class="material-name"><?= htmlspecialchars($item['structure']) ?></td>                     <td><?= htmlspecialchars($item['conditions']) ?></td>                     <td class="numeric"><?= htmlspecialchars($item['cover_b15_b25']) ?></td>                     <td class="numeric"><?= htmlspecialchars($item['cover_b30_plus']) ?></td>                 </tr>                 <?php endforeach; ?>             </tbody>         </table>     </div>      <div class="mt-4 text-muted">         * Найдено классов бетона: <span id="concreteCount"><?= $totalConcrete ?></span> |          Классов арматуры: <span id="rebarCount"><?= $totalRebar ?></span> |          Типов конструкций: <span id="coverCount"><?= $totalCover ?></span>     </div> </div>  <script> function filterTables() {     const input = document.getElementById('materialSearch');     const filter = input.value.trim().toLowerCase();          const concreteTable = document.getElementById('concreteTable');     const rebarTable = document.getElementById('rebarTable');     const coverTable = document.getElementById('coverTable');          const concreteRows = concreteTable.querySelectorAll('tbody tr');     const rebarRows = rebarTable.querySelectorAll('tbody tr');     const coverRows = coverTable.querySelectorAll('tbody tr');          let concreteVisible = 0;     let rebarVisible = 0;     let coverVisible = 0;          concreteRows.forEach(row => {         const nameCell = row.querySelector('td.material-name');         if (nameCell) {             const text = nameCell.textContent.trim().toLowerCase();             if (filter === '' || text.indexOf(filter) > -1) {                 row.style.display = '';                 concreteVisible++;             } else {                 row.style.display = 'none';             }         }     });          rebarRows.forEach(row => {         const nameCell = row.querySelector('td.material-name');         if (nameCell) {             const text = nameCell.textContent.trim().toLowerCase();             if (filter === '' || text.indexOf(filter) > -1) {                 row.style.display = '';                 rebarVisible++;             } else {                 row.style.display = 'none';             }         }     });          coverRows.forEach(row => {         const nameCell = row.querySelector('td.material-name');         if (nameCell) {             const text = nameCell.textContent.trim().toLowerCase();             if (filter === '' || text.indexOf(filter) > -1) {                 row.style.display = '';                 coverVisible++;             } else {                 row.style.display = 'none';             }         }     });          document.getElementById('concreteCount').textContent = concreteVisible;     document.getElementById('rebarCount').textContent = rebarVisible;     document.getElementById('coverCount').textContent = coverVisible; } </script>  <?php $htmlContent = ob_get_clean();  // 6. SEO $protocol = isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] === 'on' ? 'https://' : 'http://'; $host = $_SERVER['HTTP_HOST']; $uri = $_SERVER['REQUEST_URI']; $canonicalUrl = $protocol . $host . $uri;  $jsonLd = generateHubJsonLd([     'title' => 'Справочник бетона и арматуры: классы, марки, расчётные сопротивления, защитные слои | ТЕХСТАНДАРТ',     'description' => 'Таблицы по СП 63.13330.2018: классы и марки бетона, классы арматурной стали (А240, А400, А500), расчётные сопротивления, защитные слои бетона.',     'url' => $canonicalUrl,     'item_count' => $totalConcrete + $totalRebar + $totalCover,     'hub_type' => 'dataset',     'dataset_name' => 'Бетон и арматура Российской Федерации: классы и характеристики',     'source_norms' => ['СП 63.13330.2018 Бетонные и железобетонные конструкции'],     'spatial_coverage' => 'Россия',     'keywords' => 'классы бетона, марка бетона, класс арматуры, расчётное сопротивление арматуры, защитный слой бетона, А400, А500',     'breadcrumb' => [         ['name' => 'Главная', 'url' => '/'],         ['name' => 'Справочники', 'url' => '/hubs/'],         ['name' => 'Бетон и арматура', 'url' => ''],     ],     'include_website' => true,     'date_published' => '2024-01-15',     'search_url' => 'https://tech-stc.ru/hub/concrete-rebar/?search={search_term_string}',     'tables' => [         [             'name' => 'Классы и марки бетона',             'description' => 'Классы бетона по прочности на сжатие B7.5-B60, марки M100-M700, классы на растяжение Bt0.8-Bt4.8',             'citation' => 'СП 63.13330.2018 приложение А',             'rows' => $totalConcrete,             'columns' => 5,         ],         [             'name' => 'Классы арматурной стали',             'description' => 'Классы арматуры А240, А400, А500, А600, А800, А1000: нормативные и расчётные сопротивления, модуль упругости',             'citation' => 'СП 63.13330.2018 приложение Б',             'rows' => $totalRebar,             'columns' => 6,         ],         [             'name' => 'Защитные слои бетона',             'description' => 'Минимальные защитные слои бетона для конструкций в различных условиях эксплуатации',             'citation' => 'СП 63.13330.2018 приложение В',             'rows' => $totalCover,             'columns' => 4,         ],     ],     'variable_measured' => [         'Класс бетона по прочности на сжатие (B)',         'Марка бетона по прочности на сжатие (M)',         'Класс бетона по прочности на растяжение (Bt)',         'Модуль упругости бетона (E_b)',         'Нормативное сопротивление арматуры (R_sn)',         'Расчётное сопротивление арматуры растяжению (R_s)',         'Расчётное сопротивление арматуры сжатию (R_sc)',         'Модуль упругости арматуры (E_s)',         'Защитный слой бетона',     ], ]);  $pageData = [     'title' => 'Справочник бетона и арматуры: классы, марки, расчётные сопротивления, защитные слои | ТЕХСТАНДАРТ',     'description' => 'Таблицы по СП 63.13330.2018: классы и марки бетона, классы арматурной стали (А240, А400, А500), расчётные сопротивления, защитные слои бетона.',     'h1' => 'Справочник бетона и арматуры',     'content' => $htmlContent,     'breadcrumb' => [         ['name' => 'Главная', 'url' => '/'],         ['name' => 'Справочники', 'url' => '/hubs/'],         ['name' => 'Бетон и арматура', 'url' => '']     ],     'template' => 'default',     'canonical_url' => $canonicalUrl,     'robots' => 'index, follow',     'keywords' => 'классы бетона, марка бетона, класс арматуры, расчётное сопротивление арматуры, защитный слой бетона, А400, А500',     'json_ld' => $jsonLd ];  require_once $_SERVER['DOCUMENT_ROOT'] . '/shell/render.php'; renderModule($pageData);
========================================
ФАЙЛ #4: construction-materials/config.php
Расширение: php
Размер: 3,149 байт
========================================
<?php return [     'title' => 'Строительные и отделочные материалы | ТЕХСТАНДАРТ',     'description' => 'Калькуляторы для расчёта строительных материалов: теплоизоляция, кровля, фасады, древесина, отделка.',     'h1' => 'Строительные материалы: теплоизоляция, кровля, фасады, древесина',     'breadcrumb_name' => 'Строительные материалы',     'keywords' => 'строительные материалы, утеплитель, кровля, фасад, пиломатериалы, отделка',     'intro_text' => 'Калькуляторы для расчёта строительных материалов: теплоизоляция стен, кровельные материалы, фасады, пиломатериалы, отделочные материалы.',          'calculators' => [         // Теплоизоляция         ['title' => 'Теплотехнический расчёт наружных стен', 'url' => '/engineering-calculators/structures/walls-calculation-thermal-conductivity-walls/'],         ['title' => 'Расчёт толщины утеплителя для стен', 'url' => '/engineering-calculators/structures/walls-calculation-insulation-walls/'],         ['title' => 'Утепление цоколя и отмостки', 'url' => '/engineering-calculators/materials/insulated-sand-apron-calculator/'],                  // Кровля         ['title' => 'Расчёт площади кровли и материалов', 'url' => '/engineering-calculators/materials/roof-calculator-area/'],         ['title' => 'Калькулятор металлочерепицы', 'url' => '/engineering-calculators/materials/metal-roof-panels-calculator/'],                  // Фасады         ['title' => 'Расчёт вентилируемого фасада', 'url' => '/engineering-calculators/materials/ventilated-facade-cladding-calculator/'],                  // Древесина         ['title' => 'Калькулятор объёма пиломатериалов', 'url' => '/engineering-calculators/wooden/sawn-timber-calculator/'],         ['title' => 'Расчёт усушки древесины', 'url' => '/engineering-calculators/wooden/wood-shrinkage-calculator/'],         ['title' => 'Объём оцилиндрованного бревна', 'url' => '/engineering-calculators/wooden/round-timber-volume-calculator/'],                  // Отделка         ['title' => 'Расчёт керамической плитки на стены', 'url' => '/engineering-calculators/structures/wall-calculation-ceramic-tiles/'],         ['title' => 'Калькулятор ламината', 'url' => '/engineering-calculators/structures/floor-calculation-laminate/'],         ['title' => 'Расчёт гипсокартона на стены', 'url' => '/engineering-calculators/structures/walls-calculation-drywall-on-walls/'],     ], ];
========================================
ФАЙЛ #5: construction-materials/index.php
Расширение: php
Размер: 109 байт
========================================
<?php $config = require __DIR__ . '/config.php'; require_once __DIR__ . '/../_templates/hub-template.php';
========================================
ФАЙЛ #6: engineering-norms/index.php
Расширение: php
Размер: 12,132 байт
========================================
<?php declare(strict_types=1);  require_once $_SERVER['DOCUMENT_ROOT'] . '/regulations/lib/loader.php'; require_once $_SERVER['DOCUMENT_ROOT'] . '/shell/json-ld-hub-generator.php';  // 1. Загружаем данные из нормативов $waterData = NormLoader::getTable('sp-30-13330-2020', 'appendix-a'); $sewageData = NormLoader::getTable('sp-32-13330-2018', 'appendix-b'); $ventData = NormLoader::getTable('sp-60-13330-2020', 'appendix-e');  // 2. Формируем структуру категорий $categories = [     'water' => [         'name' => 'Водоснабжение (СП 30.13330.2020)',         'description' => 'Нормы расхода воды санитарно-техническими приборами',         'calc_url' => '/engineering-calculators/engineering-systems/water-consumption-calculator/',         'calc_text' => 'Рассчитать расход воды',         'headers' => ['Прибор/потребитель', 'Хол. вода (л/с)', 'Гор. вода (л/с)', 'Общий (л/с)', 'Примечание'],         'rows' => [],         'rows_count' => 0,     ],     'sewage' => [         'name' => 'Канализация (СП 32.13330.2018)',         'description' => 'Уклоны и скорости в канализационных трубах',         'calc_url' => '/engineering-calculators/engineering-systems/septic-tank-volume-and-installation-calculator/',         'calc_text' => 'Рассчитать объем септика',         'headers' => ['Диаметр трубы (Ду, мм)', 'Мин. уклон', 'Опт. уклон', 'Мин. скорость (м/с)', 'Макс. скорость (м/с)'],         'rows' => [],         'rows_count' => 0,     ],     'ventilation' => [         'name' => 'Вентиляция (СП 60.13330.2020)',         'description' => 'Нормы воздухообмена в помещениях',         'calc_url' => '/engineering-calculators/engineering-systems/ventilation-mechanical-supply-exhaust-recuperation/',         'calc_text' => 'Расчет приточно-вытяжной вентиляции',         'headers' => ['Помещение', 'На 1 м² (м³/ч)', 'На человека (м³/ч)', 'Кратность (1/ч)'],         'rows' => [],         'rows_count' => 0,     ] ];  // 3. Наполняем категории данными if ($waterData && !empty($waterData['rows'])) {     $categories['water']['rows'] = array_slice($waterData['rows'], 0, 20);     $categories['water']['rows_count'] = count($categories['water']['rows']); } if ($sewageData && !empty($sewageData['rows'])) {     $categories['sewage']['rows'] = array_slice($sewageData['rows'], 0, 15);     $categories['sewage']['rows_count'] = count($categories['sewage']['rows']); } if ($ventData && !empty($ventData['rows'])) {     $startRow = (isset($ventData['rows'][0][0]) && stripos((string)$ventData['rows'][0][0], 'помещение') !== false) ? 1 : 0;     $categories['ventilation']['rows'] = array_slice($ventData['rows'], $startRow, 15);     $categories['ventilation']['rows_count'] = count($categories['ventilation']['rows']); }  $totalCategories = count(array_filter($categories, fn($c) => !empty($c['rows'])));  // 4. Генерация HTML ob_start(); ?> <div class="hub-container">      <p class="lead">Ключевые расчетные параметры из актуальных СП: нормы расхода воды, уклоны канализации, кратность воздухообмена для проектирования инженерных систем.</p>      <!-- Блок калькуляторов -->     <div class="card mb-6">         <div class="card__body">             <h3 class="card__title hub-card-title">                 Инженерные расчёты             </h3>             <div class="btn-group flex-wrap">                 <a href="/engineering-calculators/engineering-systems/water-consumption-calculator/" class="btn btn-primary btn-sm">                     Расход воды                 </a>                 <a href="/engineering-calculators/engineering-systems/septic-tank-volume-and-installation-calculator/" class="btn btn-outline btn-sm">                     Объем септика                 </a>                 <a href="/engineering-calculators/engineering-systems/ventilation-mechanical-supply-exhaust-recuperation/" class="btn btn-outline btn-sm">                     Вентиляция                 </a>             </div>         </div>     </div>      <!-- Блок методик расчётов -->     <div class="card mb-6">         <div class="card__body">             <h3 class="card__title hub-card-title">                 Методики расчётов             </h3>             <div class="btn-group flex-wrap">                 <a href="/guides/foundation/foundation-reinforcement-calculation.php" class="btn btn-outline btn-sm">                     Расчёт армирования фундамента                 </a>                 <a href="/guides/foundation/concrete-calculation.php" class="btn btn-outline btn-sm">                     Расчёт бетона для фундамента                 </a>                 <a href="/guides/foundation/blind-area-calculation.php" class="btn btn-outline btn-sm">                     Расчёт отмостки                 </a>                 <a href="/guides/roof/flat-roof-calculation.php" class="btn btn-outline btn-sm">                     Расчёт плоской кровли                 </a>                 <a href="/guides/water/water-consumption-calculation.php" class="btn btn-outline btn-sm">                     Расчёт водопотребления                 </a>             </div>         </div>     </div>      <!-- Таблицы нормативов -->     <?php foreach ($categories as $catKey => $catData): ?>         <?php if (empty($catData['rows'])) continue; ?>                  <div class="card mb-6">             <div class="card__body">                 <h2 class="card__title hub-card-title" style="margin: 0 0 0.5rem 0; font-size: 1.25rem;">                     <?= htmlspecialchars($catData['name']) ?>                 </h2>                 <p class="text-muted" style="margin-bottom: 1rem;"><?= htmlspecialchars($catData['description']) ?></p>                                  <div class="btn-group flex-wrap" style="margin-bottom: 1rem;">                     <a href="<?= htmlspecialchars($catData['calc_url']) ?>" class="btn btn-outline btn-sm">                         <?= htmlspecialchars($catData['calc_text']) ?>                     </a>                 </div>                  <div class="table-responsive">                     <table class="norm-table">                         <thead>                             <tr>                                 <?php foreach ($catData['headers'] as $header): ?>                                     <th><?= htmlspecialchars($header) ?></th>                                 <?php endforeach; ?>                             </tr>                         </thead>                         <tbody>                             <?php foreach ($catData['rows'] as $row): ?>                                 <tr>                                     <?php foreach ($row as $cell): ?>                                         <td><?= htmlspecialchars((string)$cell) ?></td>                                     <?php endforeach; ?>                                 </tr>                             <?php endforeach; ?>                         </tbody>                     </table>                 </div>             </div>         </div>     <?php endforeach; ?>      <div class="mt-4 text-muted">         * Отображено нормативных таблиц: <span id="categoryCount"><?= $totalCategories ?></span>. Данные взяты напрямую из приложений СП.     </div> </div>  <?php $htmlContent = ob_get_clean();  // 5. SEO $protocol = isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] === 'on' ? 'https://' : 'http://'; $host = $_SERVER['HTTP_HOST']; $uri = $_SERVER['REQUEST_URI']; $canonicalUrl = $protocol . $host . $uri;  $pageTitle = 'Справочник инженерных норм (СП 30, 32, 60) | ТЕХСТАНДАРТ'; $pageDescription = 'Расчетные параметры из СП: нормы расхода воды, уклоны канализационных труб, кратность воздухообмена для проектирования.'; $pageKeywords = 'уклон канализации, расход воды норма, кратность воздухообмена, сп 30, сп 32, сп 60';  $jsonLd = generateHubJsonLd([     'title' => $pageTitle,     'description' => $pageDescription,     'url' => $canonicalUrl,     'item_count' => $totalCategories,     'hub_type' => 'dataset',     'dataset_name' => 'Инженерные нормы: водоснабжение, канализация, вентиляция',     'source_norms' => ['СП 30.13330.2020', 'СП 32.13330.2018', 'СП 60.13330.2020'],     'spatial_coverage' => 'Россия',     'keywords' => $pageKeywords,     'breadcrumb' => [         ['name' => 'Главная', 'url' => '/'],         ['name' => 'Справочники', 'url' => '/hubs/'],         ['name' => 'Инженерные нормы', 'url' => ''],     ],     'include_website' => true,     'date_published' => '2024-01-15',     'search_url' => 'https://tech-stc.ru/hub/engineering-norms/?search={search_term_string}',     'tables' => [         [             'name' => 'Нормы расхода воды',             'description' => 'Расход воды санитарно-техническими приборами',             'citation' => 'СП 30.13330.2020 приложение А',             'rows' => $categories['water']['rows_count'],             'columns' => 5,         ],         [             'name' => 'Уклоны и скорости в канализационных трубах',             'description' => 'Минимальные и оптимальные уклоны, скорости движения стоков',             'citation' => 'СП 32.13330.2018 приложение Б',             'rows' => $categories['sewage']['rows_count'],             'columns' => 5,         ],         [             'name' => 'Нормы воздухообмена',             'description' => 'Кратность воздухообмена в помещениях различного назначения',             'citation' => 'СП 60.13330.2020 приложение Е',             'rows' => $categories['ventilation']['rows_count'],             'columns' => 4,         ],     ],     'variable_measured' => [         'Расход холодной воды (л/с)',         'Расход горячей воды (л/с)',         'Уклон канализационных труб',         'Скорость движения стоков (м/с)',         'Кратность воздухообмена (1/ч)',     ], ]);  $pageData = [     'title'         => $pageTitle,     'description'   => $pageDescription,     'h1'            => 'Справочник инженерных норм',     'content'       => $htmlContent,     'breadcrumb'    => [         ['name' => 'Главная', 'url' => '/'],         ['name' => 'Справочники', 'url' => '/hubs/'],         ['name' => 'Инженерные нормы', 'url' => '']     ],     'template'      => 'default',     'canonical_url' => $canonicalUrl,     'robots'        => 'index, follow',     'keywords'      => $pageKeywords,     'json_ld'       => $jsonLd ];  require_once $_SERVER['DOCUMENT_ROOT'] . '/shell/render.php'; renderModule($pageData);
========================================
ФАЙЛ #7: exterior-landscaping/config.php
Расширение: php
Размер: 5,498 байт
========================================
<?php return [     'title' => 'Благоустройство участка и ландшафтный дизайн | ТЕХСТАНДАРТ',     'description' => 'Калькуляторы для благоустройства участка: заборы, дорожки, газоны, малые архитектурные формы, освещение, автоматизация полива.',     'h1' => 'Благоустройство участка: заборы, дорожки, газоны, освещение',     'breadcrumb_name' => 'Благоустройство участка',     'keywords' => 'благоустройство участка, забор, дорожки, газон, беседка, освещение, автополив',     'intro_text' => 'Калькуляторы для благоустройства участка: расчёт заборов, дорожек, газонов, малых архитектурных форм, освещения и автополива.',          'calculators' => [         // Ограждения         ['title' => 'Расчёт забора из профлиста', 'url' => '/engineering-calculators/exterior-site/fence-calculation-corrugated-sheet/'],         ['title' => 'Калькулятор забора из сетки-рабицы', 'url' => '/engineering-calculators/exterior-site/fence-calculator-chain-link/'],         ['title' => 'Расчёт габионного забора', 'url' => '/engineering-calculators/exterior-site/gabion-fence-wire-mesh-stones-calculator/'],         ['title' => 'Калькулятор столбов для забора', 'url' => '/engineering-calculators/exterior-site/fence-calculator-pillars/'],         ['title' => 'Расчёт длины забора по участку', 'url' => '/engineering-calculators/exterior-site/fence-length-calculator/'],         ['title' => 'Забор из евроштакетника', 'url' => '/engineering-calculators/exterior-site/fence-calculator-eurostacker/'],         ['title' => 'Металлический штакетник', 'url' => '/engineering-calculators/exterior-site/fence-calculator-metal-fence/'],         ['title' => 'Деревянный штакетник', 'url' => '/engineering-calculators/exterior-site/fence-calculator-picket/'],         ['title' => 'Забор из поликарбоната', 'url' => '/engineering-calculators/exterior-site/polycarbonate-fence-panel-calculator/'],         ['title' => 'Каменный забор', 'url' => '/engineering-calculators/exterior-site/natural-stone-fence-construction-calculator/'],          // Дорожки и площадки         ['title' => 'Калькулятор тротуарной плитки', 'url' => '/engineering-calculators/exterior-site/garden-path-pavers-calculator/'],         ['title' => 'Основание под дорожку (песок + щебень)', 'url' => '/engineering-calculators/exterior-site/sand-gravel-base-for-driveway-calculator/'],         ['title' => 'ПГС и песчано-гравийная смесь', 'url' => '/engineering-calculators/exterior-site/sand-crushed-stone-pgs-calculator/'],          // Газоны и водоёмы         ['title' => 'Рулонный газон или посев семян', 'url' => '/engineering-calculators/exterior-site/lawn-turf-or-seed-calculator/'],         ['title' => 'Объём пруда и площадь гидроизоляции', 'url' => '/engineering-calculators/exterior-site/garden-pond-volume-and-liner-calculator/'],         ['title' => 'Камни для альпийской горки', 'url' => '/engineering-calculators/exterior-site/alpine-rock-garden-stones-calculator/'],          // Малые архитектурные формы         ['title' => 'Модульная беседка', 'url' => '/engineering-calculators/exterior-site/modular-gazebo-kit-calculator/'],         ['title' => 'Модульный навес (автомобиль/патио)', 'url' => '/engineering-calculators/exterior-site/modular-carport-or-patio-canopy-calculator/'],         ['title' => 'Модульная терраса', 'url' => '/engineering-calculators/exterior-site/modular-terrace-deck-kit-calculator/'],         ['title' => 'Навес для барбекю', 'url' => '/engineering-calculators/exterior-site/barbecue-area-brick-construction-calculator/'],          // Освещение         ['title' => 'Освещение дорожек', 'url' => '/engineering-calculators/exterior-site/pathway-lighting-luminaires-calculator/'],         ['title' => 'Ландшафтное освещение сада', 'url' => '/engineering-calculators/exterior-site/garden-landscape-lighting-calculator/'],         ['title' => 'Уличное освещение участока', 'url' => '/engineering-calculators/exterior-site/outdoor-site-lighting-luminaires-calculator/'],         ['title' => 'Автоматизация фонтана', 'url' => '/engineering-calculators/exterior-site/smart-garden-fountain-automation-calculator/'],         ['title' => 'Автоматизация освещения', 'url' => '/engineering-calculators/exterior-site/smart-garden-lighting-automation-calculator/'],         ['title' => 'Система умного полива', 'url' => '/engineering-calculators/exterior-site/smart-irrigation-with-soil-moisture-sensors-calculator/'],     ], ];
========================================
ФАЙЛ #8: exterior-landscaping/index.php
Расширение: php
Размер: 109 байт
========================================
<?php $config = require __DIR__ . '/config.php'; require_once __DIR__ . '/../_templates/hub-template.php';
========================================
ФАЙЛ #9: foundations-earthworks/config.php
Расширение: php
Размер: 4,236 байт
========================================
<?php return [     'title' => 'Фундаменты и земляные работы | ТЕХСТАНДАРТ',     'description' => 'Калькуляторы для расчёта фундаментов: ленточные, плитные, свайные. Земляные работы, армирование, гидроизоляция, дренаж.',     'h1' => 'Фундаменты: ленточные, плитные, свайные. Земляные работы и дренаж',     'breadcrumb_name' => 'Фундаменты и земляные работы',     'keywords' => 'фундамент, ленточный фундамент, плитный фундамент, свайный фундамент, земляные работы, дренаж',     'intro_text' => 'Калькуляторы для расчёта фундаментов: ленточные, плитные, свайные. Земляные работы, армирование, гидроизоляция, дренаж.',          'calculators' => [         // Типы фундаментов         ['title' => 'Расчёт ленточного фундамента', 'url' => '/engineering-calculators/foundations/foundation-calculation-tape-foundation/'],         ['title' => 'Расчёт монолитной плиты', 'url' => '/engineering-calculators/foundations/foundation-calculation-of-monolithic-slab/'],         ['title' => 'Расчёт свайного фундамента', 'url' => '/engineering-calculators/foundations/foundation-calculation-pile-foundation/'],         ['title' => 'Плитный фундамент с рёбрами жёсткости', 'url' => '/engineering-calculators/foundations/raft-foundation-with-stiffening-ribs/'],         ['title' => 'Утеплённая шведская плита (УШП)', 'url' => '/engineering-calculators/foundations/foundation-calculator-insulated-swedish-slab/'],         ['title' => 'Свайно-ленточный фундамент', 'url' => '/engineering-calculators/foundations/pile-strip-foundation-calculator/'],         ['title' => 'Фундаментные блоки ФБС с гидроизоляцией', 'url' => '/engineering-calculators/foundations/fbs-block-foundation-with-waterproofing/'],                  // Армирование         ['title' => 'Армирование ленточного фундамента', 'url' => '/engineering-calculators/foundations/foundation-calculation-reinforcement-tape-foundation/'],         ['title' => 'Расчёт веса и длины арматуры', 'url' => '/engineering-calculators/foundations/rebar-weight-length-calculator/'],         ['title' => 'Армирование углов ленточного фундамента', 'url' => '/engineering-calculators/foundations/foundation-corner-reinforcement-calculator/'],                  // Гидроизоляция и дренаж         ['title' => 'Гидроизоляция подвала', 'url' => '/engineering-calculators/foundations/basement-waterproofing-materials-calculator/'],         ['title' => 'Геомембрана для подвала', 'url' => '/engineering-calculators/foundations/basement-geomembrane-waterproofing-calculator/'],                  // Глубина и нагрузка         ['title' => 'Глубина заложения фундамента', 'url' => '/engineering-calculators/foundations/foundation-calculation-depth-laying/'],         ['title' => 'Расчёт нагрузки на фундамент', 'url' => '/engineering-calculators/foundations/foundation-calculation-load/'],         ['title' => 'Несущая способность грунта', 'url' => '/engineering-calculators/foundations/soil-bearing-capacity-calculator/'],                  // Земляные работы         ['title' => 'Расчёт откосов котлована', 'url' => '/engineering-calculators/foundations/excavation-calculation-excavation-slopes/'],                  // Осадка         ['title' => 'Расчёт осадки фундамента', 'url' => '/engineering-calculators/foundations/foundation-settlement-calculation/'],     ], ];
========================================
ФАЙЛ #10: foundations-earthworks/index.php
Расширение: php
Размер: 109 байт
========================================
<?php $config = require __DIR__ . '/config.php'; require_once __DIR__ . '/../_templates/hub-template.php';
========================================
ФАЙЛ #11: heating-hvac/config.php
Расширение: php
Размер: 4,374 байт
========================================
<?php return [     'title' => 'Отопление, вентиляция и кондиционирование (HVAC) | ТЕХСТАНДАРТ',     'description' => 'Калькуляторы для систем отопления, вентиляции и кондиционирования: теплопотери, котлы, радиаторы, тёплый пол, воздуховоды.',     'h1' => 'Отопление, вентиляция, кондиционирование: расчёты по нормативам РФ',     'breadcrumb_name' => 'Отопление и вентиляция',     'keywords' => 'отопление, вентиляция, кондиционирование, теплопотери, котёл, радиаторы, тёплый пол',     'intro_text' => 'Калькуляторы для систем отопления, вентиляции и кондиционирования: теплопотери, подбор котла, радиаторов, тёплого пола, воздуховодов.',          'calculators' => [         // Теплопотери и мощность         ['title' => 'Теплопотери дома', 'url' => '/engineering-calculators/engineering-systems/heating-calculator-heat-loss-home/'],         ['title' => 'Мощность котла отопления', 'url' => '/engineering-calculators/engineering-systems/heating-boiler-power/'],         ['title' => 'Теплопотери через окна и двери', 'url' => '/engineering-calculators/engineering-systems/heating-windows-doors-heat-loss/'],         ['title' => 'Расчёт тепловой энергии на отопление', 'url' => '/engineering-calculators/engineering-systems/heating-energy-consumption-calculator/'],         ['title' => 'Расход газа на отопление дома', 'url' => '/engineering-calculators/engineering-systems/heating-gas-consumption-heating-houses/'],                  // Насосы и баки         ['title' => 'Циркуляционный насос для отопления', 'url' => '/engineering-calculators/engineering-systems/heating-circulation-pump-selection/'],         ['title' => 'Расширительный бак', 'url' => '/engineering-calculators/engineering-systems/heating-expansion-tank-calculator/'],                  // Тёплый пол         ['title' => 'Водяной тёплый пол', 'url' => '/engineering-calculators/engineering-systems/heating-water-underfloor-heating/'],                  // Радиаторы         ['title' => 'Расчёт количества секций радиатора', 'url' => '/engineering-calculators/engineering-systems/heating-radiator-sections-calculator/'],         ['title' => 'Тепловая завеса', 'url' => '/engineering-calculators/engineering-systems/thermal-curtain-over-door/'],                  // Вентиляция         ['title' => 'Вентиляция с рекуперацией тепла', 'url' => '/engineering-calculators/engineering-systems/ventilation-mechanical-supply-exhaust-recuperation/'],         ['title' => 'Естественная вентиляция', 'url' => '/engineering-calculators/engineering-systems/ventilation-natural-air-exchange/'],         ['title' => 'Расчёт воздуховодов', 'url' => '/engineering-calculators/engineering-systems/ventilation-duct-sizing-calculator/'],         ['title' => 'Канальный нагреватель воздуха', 'url' => '/engineering-calculators/engineering-systems/ventilation-duct-air-heater/'],                  // Кондиционирование         ['title' => 'Подбор сплит-системы', 'url' => '/engineering-calculators/engineering-systems/cooling-split-system-selection/'],         ['title' => 'VRF-система кондиционирования', 'url' => '/engineering-calculators/engineering-systems/cooling-vrf-system-design/'],                  // Дымоудаление         ['title' => 'Система дымоудаления', 'url' => '/engineering-calculators/engineering-systems/smoke-extraction-system-installation/'],         ['title' => 'Дымовые клапаны', 'url' => '/engineering-calculators/engineering-systems/smoke-dampers-selection/'],     ], ];
========================================
ФАЙЛ #12: heating-hvac/index.php
Расширение: php
Размер: 109 байт
========================================
<?php $config = require __DIR__ . '/config.php'; require_once __DIR__ . '/../_templates/hub-template.php';
========================================
ФАЙЛ #13: insulation-materials/index.php
Расширение: php
Размер: 10,808 байт
========================================
<?php declare(strict_types=1);  require_once $_SERVER['DOCUMENT_ROOT'] . '/regulations/lib/loader.php'; require_once $_SERVER['DOCUMENT_ROOT'] . '/shell/json-ld-hub-generator.php';  // 1. Загружаем данные из СП 50 (приложение Д) $materialsData = NormLoader::getTable('sp-50-13330-2020', 'appendix-d');  $materials = [];  // 2. Формируем массив материалов if ($materialsData && !empty($materialsData['rows'])) {     foreach ($materialsData['rows'] as $row) {         $materials[] = [             'name' => $row[0] ?? '—',             'density' => $row[1] ?? '—',             'thermal' => $row[2] ?? '—',             'heat_capacity' => $row[3] ?? '—',             'vapor_permeability' => $row[4] ?? '—',         ];     } }  $totalMaterials = count($materials);  // 3. Генерация HTML ob_start(); ?> <div class="hub-container">     <p class="lead">Справочник теплоизоляционных и строительных материалов по СП 50.13330.2020: теплопроводность, плотность, теплоёмкость, паропроницаемость.</p>      <!-- Блок калькуляторов -->     <div class="card mb-6">         <div class="card__body">             <h3 class="card__title hub-card-title">                 Теплотехнические расчёты             </h3>             <div class="btn-group flex-wrap">                 <a href="/engineering-calculators/engineering-systems/heating-calculator-heat-loss-home/" class="btn btn-primary btn-sm">                     Теплопотери дома                 </a>                 <a href="/engineering-calculators/structures/walls-calculation-insulation-walls/" class="btn btn-outline btn-sm">                     Расчёт утепления стен                 </a>                 <a href="/engineering-calculators/roofing/attic-insulation-calculator/" class="btn btn-outline btn-sm">                     Утепление кровли                 </a>             </div>         </div>     </div>      <!-- Блок методик расчётов -->     <div class="card mb-6">         <div class="card__body">             <h3 class="card__title hub-card-title">                 Методики расчётов             </h3>             <div class="btn-group flex-wrap">                 <a href="/guides/foundation/foundation-reinforcement-calculation.php" class="btn btn-outline btn-sm">                     Расчёт армирования фундамента                 </a>                 <a href="/guides/foundation/concrete-calculation.php" class="btn btn-outline btn-sm">                     Расчёт бетона для фундамента                 </a>                 <a href="/guides/foundation/blind-area-calculation.php" class="btn btn-outline btn-sm">                     Расчёт отмостки                 </a>                 <a href="/guides/roof/flat-roof-calculation.php" class="btn btn-outline btn-sm">                     Расчёт плоской кровли                 </a>                 <a href="/guides/water/water-consumption-calculation.php" class="btn btn-outline btn-sm">                     Расчёт водопотребления                 </a>             </div>         </div>     </div>      <!-- Поиск -->     <div class="hub-search-box">         <i class="bi bi-search hub-search-icon"></i>         <input type="text" id="materialSearch" class="hub-search-input" placeholder="Введите название материала (минвата, пенополистирол, кирпич, бетон...)..." onkeyup="filterTable()">     </div>      <!-- Таблица: Теплотехнические характеристики материалов -->     <div class="table-responsive">         <table class="norm-table" id="materialsTable">             <thead>                 <tr>                     <th>Материал</th>                     <th class="numeric">Плотность ρ, кг/м³</th>                     <th class="numeric">Теплопроводность λ, Вт/(м·°С)</th>                     <th class="numeric">Теплоёмкость c, кДж/(кг·°С)</th>                     <th class="numeric">Паропроницаемость μ, мг/(м·ч·Па)</th>                 </tr>             </thead>             <tbody>                 <?php foreach ($materials as $material): ?>                 <tr data-material-name="<?= htmlspecialchars(strtolower($material['name'])) ?>">                     <td class="material-name"><?= htmlspecialchars($material['name']) ?></td>                     <td class="numeric"><?= htmlspecialchars($material['density']) ?></td>                     <td class="numeric"><?= htmlspecialchars($material['thermal']) ?></td>                     <td class="numeric"><?= htmlspecialchars($material['heat_capacity']) ?></td>                     <td class="numeric"><?= htmlspecialchars($material['vapor_permeability']) ?></td>                 </tr>                 <?php endforeach; ?>             </tbody>         </table>     </div>      <div class="mt-4 text-muted">         * Найдено материалов: <span id="materialCount"><?= $totalMaterials ?></span>. Данные по СП 50.13330.2020 (актуализированная версия) приложение Д.         Теплопроводность указана для условий эксплуатации А (сухой режим).     </div> </div>  <script> function filterTable() {     const input = document.getElementById('materialSearch');     const filter = input.value.trim().toLowerCase();          const table = document.getElementById('materialsTable');     const rows = table.querySelectorAll('tbody tr');          let visibleCount = 0;          rows.forEach(row => {         const nameCell = row.querySelector('td.material-name');         if (nameCell) {             const text = nameCell.textContent.trim().toLowerCase();             if (filter === '' || text.indexOf(filter) > -1) {                 row.style.display = '';                 visibleCount++;             } else {                 row.style.display = 'none';             }         }     });          document.getElementById('materialCount').textContent = visibleCount; } </script>  <?php $htmlContent = ob_get_clean();  // 4. SEO $protocol = isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] === 'on' ? 'https://' : 'http://'; $host = $_SERVER['HTTP_HOST']; $uri = $_SERVER['REQUEST_URI']; $canonicalUrl = $protocol . $host . $uri;  $jsonLd = generateHubJsonLd([     'title' => 'Справочник теплоизоляционных материалов: теплопроводность, плотность, паропроницаемость | ТЕХСТАНДАРТ',     'description' => 'Таблицы теплотехнических характеристик материалов по СП 50.13330.2020: теплопроводность, плотность, теплоёмкость, паропроницаемость утеплителей, бетона, кирпича, дерева.',     'url' => $canonicalUrl,     'item_count' => $totalMaterials,     'hub_type' => 'dataset',     'dataset_name' => 'Теплотехнические характеристики строительных материалов',     'source_norms' => ['СП 50.13330.2020 Тепловая защита зданий'],     'spatial_coverage' => 'Россия',     'keywords' => 'теплопроводность материалов таблица, коэффициент теплопроводности утеплителей, плотность материалов, паропроницаемость, теплоёмкость',     'breadcrumb' => [         ['name' => 'Главная', 'url' => '/'],         ['name' => 'Справочники', 'url' => '/hubs/'],         ['name' => 'Теплоизоляционные материалы', 'url' => ''],     ],     'include_website' => true,     'date_published' => '2024-01-15',     'search_url' => 'https://tech-stc.ru/hub/insulation-materials/?search={search_term_string}',     'tables' => [         [             'name' => 'Теплотехнические характеристики строительных материалов',             'description' => 'Плотность, теплопроводность, теплоёмкость, паропроницаемость материалов: минеральная вата, пенополистирол, бетон, кирпич, дерево, газобетон',             'citation' => 'СП 50.13330.2020 приложение Д',             'rows' => $totalMaterials,             'columns' => 5,         ],     ],     'variable_measured' => [         'Плотность материала (кг/м³)',         'Теплопроводность (Вт/(м·°С))',         'Удельная теплоёмкость (кДж/(кг·°С))',         'Паропроницаемость (мг/(м·ч·Па))',     ], ]);  $pageData = [     'title' => 'Справочник теплоизоляционных материалов: теплопроводность, плотность, паропроницаемость | ТЕХСТАНДАРТ',     'description' => 'Таблицы теплотехнических характеристик материалов по СП 50.13330.2020: теплопроводность, плотность, теплоёмкость, паропроницаемость утеплителей, бетона, кирпича, дерева.',     'h1' => 'Справочник теплоизоляционных материалов',     'content' => $htmlContent,     'breadcrumb' => [         ['name' => 'Главная', 'url' => '/'],         ['name' => 'Справочники', 'url' => '/hubs/'],         ['name' => 'Теплоизоляционные материалы', 'url' => '']     ],     'template' => 'default',     'canonical_url' => $canonicalUrl,     'robots' => 'index, follow',     'keywords' => 'теплопроводность материалов таблица, коэффициент теплопроводности утеплителей, плотность материалов, паропроницаемость, теплоёмкость',     'json_ld' => $jsonLd ];  require_once $_SERVER['DOCUMENT_ROOT'] . '/shell/render.php'; renderModule($pageData);
========================================
ФАЙЛ #14: pile-foundation/index.php
Расширение: php
Размер: 20,701 байт
========================================
<?php declare(strict_types=1);  require_once $_SERVER['DOCUMENT_ROOT'] . '/regulations/lib/loader.php'; require_once $_SERVER['DOCUMENT_ROOT'] . '/shell/json-ld-hub-generator.php';  // 1. Загружаем данные из СП 24 $soilCapacityData = NormLoader::getTable('sp-24-13330-2011', '7.1'); $materialCapacityData = NormLoader::getTable('sp-24-13330-2011', '7.2'); $workConditionsData = NormLoader::getTable('sp-24-13330-2011', '7.3'); $drivenPilesData = NormLoader::getTable('sp-24-13330-2011', 'appendix-a'); $boredPilesData = NormLoader::getTable('sp-24-13330-2011', 'appendix-b');  // 2. Формируем массивы $soilCapacity = []; $materialCapacity = []; $workConditions = []; $drivenPiles = []; $boredPiles = [];  if ($soilCapacityData && !empty($soilCapacityData['rows'])) {     foreach ($soilCapacityData['rows'] as $row) {         $soilCapacity[] = [             'soil_type' => $row[0] ?? '—',             'condition' => $row[1] ?? '—',             'r' => $row[2] ?? '—',             'f_i' => $row[3] ?? '—',             'depth' => $row[4] ?? '—',         ];     } }  if ($materialCapacityData && !empty($materialCapacityData['rows'])) {     foreach ($materialCapacityData['rows'] as $row) {         $materialCapacity[] = [             'pile_type' => $row[0] ?? '—',             'section' => $row[1] ?? '—',             'length' => $row[2] ?? '—',             'concrete_class' => $row[3] ?? '—',             'rebar_class' => $row[4] ?? '—',             'capacity' => $row[5] ?? '—',             'notes' => $row[6] ?? '—',         ];     } }  if ($workConditionsData && !empty($workConditionsData['rows'])) {     foreach ($workConditionsData['rows'] as $row) {         $workConditions[] = [             'condition' => $row[0] ?? '—',             'gamma_c' => $row[1] ?? '—',             'notes' => $row[2] ?? '—',         ];     } }  if ($drivenPilesData && !empty($drivenPilesData['rows'])) {     foreach ($drivenPilesData['rows'] as $row) {         $drivenPiles[] = [             'mark' => $row[0] ?? '—',             'section' => $row[1] ?? '—',             'length' => $row[2] ?? '—',             'weight' => $row[3] ?? '—',             'concrete_class' => $row[4] ?? '—',             'rebar' => $row[5] ?? '—',             'volume' => $row[6] ?? '—',         ];     } }  if ($boredPilesData && !empty($boredPilesData['rows'])) {     foreach ($boredPilesData['rows'] as $row) {         $boredPiles[] = [             'diameter' => $row[0] ?? '—',             'length' => $row[1] ?? '—',             'volume' => $row[2] ?? '—',             'rebar_weight' => $row[3] ?? '—',             'concrete_class' => $row[4] ?? '—',             'rebar' => $row[5] ?? '—',             'notes' => $row[6] ?? '—',         ];     } }  $totalSoilCapacity = count($soilCapacity); $totalMaterialCapacity = count($materialCapacity); $totalWorkConditions = count($workConditions); $totalDrivenPiles = count($drivenPiles); $totalBoredPiles = count($boredPiles);  // 3. Генерация HTML ob_start(); ?> <div class="hub-container">     <p class="lead">Справочник свайных фундаментов по СП 24.13330.2011: несущая способность свай по грунту и материалу, коэффициенты условий работы, типовые размеры забивных и буронабивных свай.</p>      <!-- Блок калькуляторов -->     <div class="card mb-6">         <div class="card__body">             <h3 class="card__title hub-card-title">                 Расчёты свайных фундаментов             </h3>             <div class="btn-group flex-wrap">                 <a href="/engineering-calculators/foundations/foundation-calculation-pile-foundation/" class="btn btn-primary btn-sm">                     Расчёт свайного фундамента                 </a>                 <a href="/engineering-calculators/foundations/pile-load-capacity-for-high-rise-buildings/" class="btn btn-outline btn-sm">                     Несущая способность свай                 </a>                 <a href="/engineering-calculators/foundations/screw-pile-foundation-for-frame-house-calculator/" class="btn btn-outline btn-sm">                     Винтовые сваи                 </a>             </div>         </div>     </div>      <!-- Блок методик расчётов -->     <div class="card mb-6">         <div class="card__body">             <h3 class="card__title hub-card-title">                 Методики расчётов             </h3>             <div class="btn-group flex-wrap">                 <a href="/guides/foundation/foundation-reinforcement-calculation.php" class="btn btn-outline btn-sm">                     Расчёт армирования фундамента                 </a>                 <a href="/guides/foundation/concrete-calculation.php" class="btn btn-outline btn-sm">                     Расчёт бетона для фундамента                 </a>                 <a href="/guides/foundation/blind-area-calculation.php" class="btn btn-outline btn-sm">                     Расчёт отмостки                 </a>                 <a href="/guides/roof/flat-roof-calculation.php" class="btn btn-outline btn-sm">                     Расчёт плоской кровли                 </a>                 <a href="/guides/water/water-consumption-calculation.php" class="btn btn-outline btn-sm">                     Расчёт водопотребления                 </a>             </div>         </div>     </div>      <!-- Поиск -->     <div class="hub-search-box">         <i class="bi bi-search hub-search-icon"></i>         <input type="text" id="pileSearch" class="hub-search-input" placeholder="Введите тип грунта, марку сваи или условие..." onkeyup="filterTables()">     </div>      <!-- Таблица 1: Несущая способность по грунту -->     <h2 class="mt-5 mb-3">Несущая способность свай по грунту F_d (таблица 7.1 СП 24.13330)</h2>     <div class="table-responsive">         <table class="norm-table" id="soilCapacityTable">             <thead>                 <tr>                     <th>Тип грунта</th>                     <th>Состояние</th>                     <th class="numeric">R, кПа</th>                     <th class="numeric">f_i, кПа</th>                     <th>Глубина, м</th>                 </tr>             </thead>             <tbody>                 <?php foreach ($soilCapacity as $item): ?>                 <tr data-search-text="<?= htmlspecialchars(strtolower($item['soil_type'] . ' ' . $item['condition'])) ?>">                     <td class="search-cell"><?= htmlspecialchars($item['soil_type']) ?></td>                     <td><?= htmlspecialchars($item['condition']) ?></td>                     <td class="numeric"><?= htmlspecialchars($item['r']) ?></td>                     <td class="numeric"><?= htmlspecialchars($item['f_i']) ?></td>                     <td><?= htmlspecialchars($item['depth']) ?></td>                 </tr>                 <?php endforeach; ?>             </tbody>         </table>     </div>      <!-- Таблица 2: Несущая способность по материалу -->     <h2 class="mt-5 mb-3">Несущая способность свай по материалу F_d,m (таблица 7.2 СП 24.13330)</h2>     <div class="table-responsive">         <table class="norm-table" id="materialCapacityTable">             <thead>                 <tr>                     <th>Тип сваи</th>                     <th>Сечение, мм</th>                     <th>Длина, м</th>                     <th>Класс бетона</th>                     <th>Класс арматуры</th>                     <th class="numeric">F_d,m, кН</th>                     <th>Примечания</th>                 </tr>             </thead>             <tbody>                 <?php foreach ($materialCapacity as $item): ?>                 <tr data-search-text="<?= htmlspecialchars(strtolower($item['pile_type'] . ' ' . $item['section'])) ?>">                     <td class="search-cell"><?= htmlspecialchars($item['pile_type']) ?></td>                     <td><?= htmlspecialchars($item['section']) ?></td>                     <td><?= htmlspecialchars($item['length']) ?></td>                     <td><?= htmlspecialchars($item['concrete_class']) ?></td>                     <td><?= htmlspecialchars($item['rebar_class']) ?></td>                     <td class="numeric"><?= htmlspecialchars($item['capacity']) ?></td>                     <td><?= htmlspecialchars($item['notes']) ?></td>                 </tr>                 <?php endforeach; ?>             </tbody>         </table>     </div>      <!-- Таблица 3: Коэффициенты условий работы -->     <h2 class="mt-5 mb-3">Коэффициенты условий работы γ_c (таблица 7.3 СП 24.13330)</h2>     <div class="table-responsive">         <table class="norm-table" id="workConditionsTable">             <thead>                 <tr>                     <th>Условие работы</th>                     <th class="numeric">γ_c</th>                     <th>Примечания</th>                 </tr>             </thead>             <tbody>                 <?php foreach ($workConditions as $item): ?>                 <tr data-search-text="<?= htmlspecialchars(strtolower($item['condition'])) ?>">                     <td class="search-cell"><?= htmlspecialchars($item['condition']) ?></td>                     <td class="numeric"><?= htmlspecialchars($item['gamma_c']) ?></td>                     <td><?= htmlspecialchars($item['notes']) ?></td>                 </tr>                 <?php endforeach; ?>             </tbody>         </table>     </div>      <!-- Таблица 4: Забивные сваи -->     <h2 class="mt-5 mb-3">Типовые размеры забивных железобетонных свай (приложение А СП 24.13330)</h2>     <div class="table-responsive">         <table class="norm-table" id="drivenPilesTable">             <thead>                 <tr>                     <th>Марка сваи</th>                     <th>Сечение, мм</th>                     <th>Длина, м</th>                     <th class="numeric">Масса, т</th>                     <th>Класс бетона</th>                     <th>Арматура</th>                     <th class="numeric">Объём бетона, м³</th>                 </tr>             </thead>             <tbody>                 <?php foreach ($drivenPiles as $item): ?>                 <tr data-search-text="<?= htmlspecialchars(strtolower($item['mark'] . ' ' . $item['section'])) ?>">                     <td class="search-cell"><?= htmlspecialchars($item['mark']) ?></td>                     <td><?= htmlspecialchars($item['section']) ?></td>                     <td><?= htmlspecialchars($item['length']) ?></td>                     <td class="numeric"><?= htmlspecialchars($item['weight']) ?></td>                     <td><?= htmlspecialchars($item['concrete_class']) ?></td>                     <td><?= htmlspecialchars($item['rebar']) ?></td>                     <td class="numeric"><?= htmlspecialchars($item['volume']) ?></td>                 </tr>                 <?php endforeach; ?>             </tbody>         </table>     </div>      <!-- Таблица 5: Буронабивные сваи -->     <h2 class="mt-5 mb-3">Типовые размеры буронабивных свай (приложение Б СП 24.13330)</h2>     <div class="table-responsive">         <table class="norm-table" id="boredPilesTable">             <thead>                 <tr>                     <th>Диаметр, мм</th>                     <th>Длина, м</th>                     <th class="numeric">Объём бетона, м³</th>                     <th class="numeric">Масса арматуры, кг/м</th>                     <th>Класс бетона</th>                     <th>Арматура</th>                     <th>Примечания</th>                 </tr>             </thead>             <tbody>                 <?php foreach ($boredPiles as $item): ?>                 <tr data-search-text="<?= htmlspecialchars(strtolower($item['diameter'] . ' ' . $item['notes'])) ?>">                     <td class="search-cell"><?= htmlspecialchars($item['diameter']) ?></td>                     <td><?= htmlspecialchars($item['length']) ?></td>                     <td class="numeric"><?= htmlspecialchars($item['volume']) ?></td>                     <td class="numeric"><?= htmlspecialchars($item['rebar_weight']) ?></td>                     <td><?= htmlspecialchars($item['concrete_class']) ?></td>                     <td><?= htmlspecialchars($item['rebar']) ?></td>                     <td><?= htmlspecialchars($item['notes']) ?></td>                 </tr>                 <?php endforeach; ?>             </tbody>         </table>     </div>      <div class="mt-4 text-muted">         * Найдено записей:          грунт: <span id="soilCount"><?= $totalSoilCapacity ?></span> |          материал: <span id="materialCount"><?= $totalMaterialCapacity ?></span> |         условия: <span id="conditionsCount"><?= $totalWorkConditions ?></span> |         забивные: <span id="drivenCount"><?= $totalDrivenPiles ?></span> |         буронабивные: <span id="boredCount"><?= $totalBoredPiles ?></span>     </div> </div>  <script> function filterTables() {     const input = document.getElementById('pileSearch');     const filter = input.value.trim().toLowerCase();          const tables = [         'soilCapacityTable',         'materialCapacityTable',          'workConditionsTable',         'drivenPilesTable',         'boredPilesTable'     ];          const counts = {};          tables.forEach(tableId => {         const table = document.getElementById(tableId);         const rows = table.querySelectorAll('tbody tr');         let visibleCount = 0;                  rows.forEach(row => {             const searchText = row.getAttribute('data-search-text') || '';             if (filter === '' || searchText.indexOf(filter) > -1) {                 row.style.display = '';                 visibleCount++;             } else {                 row.style.display = 'none';             }         });                  counts[tableId] = visibleCount;     });          document.getElementById('soilCount').textContent = counts['soilCapacityTable'] || 0;     document.getElementById('materialCount').textContent = counts['materialCapacityTable'] || 0;     document.getElementById('conditionsCount').textContent = counts['workConditionsTable'] || 0;     document.getElementById('drivenCount').textContent = counts['drivenPilesTable'] || 0;     document.getElementById('boredCount').textContent = counts['boredPilesTable'] || 0; } </script>  <?php $htmlContent = ob_get_clean();  // 4. SEO $protocol = isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] === 'on' ? 'https://' : 'http://'; $host = $_SERVER['HTTP_HOST']; $uri = $_SERVER['REQUEST_URI']; $canonicalUrl = $protocol . $host . $uri;  $jsonLd = generateHubJsonLd([     'title' => 'Справочник свайных фундаментов: несущая способность, типовые размеры свай | ТЕХСТАНДАРТ',     'description' => 'Таблицы по СП 24.13330.2011: несущая способность свай по грунту и материалу, коэффициенты условий работы, размеры забивных и буронабивных свай.',     'url' => $canonicalUrl,     'item_count' => $totalSoilCapacity + $totalMaterialCapacity + $totalWorkConditions + $totalDrivenPiles + $totalBoredPiles,     'hub_type' => 'dataset',     'dataset_name' => 'Свайные фундаменты: несущая способность и типовые размеры',     'source_norms' => ['СП 24.13330.2011 Свайные фундаменты'],     'spatial_coverage' => 'Россия',     'keywords' => 'несущая способность свай, забивные сваи размеры, буронабивные сваи диаметры, свайный фундамент, СП 24',     'breadcrumb' => [         ['name' => 'Главная', 'url' => '/'],         ['name' => 'Справочники', 'url' => '/hubs/'],         ['name' => 'Свайные фундаменты', 'url' => ''],     ],     'include_website' => true,     'date_published' => '2024-01-15',     'search_url' => 'https://tech-stc.ru/hub/pile-foundation/?search={search_term_string}',     'tables' => [         [             'name' => 'Несущая способность свай по грунту',             'description' => 'Сопротивление грунта под нижним концом и боковой поверхностью свай',             'citation' => 'СП 24.13330.2011 таблица 7.1',             'rows' => $totalSoilCapacity,             'columns' => 5,         ],         [             'name' => 'Несущая способность свай по материалу',             'description' => 'Несущая способность по прочности бетона и арматуры',             'citation' => 'СП 24.13330.2011 таблица 7.2',             'rows' => $totalMaterialCapacity,             'columns' => 7,         ],         [             'name' => 'Типовые размеры забивных свай',             'description' => 'Размеры, масса, объём бетона забивных железобетонных свай',             'citation' => 'СП 24.13330.2011 приложение А',             'rows' => $totalDrivenPiles,             'columns' => 7,         ],         [             'name' => 'Типовые размеры буронабивных свай',             'description' => 'Диаметры, объём бетона, масса арматуры буронабивных свай',             'citation' => 'СП 24.13330.2011 приложение Б',             'rows' => $totalBoredPiles,             'columns' => 7,         ],     ],     'variable_measured' => [         'Сопротивление грунта под нижним концом сваи (R)',         'Сопротивление боковой поверхности (f_i)',         'Несущая способность по материалу (F_d,m)',         'Размеры забивных свай',         'Размеры буронабивных свай',     ], ]);  $pageData = [     'title' => 'Справочник свайных фундаментов: несущая способность, типовые размеры свай | ТЕХСТАНДАРТ',     'description' => 'Таблицы по СП 24.13330.2011: несущая способность свай по грунту и материалу, коэффициенты условий работы, размеры забивных и буронабивных свай.',     'h1' => 'Справочник свайных фундаментов',     'content' => $htmlContent,     'breadcrumb' => [         ['name' => 'Главная', 'url' => '/'],         ['name' => 'Справочники', 'url' => '/hubs/'],         ['name' => 'Свайные фундаменты', 'url' => '']     ],     'template' => 'default',     'canonical_url' => $canonicalUrl,     'robots' => 'index, follow',     'keywords' => 'несущая способность свай, забивные сваи размеры, буронабивные сваи диаметры, свайный фундамент, СП 24',     'json_ld' => $jsonLd ];  require_once $_SERVER['DOCUMENT_ROOT'] . '/shell/render.php'; renderModule($pageData);
========================================
ФАЙЛ #15: roofing/index.php
Расширение: php
Размер: 13,021 байт
========================================
<?php declare(strict_types=1);  require_once $_SERVER['DOCUMENT_ROOT'] . '/regulations/lib/loader.php'; require_once $_SERVER['DOCUMENT_ROOT'] . '/shell/json-ld-hub-generator.php';  // 1. Загружаем данные из СП 17 $slopeData = NormLoader::getTable('sp-17-13330-2017', 'appendix-a'); $snowCoeffData = NormLoader::getTable('sp-17-13330-2017', 'appendix-b');  $slopes = []; $snowCoeffs = [];  // 2. Минимальные уклоны кровель if ($slopeData && !empty($slopeData['rows'])) {     foreach ($slopeData['rows'] as $row) {         $slopes[] = [             'material' => $row[0] ?? '—',             'slope_percent' => $row[1] ?? '—',             'slope_degrees' => $row[2] ?? '—',             'max_slope_percent' => $row[3] ?? '—',             'notes' => $row[4] ?? '—',         ];     } }  // 3. Снеговые коэффициенты для кровель if ($snowCoeffData && !empty($snowCoeffData['rows'])) {     foreach ($snowCoeffData['rows'] as $row) {         $snowCoeffs[] = [             'roof_type' => $row[0] ?? '—',             'mu' => $row[1] ?? '—',             'ce' => $row[2] ?? '—',             'ct' => $row[3] ?? '—',             'notes' => $row[4] ?? '—',         ];     } }  $totalSlopes = count($slopes); $totalSnowCoeffs = count($snowCoeffs);  // 4. Генерация HTML ob_start(); ?> <div class="hub-container">     <p class="lead">Справочник по кровлям по СП 17.13330.2017: минимальные уклоны кровель для различных покрытий, снеговые коэффициенты для расчёта нагрузок.</p>      <!-- Блок калькуляторов -->     <div class="card mb-6">         <div class="card__body">             <h3 class="card__title hub-card-title">                 Расчёты кровель             </h3>             <div class="btn-group flex-wrap">                 <a href="/engineering-calculators/roofing/roof-calculator-snow-load/" class="btn btn-primary btn-sm">                     Снеговая нагрузка                 </a>                 <a href="/engineering-calculators/roofing/roof-calculation-of-gable-roof/" class="btn btn-outline btn-sm">                     Расчёт двускатной крыши                 </a>                 <a href="/engineering-calculators/roofing/roof-calculation-rafters/" class="btn btn-outline btn-sm">                     Расчёт стропил                 </a>             </div>         </div>     </div>      <!-- Блок методик расчётов -->     <div class="card mb-6">         <div class="card__body">             <h3 class="card__title hub-card-title">                 Методики расчётов             </h3>             <div class="btn-group flex-wrap">                 <a href="/guides/foundation/foundation-reinforcement-calculation.php" class="btn btn-outline btn-sm">                     Расчёт армирования фундамента                 </a>                 <a href="/guides/foundation/concrete-calculation.php" class="btn btn-outline btn-sm">                     Расчёт бетона для фундамента                 </a>                 <a href="/guides/foundation/blind-area-calculation.php" class="btn btn-outline btn-sm">                     Расчёт отмостки                 </a>                 <a href="/guides/roof/flat-roof-calculation.php" class="btn btn-outline btn-sm">                     Расчёт плоской кровли                 </a>                 <a href="/guides/water/water-consumption-calculation.php" class="btn btn-outline btn-sm">                     Расчёт водопотребления                 </a>             </div>         </div>     </div>      <!-- Поиск -->     <div class="hub-search-box">         <i class="bi bi-search hub-search-icon"></i>         <input type="text" id="roofSearch" class="hub-search-input" placeholder="Введите тип покрытия или кровли..." onkeyup="filterTables()">     </div>      <!-- Таблица 1: Минимальные уклоны кровель -->     <h2 class="mt-5 mb-3">Минимальные уклоны кровель (приложение А СП 17.13330)</h2>     <div class="table-responsive">         <table class="norm-table" id="slopeTable">             <thead>                 <tr>                     <th>Тип кровельного покрытия</th>                     <th class="numeric">Минимальный уклон, %</th>                     <th class="numeric">Минимальный уклон, град.</th>                     <th class="numeric">Максимальный уклон, %</th>                     <th>Примечания</th>                 </tr>             </thead>             <tbody>                 <?php foreach ($slopes as $item): ?>                 <tr data-search-text="<?= htmlspecialchars(strtolower($item['material'])) ?>">                     <td class="search-cell"><?= htmlspecialchars($item['material']) ?></td>                     <td class="numeric"><?= htmlspecialchars($item['slope_percent']) ?></td>                     <td class="numeric"><?= htmlspecialchars($item['slope_degrees']) ?></td>                     <td class="numeric"><?= htmlspecialchars($item['max_slope_percent']) ?></td>                     <td><?= htmlspecialchars($item['notes']) ?></td>                 </tr>                 <?php endforeach; ?>             </tbody>         </table>     </div>      <!-- Таблица 2: Снеговые коэффициенты -->     <h2 class="mt-5 mb-3">Снеговые коэффициенты для кровель (приложение Б СП 17.13330)</h2>     <div class="table-responsive">         <table class="norm-table" id="snowCoeffTable">             <thead>                 <tr>                     <th>Тип кровли</th>                     <th class="numeric">Коэффициент формы μ</th>                     <th class="numeric">Коэффициент выдувания c<sub>e</sub></th>                     <th class="numeric">Коэффициент теплового сдвига c<sub>t</sub></th>                     <th>Примечания</th>                 </tr>             </thead>             <tbody>                 <?php foreach ($snowCoeffs as $item): ?>                 <tr data-search-text="<?= htmlspecialchars(strtolower($item['roof_type'])) ?>">                     <td class="search-cell"><?= htmlspecialchars($item['roof_type']) ?></td>                     <td class="numeric"><?= htmlspecialchars($item['mu']) ?></td>                     <td class="numeric"><?= htmlspecialchars($item['ce']) ?></td>                     <td class="numeric"><?= htmlspecialchars($item['ct']) ?></td>                     <td><?= htmlspecialchars($item['notes']) ?></td>                 </tr>                 <?php endforeach; ?>             </tbody>         </table>     </div>      <div class="mt-4 text-muted">         * Найдено типов покрытий: <span id="slopeCount"><?= $totalSlopes ?></span> |          Типов кровель: <span id="snowCoeffCount"><?= $totalSnowCoeffs ?></span>     </div> </div>  <script> function filterTables() {     const input = document.getElementById('roofSearch');     const filter = input.value.trim().toLowerCase();          const slopeTable = document.getElementById('slopeTable');     const snowCoeffTable = document.getElementById('snowCoeffTable');          const slopeRows = slopeTable.querySelectorAll('tbody tr');     const snowCoeffRows = snowCoeffTable.querySelectorAll('tbody tr');          let slopeVisible = 0;     let snowCoeffVisible = 0;          slopeRows.forEach(row => {         const searchText = row.getAttribute('data-search-text') || '';         if (filter === '' || searchText.indexOf(filter) > -1) {             row.style.display = '';             slopeVisible++;         } else {             row.style.display = 'none';         }     });          snowCoeffRows.forEach(row => {         const searchText = row.getAttribute('data-search-text') || '';         if (filter === '' || searchText.indexOf(filter) > -1) {             row.style.display = '';             snowCoeffVisible++;         } else {             row.style.display = 'none';         }     });          document.getElementById('slopeCount').textContent = slopeVisible;     document.getElementById('snowCoeffCount').textContent = snowCoeffVisible; } </script>  <?php $htmlContent = ob_get_clean();  // 5. SEO $protocol = isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] === 'on' ? 'https://' : 'http://'; $host = $_SERVER['HTTP_HOST']; $uri = $_SERVER['REQUEST_URI']; $canonicalUrl = $protocol . $host . $uri;  $jsonLd = generateHubJsonLd([     'title' => 'Справочник по кровлям: минимальные уклоны, снеговые коэффициенты | ТЕХСТАНДАРТ',     'description' => 'Таблицы по СП 17.13330.2017: минимальные уклоны кровель для металлочерепицы, профнастила, фальца, рулонных материалов; коэффициенты снеговой нагрузки.',     'url' => $canonicalUrl,     'item_count' => $totalSlopes + $totalSnowCoeffs,     'hub_type' => 'dataset',     'dataset_name' => 'Кровли: уклоны и снеговые коэффициенты',     'source_norms' => ['СП 17.13330.2017 Кровли'],     'spatial_coverage' => 'Россия',     'keywords' => 'минимальный уклон кровли, уклон кровли из профнастила, уклон металлочерепицы, снеговая нагрузка на кровлю, коэффициент формы снега',     'breadcrumb' => [         ['name' => 'Главная', 'url' => '/'],         ['name' => 'Справочники', 'url' => '/hubs/'],         ['name' => 'Кровли', 'url' => ''],     ],     'include_website' => true,     'date_published' => '2024-01-15',     'search_url' => 'https://tech-stc.ru/hub/roofing/?search={search_term_string}',     'tables' => [         [             'name' => 'Минимальные уклоны кровель',             'description' => 'Минимальные и максимальные уклоны для различных кровельных покрытий',             'citation' => 'СП 17.13330.2017 приложение А',             'rows' => $totalSlopes,             'columns' => 5,         ],         [             'name' => 'Снеговые коэффициенты для кровель',             'description' => 'Коэффициенты формы μ, выдувания c_e, теплового сдвига c_t для расчёта снеговой нагрузки',             'citation' => 'СП 17.13330.2017 приложение Б',             'rows' => $totalSnowCoeffs,             'columns' => 5,         ],     ],     'variable_measured' => [         'Минимальный уклон (%)',         'Минимальный уклон (градусы)',         'Максимальный уклон (%)',         'Коэффициент формы снега (μ)',         'Коэффициент выдувания (c_e)',         'Коэффициент теплового сдвига (c_t)',     ], ]);  $pageData = [     'title' => 'Справочник по кровлям: минимальные уклоны, снеговые коэффициенты | ТЕХСТАНДАРТ',     'description' => 'Таблицы по СП 17.13330.2017: минимальные уклоны кровель для металлочерепицы, профнастила, фальца, рулонных материалов; коэффициенты снеговой нагрузки.',     'h1' => 'Справочник по кровлям',     'content' => $htmlContent,     'breadcrumb' => [         ['name' => 'Главная', 'url' => '/'],         ['name' => 'Справочники', 'url' => '/hubs/'],         ['name' => 'Кровли', 'url' => '']     ],     'template' => 'default',     'canonical_url' => $canonicalUrl,     'robots' => 'index, follow',     'keywords' => 'минимальный уклон кровли, уклон кровли из профнастила, уклон металлочерепицы, снеговая нагрузка на кровлю, коэффициент формы снега',     'json_ld' => $jsonLd ];  require_once $_SERVER['DOCUMENT_ROOT'] . '/shell/render.php'; renderModule($pageData);
========================================
ФАЙЛ #16: smart-home-green-tech/config.php
Расширение: php
Размер: 2,800 байт
========================================
<?php return [     'title' => 'Умный дом и зелёные технологии | ТЕХСТАНДАРТ',     'description' => 'Калькуляторы для систем умного дома и возобновляемой энергетики: автоматизация, климат-контроль, солнечные панели, энергоэффективность.',     'h1' => 'Умный дом, автоматизация, солнечная энергетика',     'breadcrumb_name' => 'Умный дом и зелёные технологии',     'keywords' => 'умный дом, автоматизация, солнечные панели, энергоэффективность, климат-контроль',     'intro_text' => 'Калькуляторы для систем умного дома: автоматизация освещения, климат-контроль, солнечные панели, энергомониторинг.',          'calculators' => [         // Умный дом         ['title' => 'Система умного дома', 'url' => '/engineering-calculators/smart-home-green/smart-home-automation-system-calculator/'],         ['title' => 'Мониторинг энергопотребления', 'url' => '/engineering-calculators/smart-home-green/smart-home-energy-monitoring-optimization-calculator/'],         ['title' => 'Умная система безопасности', 'url' => '/engineering-calculators/smart-home-green/smart-security-system-sensors-calculator/'],         ['title' => 'Умная система полива', 'url' => '/engineering-calculators/smart-home-green/smart-irrigation-with-soil-moisture-sensors-calculator/'],                  // Климат и вентиляция         ['title' => 'Умная вентиляция (CO₂, влажность)', 'url' => '/engineering-calculators/smart-home-green/smart-ventilation-humidity-co2-control-calculator/'],         ['title' => 'Климат-контроль в теплице', 'url' => '/engineering-calculators/smart-home-green/smart-greenhouse-climate-control-calculator/'],                  // Возобновляемая энергия         ['title' => 'Солнечные панели (мощность и количество)', 'url' => '/engineering-calculators/smart-home-green/solar-panel-power-and-quantity-calculator/'],         ['title' => 'Солнечные коллекторы для ГВС', 'url' => '/engineering-calculators/smart-home-green/solar-water-heater-collectors-calculator/'],         ['title' => 'Расчёт энергоэффективности дома', 'url' => '/engineering-calculators/smart-home-green/sustainable-building-leed-breeam-calculator/'],     ], ];
========================================
ФАЙЛ #17: smart-home-green-tech/index.php
Расширение: php
Размер: 109 байт
========================================
<?php $config = require __DIR__ . '/config.php'; require_once __DIR__ . '/../_templates/hub-template.php';
========================================
ФАЙЛ #18: soil-reference/index.php
Расширение: php
Размер: 13,996 байт
========================================
<?php declare(strict_types=1);  require_once $_SERVER['DOCUMENT_ROOT'] . '/regulations/lib/loader.php'; require_once $_SERVER['DOCUMENT_ROOT'] . '/shell/json-ld-hub-generator.php';  // 1. Загружаем данные из СП 22 $classData = NormLoader::getTable('sp-22-13330-2016', 'appendix-a'); $resistanceData = NormLoader::getTable('sp-22-13330-2016', 'appendix-b');  $soils = [];  // 2. Базовый список грунтов из классификации if ($classData && !empty($classData['rows'])) {     foreach ($classData['rows'] as $row) {         $soilName = trim((string)$row[0]);         $soils[$soilName] = [             'name' => $soilName,             'density' => $row[1] ?? '—',             'friction_angle' => $row[2] ?? '—',             'cohesion' => $row[3] ?? '—',             'deformation_modulus' => $row[4] ?? '—',             'r0_b1_d2' => '—',             'r0_b2_d3' => '—',             'r0_b3_d4' => '—',             'k_coef' => '—',         ];     } }  // 3. Обогащаем данными сопротивления if ($resistanceData && !empty($resistanceData['rows'])) {     foreach ($resistanceData['rows'] as $row) {         $soilName = trim((string)$row[0]);         if (isset($soils[$soilName])) {             $soils[$soilName]['r0_b1_d2'] = $row[1] ?? '—';             $soils[$soilName]['r0_b2_d3'] = $row[2] ?? '—';             $soils[$soilName]['r0_b3_d4'] = $row[3] ?? '—';             $soils[$soilName]['k_coef'] = $row[4] ?? '—';         }     } }  // 4. Сортируем грунты по типу $order = ['песок', 'супесь', 'суглинок', 'глина']; uksort($soils, function($a, $b) use ($order) {     $posA = PHP_INT_MAX;     $posB = PHP_INT_MAX;     foreach ($order as $idx => $type) {         if (stripos($a, $type) !== false) $posA = $idx;         if (stripos($b, $type) !== false) $posB = $idx;     }     return $posA <=> $posB; });  $totalSoils = count($soils);  // 5. Генерация HTML ob_start(); ?> <div class="hub-container">     <p class="lead">Справочник грунтов и оснований по СП 22.13330.2016: классификация, физико-механические свойства, расчётное сопротивление R₀ для фундаментов.</p>      <!-- Блок калькуляторов -->     <div class="card mb-6">         <div class="card__body">             <h3 class="card__title hub-card-title">                 Расчёты фундаментов             </h3>             <div class="btn-group flex-wrap">                 <a href="/engineering-calculators/foundations/foundation-calculation-depth-laying/" class="btn btn-primary btn-sm">                     Глубина заложения фундамента                 </a>                 <a href="/engineering-calculators/foundations/foundation-calculation-tape-foundation/" class="btn btn-outline btn-sm">                     Ленточный фундамент                 </a>                 <a href="/engineering-calculators/foundations/foundation-calculation-pile-foundation/" class="btn btn-outline btn-sm">                     Свайный фундамент                 </a>             </div>         </div>     </div>      <!-- Блок методик расчётов -->     <div class="card mb-6">         <div class="card__body">             <h3 class="card__title hub-card-title">                 Методики расчётов             </h3>             <div class="btn-group flex-wrap">                 <a href="/guides/foundation/foundation-reinforcement-calculation.php" class="btn btn-outline btn-sm">                     Расчёт армирования фундамента                 </a>                 <a href="/guides/foundation/concrete-calculation.php" class="btn btn-outline btn-sm">                     Расчёт бетона для фундамента                 </a>                 <a href="/guides/foundation/blind-area-calculation.php" class="btn btn-outline btn-sm">                     Расчёт отмостки                 </a>                 <a href="/guides/roof/flat-roof-calculation.php" class="btn btn-outline btn-sm">                     Расчёт плоской кровли                 </a>                 <a href="/guides/water/water-consumption-calculation.php" class="btn btn-outline btn-sm">                     Расчёт водопотребления                 </a>             </div>         </div>     </div>      <!-- Поиск -->     <div class="hub-search-box">         <i class="bi bi-search hub-search-icon"></i>         <input type="text" id="soilSearch" class="hub-search-input" placeholder="Введите тип грунта..." onkeyup="filterTables()">     </div>      <!-- Таблица 1: Классификация грунтов -->     <h2 class="mt-5 mb-3">Классификация грунтов (приложение А СП 22.13330)</h2>     <div class="table-responsive">         <table class="norm-table" id="classTable">             <thead>                 <tr>                     <th>Тип грунта</th>                     <th class="numeric">Плотность ρ, кг/м³</th>                     <th class="numeric">Угол трения φ, град</th>                     <th class="numeric">Сцепление c, кПа</th>                     <th class="numeric">Модуль деформации E, МПа</th>                 </tr>             </thead>             <tbody>                 <?php foreach ($soils as $soil): ?>                 <tr data-soil-name="<?= htmlspecialchars($soil['name']) ?>">                     <td class="soil-name"><?= htmlspecialchars($soil['name']) ?></td>                     <td class="numeric"><?= htmlspecialchars($soil['density']) ?></td>                     <td class="numeric"><?= htmlspecialchars($soil['friction_angle']) ?></td>                     <td class="numeric"><?= htmlspecialchars($soil['cohesion']) ?></td>                     <td class="numeric"><?= htmlspecialchars($soil['deformation_modulus']) ?></td>                 </tr>                 <?php endforeach; ?>             </tbody>         </table>     </div>      <!-- Таблица 2: Расчётное сопротивление R₀ -->     <h2 class="mt-5 mb-3">Расчётное сопротивление грунтов R₀ (приложение Б СП 22.13330)</h2>     <div class="table-responsive">         <table class="norm-table" id="resistanceTable">             <thead>                 <tr>                     <th>Тип грунта</th>                     <th class="numeric">R₀ при b=1м, d=2м, кПа</th>                     <th class="numeric">R₀ при b=2м, d=3м, кПа</th>                     <th class="numeric">R₀ при b=3м, d=4м, кПа</th>                     <th class="numeric">Коэф. k (b > 6м)</th>                 </tr>             </thead>             <tbody>                 <?php foreach ($soils as $soil): ?>                 <tr data-soil-name="<?= htmlspecialchars($soil['name']) ?>">                     <td class="soil-name"><?= htmlspecialchars($soil['name']) ?></td>                     <td class="numeric"><?= htmlspecialchars($soil['r0_b1_d2']) ?></td>                     <td class="numeric"><?= htmlspecialchars($soil['r0_b2_d3']) ?></td>                     <td class="numeric"><?= htmlspecialchars($soil['r0_b3_d4']) ?></td>                     <td class="numeric"><?= htmlspecialchars($soil['k_coef']) ?></td>                 </tr>                 <?php endforeach; ?>             </tbody>         </table>     </div>      <div class="mt-4 text-muted">         * Найдено типов грунтов: <span id="soilCount"><?= $totalSoils ?></span>. Данные по СП 22.13330.2016 (актуализированная версия).     </div> </div>  <script> function filterTables() {     const input = document.getElementById('soilSearch');     const filter = input.value.trim().toLowerCase();          const classTable = document.getElementById('classTable');     const resistanceTable = document.getElementById('resistanceTable');          const classRows = classTable.querySelectorAll('tbody tr');     const resistanceRows = resistanceTable.querySelectorAll('tbody tr');          let visibleCount = 0;          // Фильтруем первую таблицу     classRows.forEach(row => {         const soilNameCell = row.querySelector('td.soil-name');         if (soilNameCell) {             const text = soilNameCell.textContent.trim().toLowerCase();             if (filter === '' || text.indexOf(filter) > -1) {                 row.style.display = '';                 visibleCount++;             } else {                 row.style.display = 'none';             }         }     });          // Фильтруем вторую таблицу (синхронно)     resistanceRows.forEach(row => {         const soilNameCell = row.querySelector('td.soil-name');         if (soilNameCell) {             const text = soilNameCell.textContent.trim().toLowerCase();             if (filter === '' || text.indexOf(filter) > -1) {                 row.style.display = '';             } else {                 row.style.display = 'none';             }         }     });          // Обновляем счётчик     document.getElementById('soilCount').textContent = visibleCount; } </script>  <?php $htmlContent = ob_get_clean();  // 6. SEO $protocol = isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] === 'on' ? 'https://' : 'http://'; $host = $_SERVER['HTTP_HOST']; $uri = $_SERVER['REQUEST_URI']; $canonicalUrl = $protocol . $host . $uri;  $jsonLd = generateHubJsonLd([     'title' => 'Справочник грунтов и оснований: классификация, расчётное сопротивление R₀ | ТЕХСТАНДАРТ',     'description' => 'Таблицы грунтов по СП 22.13330.2016: классификация песков, супесей, суглинков, глин; расчётное сопротивление R₀ для фундаментов.',     'url' => $canonicalUrl,     'item_count' => $totalSoils,     'hub_type' => 'dataset',     'dataset_name' => 'Грунты Российской Федерации: классификация и расчётное сопротивление',     'source_norms' => ['СП 22.13330.2016 Основания зданий и сооружений'],     'spatial_coverage' => 'Россия',     'keywords' => 'расчётное сопротивление грунта, классификация грунтов, угол внутреннего трения, удельное сцепление, модуль деформации',     'breadcrumb' => [         ['name' => 'Главная', 'url' => '/'],         ['name' => 'Справочники', 'url' => '/hubs/'],         ['name' => 'Грунты и основания', 'url' => ''],     ],     'include_website' => true,     'date_published' => '2024-01-15',     'search_url' => 'https://tech-stc.ru/hub/soil-reference/?search={search_term_string}',     'tables' => [         [             'name' => 'Классификация грунтов',             'description' => 'Физико-механические свойства грунтов: плотность, угол внутреннего трения, удельное сцепление, модуль деформации',             'citation' => 'СП 22.13330.2016 приложение А',             'rows' => $totalSoils,             'columns' => 5,         ],         [             'name' => 'Расчётное сопротивление грунтов R₀',             'description' => 'Нормативные значения сопротивления грунтов при различных ширинах фундамента',             'citation' => 'СП 22.13330.2016 приложение Б',             'rows' => $totalSoils,             'columns' => 5,         ],     ],     'variable_measured' => [         'Плотность грунта (кг/м³)',         'Угол внутреннего трения (град)',         'Удельное сцепление (кПа)',         'Модуль деформации (МПа)',         'Расчётное сопротивление R₀ (кПа)',     ], ]);  $pageData = [     'title' => 'Справочник грунтов и оснований: классификация, расчётное сопротивление R₀ | ТЕХСТАНДАРТ',     'description' => 'Таблицы грунтов по СП 22.13330.2016: классификация песков, супесей, суглинков, глин; расчётное сопротивление R₀ для фундаментов.',     'h1' => 'Справочник грунтов и оснований',     'content' => $htmlContent,     'breadcrumb' => [         ['name' => 'Главная', 'url' => '/'],         ['name' => 'Справочники', 'url' => '/hubs/'],         ['name' => 'Грунты и основания', 'url' => '']     ],     'template' => 'default',     'canonical_url' => $canonicalUrl,     'robots' => 'index, follow',     'keywords' => 'расчётное сопротивление грунта, классификация грунтов, угол внутреннего трения, удельное сцепление, модуль деформации',     'json_ld' => $jsonLd ];  require_once $_SERVER['DOCUMENT_ROOT'] . '/shell/render.php'; renderModule($pageData);
========================================
ФАЙЛ #19: structural-engineering/config.php
Расширение: php
Размер: 2,656 байт
========================================
<?php return [     'title' => 'Несущие конструкции и строительная механика | ТЕХСТАНДАРТ',     'description' => 'Калькуляторы для расчёта несущих конструкций: фундаментные плиты, балки, колонны, перекрытия, армирование. Расчёты по СП 63.13330, СП 16.13330, СП 64.13330.',     'h1' => 'Несущие конструкции: балки, колонны, плиты, ростверки',     'breadcrumb_name' => 'Несущие конструкции',     'keywords' => 'несущие конструкции, расчёт балки, фундаментная плита, ростверк, армирование, перекрытие, колонна',     'intro_text' => 'Калькуляторы для расчёта несущих конструкций по нормативам РФ: фундаментные плиты, ростверки, балки, колонны, перекрытия, армирование.',          'calculators' => [         // Фундаменты и ростверки         ['title' => 'Фундаментная плита с рёбрами жёсткости', 'url' => '/engineering-calculators/foundations/raft-foundation-with-stiffening-ribs/'],         ['title' => 'Ленточный ростверк под сваи', 'url' => '/engineering-calculators/foundations/foundation-beam-calculation/'],                  // Балки и перекрытия         ['title' => 'Деревянная балка перекрытия', 'url' => '/engineering-calculators/timber/wooden-beam-calculator/'],         ['title' => 'Стальная балка (двутавр)', 'url' => '/engineering-calculators/metal/steel-beam-calculator/'],         ['title' => 'Прогиб балки', 'url' => '/engineering-calculators/structures/beam-deflection-calculator/'],         ['title' => 'Монолитное перекрытие', 'url' => '/engineering-calculators/concrete/concrete-slab-calculator/'],                  // Колонны и армирование         ['title' => 'Расчёт колонны железобетонной', 'url' => '/engineering-calculators/concrete/concrete-column-calculator/'],         ['title' => 'Расчёт армирования балки', 'url' => '/engineering-calculators/structures/beam-reinforcement-steel-calculator/'],                  // Лестницы         ['title' => 'Расчёт лестницы', 'url' => '/engineering-calculators/stairs/stair-calculator/'],     ], ];
========================================
ФАЙЛ #20: structural-engineering/index.php
Расширение: php
Размер: 109 байт
========================================
<?php $config = require __DIR__ . '/config.php'; require_once __DIR__ . '/../_templates/hub-template.php';
========================================
ФАЙЛ #21: timber/index.php
Расширение: php
Размер: 13,330 байт
========================================
<?php declare(strict_types=1);  require_once $_SERVER['DOCUMENT_ROOT'] . '/regulations/lib/loader.php'; require_once $_SERVER['DOCUMENT_ROOT'] . '/shell/json-ld-hub-generator.php';  // 1. Загружаем данные из СП 64 $strengthData = NormLoader::getTable('sp-64-13330-2017', 'appendix-a'); $coefficientData = NormLoader::getTable('sp-64-13330-2017', 'appendix-b');  $timberGrades = []; $workCoeffs = [];  // 2. Сорта и прочностные характеристики древесины if ($strengthData && !empty($strengthData['rows'])) {     foreach ($strengthData['rows'] as $row) {         $timberGrades[] = [             'species' => $row[0] ?? '—',             'grade' => $row[1] ?? '—',             'r_c' => $row[2] ?? '—',             'r_t' => $row[3] ?? '—',             'r_b' => $row[4] ?? '—',             'r_sk' => $row[5] ?? '—',             'e' => $row[6] ?? '—',         ];     } }  // 3. Коэффициенты условий работы if ($coefficientData && !empty($coefficientData['rows'])) {     foreach ($coefficientData['rows'] as $row) {         $workCoeffs[] = [             'condition' => $row[0] ?? '—',             'm' => $row[1] ?? '—',             'notes' => $row[2] ?? '—',         ];     } }  $totalGrades = count($timberGrades); $totalCoeffs = count($workCoeffs);  // 4. Генерация HTML ob_start(); ?> <div class="hub-container">     <p class="lead">Справочник деревянных конструкций по СП 64.13330.2017: расчётные сопротивления древесины различных пород и сортов, коэффициенты условий работы.</p>      <!-- Блок калькуляторов -->     <div class="card mb-6">         <div class="card__body">             <h3 class="card__title hub-card-title">                 Расчёты деревянных конструкций             </h3>             <div class="btn-group flex-wrap">                 <a href="/engineering-calculators/structures/beams-calculator-wooden-beams/" class="btn btn-primary btn-sm">                     Расчёт деревянных балок                 </a>                 <a href="/engineering-calculators/structures/beams-calculator-glued-beams/" class="btn btn-outline btn-sm">                     Клеёные деревянные балки                 </a>                 <a href="/engineering-calculators/roofing/roof-calculation-rafters/" class="btn btn-outline btn-sm">                     Расчёт стропил                 </a>             </div>         </div>     </div>      <!-- Блок методик расчётов -->     <div class="card mb-6">         <div class="card__body">             <h3 class="card__title hub-card-title">                 Методики расчётов             </h3>             <div class="btn-group flex-wrap">                 <a href="/guides/foundation/foundation-reinforcement-calculation.php" class="btn btn-outline btn-sm">                     Расчёт армирования фундамента                 </a>                 <a href="/guides/foundation/concrete-calculation.php" class="btn btn-outline btn-sm">                     Расчёт бетона для фундамента                 </a>                 <a href="/guides/foundation/blind-area-calculation.php" class="btn btn-outline btn-sm">                     Расчёт отмостки                 </a>                 <a href="/guides/roof/flat-roof-calculation.php" class="btn btn-outline btn-sm">                     Расчёт плоской кровли                 </a>                 <a href="/guides/water/water-consumption-calculation.php" class="btn btn-outline btn-sm">                     Расчёт водопотребления                 </a>             </div>         </div>     </div>      <!-- Поиск -->     <div class="hub-search-box">         <i class="bi bi-search hub-search-icon"></i>         <input type="text" id="timberSearch" class="hub-search-input" placeholder="Введите породу древесины или условие..." onkeyup="filterTables()">     </div>      <!-- Таблица 1: Сорта и прочностные характеристики -->     <h2 class="mt-5 mb-3">Сорта и прочностные характеристики древесины (приложение А СП 64.13330)</h2>     <div class="table-responsive">         <table class="norm-table" id="strengthTable">             <thead>                 <tr>                     <th>Порода древесины</th>                     <th>Сорт</th>                     <th class="numeric">R_c, МПа (сжатие)</th>                     <th class="numeric">R_t, МПа (растяжение)</th>                     <th class="numeric">R_b, МПа (изгиб)</th>                     <th class="numeric">R_sk, МПа (скалывание)</th>                     <th class="numeric">E, МПа</th>                 </tr>             </thead>             <tbody>                 <?php foreach ($timberGrades as $item): ?>                 <tr data-search-text="<?= htmlspecialchars(strtolower($item['species'] . ' ' . $item['grade'])) ?>">                     <td class="search-cell"><?= htmlspecialchars($item['species']) ?></td>                     <td><?= htmlspecialchars($item['grade']) ?></td>                     <td class="numeric"><?= htmlspecialchars($item['r_c']) ?></td>                     <td class="numeric"><?= htmlspecialchars($item['r_t']) ?></td>                     <td class="numeric"><?= htmlspecialchars($item['r_b']) ?></td>                     <td class="numeric"><?= htmlspecialchars($item['r_sk']) ?></td>                     <td class="numeric"><?= htmlspecialchars($item['e']) ?></td>                 </tr>                 <?php endforeach; ?>             </tbody>         </table>     </div>      <!-- Таблица 2: Коэффициенты условий работы -->     <h2 class="mt-5 mb-3">Коэффициенты условий работы древесины (приложение Б СП 64.13330)</h2>     <div class="table-responsive">         <table class="norm-table" id="coeffTable">             <thead>                 <tr>                     <th>Условие работы</th>                     <th class="numeric">Коэффициент m</th>                     <th>Применение</th>                 </tr>             </thead>             <tbody>                 <?php foreach ($workCoeffs as $item): ?>                 <tr data-search-text="<?= htmlspecialchars(strtolower($item['condition'])) ?>">                     <td class="search-cell"><?= htmlspecialchars($item['condition']) ?></td>                     <td class="numeric"><?= htmlspecialchars($item['m']) ?></td>                     <td><?= htmlspecialchars($item['notes']) ?></td>                 </tr>                 <?php endforeach; ?>             </tbody>         </table>     </div>      <div class="mt-4 text-muted">         * Найдено сортов древесины: <span id="strengthCount"><?= $totalGrades ?></span> |          Коэффициентов: <span id="coeffCount"><?= $totalCoeffs ?></span>     </div> </div>  <script> function filterTables() {     const input = document.getElementById('timberSearch');     const filter = input.value.trim().toLowerCase();          const strengthTable = document.getElementById('strengthTable');     const coeffTable = document.getElementById('coeffTable');          const strengthRows = strengthTable.querySelectorAll('tbody tr');     const coeffRows = coeffTable.querySelectorAll('tbody tr');          let strengthVisible = 0;     let coeffVisible = 0;          strengthRows.forEach(row => {         const searchText = row.getAttribute('data-search-text') || '';         if (filter === '' || searchText.indexOf(filter) > -1) {             row.style.display = '';             strengthVisible++;         } else {             row.style.display = 'none';         }     });          coeffRows.forEach(row => {         const searchText = row.getAttribute('data-search-text') || '';         if (filter === '' || searchText.indexOf(filter) > -1) {             row.style.display = '';             coeffVisible++;         } else {             row.style.display = 'none';         }     });          document.getElementById('strengthCount').textContent = strengthVisible;     document.getElementById('coeffCount').textContent = coeffVisible; } </script>  <?php $htmlContent = ob_get_clean();  // 5. SEO $protocol = isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] === 'on' ? 'https://' : 'http://'; $host = $_SERVER['HTTP_HOST']; $uri = $_SERVER['REQUEST_URI']; $canonicalUrl = $protocol . $host . $uri;  $jsonLd = generateHubJsonLd([     'title' => 'Справочник деревянных конструкций: расчётные сопротивления древесины, коэффициенты условий работы | ТЕХСТАНДАРТ',     'description' => 'Таблицы по СП 64.13330.2017: расчётные сопротивления древесины сосны, ели, лиственницы, дуба по сортам; коэффициенты условий работы m.',     'url' => $canonicalUrl,     'item_count' => $totalGrades + $totalCoeffs,     'hub_type' => 'dataset',     'dataset_name' => 'Древесина: расчётные сопротивления и коэффициенты',     'source_norms' => ['СП 64.13330.2017 Деревянные конструкции'],     'spatial_coverage' => 'Россия',     'keywords' => 'расчётное сопротивление древесины, сорта древесины, модуль упругости древесины, коэффициент условий работы древесины, СП 64',     'breadcrumb' => [         ['name' => 'Главная', 'url' => '/'],         ['name' => 'Справочники', 'url' => '/hubs/'],         ['name' => 'Древесина', 'url' => ''],     ],     'include_website' => true,     'date_published' => '2024-01-15',     'search_url' => 'https://tech-stc.ru/hub/timber/?search={search_term_string}',     'tables' => [         [             'name' => 'Сорта и прочностные характеристики древесины',             'description' => 'Расчётные сопротивления древесины различных пород и сортов при сжатии, растяжении, изгибе, скалывании',             'citation' => 'СП 64.13330.2017 приложение А',             'rows' => $totalGrades,             'columns' => 7,         ],         [             'name' => 'Коэффициенты условий работы древесины',             'description' => 'Коэффициенты m для учёта влажности, температуры, длительности нагрузки и других факторов',             'citation' => 'СП 64.13330.2017 приложение Б',             'rows' => $totalCoeffs,             'columns' => 3,         ],     ],     'variable_measured' => [         'Расчётное сопротивление сжатию (R_c)',         'Расчётное сопротивление растяжению (R_t)',         'Расчётное сопротивление изгибу (R_b)',         'Расчётное сопротивление скалыванию (R_sk)',         'Модуль упругости (E)',         'Коэффициент условий работы (m)',     ], ]);  $pageData = [     'title' => 'Справочник деревянных конструкций: расчётные сопротивления древесины, коэффициенты условий работы | ТЕХСТАНДАРТ',     'description' => 'Таблицы по СП 64.13330.2017: расчётные сопротивления древесины сосны, ели, лиственницы, дуба по сортам; коэффициенты условий работы m.',     'h1' => 'Справочник деревянных конструкций',     'content' => $htmlContent,     'breadcrumb' => [         ['name' => 'Главная', 'url' => '/'],         ['name' => 'Справочники', 'url' => '/hubs/'],         ['name' => 'Древесина', 'url' => '']     ],     'template' => 'default',     'canonical_url' => $canonicalUrl,     'robots' => 'index, follow',     'keywords' => 'расчётное сопротивление древесины, сорта древесины, модуль упругости древесины, коэффициент условий работы древесины, СП 64',     'json_ld' => $jsonLd ];  require_once $_SERVER['DOCUMENT_ROOT'] . '/shell/render.php'; renderModule($pageData);
========================================
ФАЙЛ #22: water-supply-plumbing/config.php
Расширение: php
Размер: 3,707 байт
========================================
<?php return [     'title' => 'Водоснабжение и сантехника | ТЕХСТАНДАРТ',     'description' => 'Калькуляторы для систем водоснабжения: расчёт водопотребления, давления, насосные станции, скважины, обратный осмос, защита от протечек.',     'h1' => 'Водоснабжение, насосы, сантехника, очистка воды',     'breadcrumb_name' => 'Водоснабжение и сантехника',     'keywords' => 'водоснабжение, насосная станция, скважина, водопровод, обратный осмос, защита от протечек, сантехника',     'intro_text' => 'Калькуляторы для систем водоснабжения: расчёт водопотребления, давления в трубах, подбор насосных станций, скважин, очистки воды и защиты от протечек.',      'calculators' => [     // Водопотребление и давление     ['title' => 'Калькулятор потребления воды на участке', 'url' => '/engineering-calculators/engineering-systems/water-consumption-demand-calculator/'],     ['title' => 'Калькулятор водопотребления (суточный)', 'url' => '/engineering-calculators/engineering-systems/water-consumption-calculator/'],     ['title' => 'Калькулятор давления в водопроводе', 'url' => '/engineering-calculators/engineering-systems/water-supply-pressure-calculator/'],     ['title' => 'Гидравлический расчёт водопровода', 'url' => '/engineering-calculators/engineering-systems/hydraulic-calculation-water-supply/'],     ['title' => 'Расчёт потерь воды', 'url' => '/engineering-calculators/engineering-systems/water-loss-calculator/'],     ['title' => 'Тепловое расширение трубопровода', 'url' => '/engineering-calculators/engineering-systems/water-supply-pipeline-thermal-expansion/'],      // Насосы и станции     ['title' => 'Подбор насосной станции', 'url' => '/engineering-calculators/engineering-systems/water-pumping-station-calculator/'],     ['title' => 'Автоматизация насосной станции', 'url' => '/engineering-calculators/engineering-systems/smart-water-supply-pumps-calculator/'],      // Скважины, колодцы, септики     ['title' => 'Объём колодца из бетонных колец', 'url' => '/engineering-calculators/engineering-systems/concrete-rings-for-septic-well-calculator/'],     ['title' => 'Расчёт объёма септика', 'url' => '/engineering-calculators/engineering-systems/septic-tank-volume-and-installation-calculator/'],     ['title' => 'Сбор дождевой воды', 'url' => '/engineering-calculators/engineering-systems/rainwater-harvesting-system-calculator/'],      // Очистка воды     ['title' => 'Обратный осмос', 'url' => '/engineering-calculators/engineering-systems/reverse-osmosis-calculator/'],     ['title' => 'Обеззараживание воды (хлор, УФ)', 'url' => '/engineering-calculators/engineering-systems/water-disinfection-dosage-calculator/'],      // Безопасность     ['title' => 'Система защиты от протечек', 'url' => '/engineering-calculators/engineering-systems/water-leak-detection-and-shutoff-system-calculator/'], ], ];
========================================
ФАЙЛ #23: water-supply-plumbing/index.php
Расширение: php
Размер: 109 байт
========================================
<?php $config = require __DIR__ . '/config.php'; require_once __DIR__ . '/../_templates/hub-template.php';
========================================
ФАЙЛ #24: wooden-construction/config.php
Расширение: php
Размер: 5,310 байт
========================================
<?php return [     'title' => 'Деревянное домостроение и пиломатериалы | ТЕХСТАНДАРТ',     'description' => 'Каталог по деревянному домостроению: срубы, каркасные дома, пиломатериалы, антисептирование, конопатка, сборка. Примеры смет, расчёты расхода, сравнение пород древесины и защитных составов.',     'h1' => 'Деревянное строительство: срубы, каркасники, пиломатериалы, антисептики',     'breadcrumb_name' => 'Деревянное строительство',     'keywords' => 'деревянный дом, сруб, каркасный дом, пиломатериалы, антисептик для дерева, конопатка сруба, брус',     'intro_text' => 'Калькуляторы для деревянного домостроения: расчёт пиломатериалов, объёма бревна, усушки древесины, антисептиков, теплопотерь и конструкций.',          'calculators' => [         ['title' => 'Калькулятор объёма пиломатериалов', 'url' => '/engineering-calculators/wooden/sawn-timber-calculator/'],         ['title' => 'Объём оцилиндрованного бревна', 'url' => '/engineering-calculators/wooden/round-timber-volume-calculator/'],         ['title' => 'Кубатура доски обрезной', 'url' => '/engineering-calculators/wooden/sawn-timber-calculator/'],         ['title' => 'Количество бруса в кубометре', 'url' => '/engineering-calculators/wooden/sawn-timber-calculator/'],         ['title' => 'Расчёт леса на сруб', 'url' => '/engineering-calculators/wooden/log-house-materials-calculator/'],         ['title' => 'Вес пиломатериалов', 'url' => '/engineering-calculators/wooden/timber-yield-calculator/'],         ['title' => 'Расчёт усушки древесины', 'url' => '/engineering-calculators/wooden/wood-shrinkage-calculator/'],         ['title' => 'Усадка сруба из бревна', 'url' => '/engineering-calculators/wooden/log-house-materials-calculator/'],         ['title' => 'Усадка дома из профилированного бруса', 'url' => '/engineering-calculators/wooden/log-house-materials-calculator/'],         ['title' => 'Компенсация усадки в оконных проёмах', 'url' => '/engineering-calculators/wooden/log-house-materials-calculator/'],         ['title' => 'Допустимая влажность древесины по СП 64.13330', 'url' => '/engineering-calculators/wooden/wood-moisture-calculator/'],         ['title' => 'Теплопотери через деревянные стены', 'url' => '/engineering-calculators/wooden/wooden-walls-heat-loss-calculator/'],         ['title' => 'Требуемая толщина бревна по теплопроводности', 'url' => '/engineering-calculators/wooden/log-house-materials-calculator/'],         ['title' => 'Теплотехнический расчёт брусового дома', 'url' => '/engineering-calculators/wooden/log-house-materials-calculator/'],         ['title' => 'Утепление каркасного дома под дерево', 'url' => '/engineering-calculators/wooden/clt-cross-laminated-timber-house-calculator/'],         ['title' => 'Лаги пола из бруса', 'url' => '/engineering-calculators/wooden/wooden-flooring-calculator/'],         ['title' => 'Стропильная система крыши', 'url' => '/engineering-calculators/wooden/wooden-stairs-calculator/'],         ['title' => 'Обрешётка под металлочерепицу', 'url' => '/engineering-calculators/wooden/wooden-stairs-calculator/'],         ['title' => 'Внутренние перегородки из бруса', 'url' => '/engineering-calculators/wooden/log-house-materials-calculator/'],         ['title' => 'Балки перекрытия из дерева', 'url' => '/engineering-calculators/wooden/wooden-stairs-calculator/'],         ['title' => 'Лестница из дерева', 'url' => '/engineering-calculators/structures/wooden-stairs-calculator/'],         ['title' => 'Расход антисептика для древесины', 'url' => '/engineering-calculators/wooden/wood-preservative-calculator/'],         ['title' => 'Расход огнебиозащиты', 'url' => '/engineering-calculators/wooden/wood-preservative-calculator/'],         ['title' => 'Покраска фасада из дерева', 'url' => '/engineering-calculators/wooden/wood-coating-calculator/'],         ['title' => 'Импрегнация древесины', 'url' => '/engineering-calculators/wooden/wood-preservative-calculator/'],     ],          'normative_docs' => [],     // пусто — не выводим     'guides' => [],             // пусто — не выводим     'equipment' => [],          // пусто — не выводим ];
========================================
ФАЙЛ #25: wooden-construction/index.php
Расширение: php
Размер: 109 байт
========================================
<?php $config = require __DIR__ . '/config.php'; require_once __DIR__ . '/../_templates/hub-template.php';