Ошибка рендеринга шаблонизатора

Обнаружена проблема при обработке шаблона.

Сообщение об ошибке

An exception has been thrown during the rendering of a template ("Call to undefined method Ofey\Logan22\model\statistic\statistic::timeHasPassed()").
Файл:
/var/www/mysterious.su/src/template/sphere/statistic.html
Строка:
396
Тип:
Twig\Error\RuntimeError
Шаблон:
statistic.html
  1. {% elseif player.rank_change == 'new' %}
  2. <i class="fa-solid fa-arrow-up text-success" ></i>
  3. {% endif %}
  4. </div>
  5. </th>
  6. <td><span class="badge" style="background-color: rgba(79, 70, 229, 0.2); color: #818cf8;">{{ timeHasPassed(player.time_in_game, true) }}</span></td>
  7. <td>{{clan_icon(player)|raw}} <span class="clan-name">{{player.clan_name}}</span></td>
  8. <td>{{get_class(player.class_id)}}</td>
  9. </tr>
  10. {% endfor %}
  11. </tbody>
  1. {%extends 'struct.html'%}
  2. {%block title%}{{ phrase('menu_statistics') }}{%endblock%}
  3. {%block css%}
  4. <link rel="stylesheet" href="{{template}}/assets/libs/choices.js/public/assets/styles/choices.min.css">
  5. <link rel="stylesheet" href="{{template}}/assets/libs/prismjs/themes/prism-coy.min.css">
  6. <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.2/css/all.min.css">
  7. <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/aos/2.3.4/aos.css">
  8. <style>
  9. :root {
  10. --l2-primary: #a32c2c;
  11. --l2-secondary: #2c3040;
  12. --l2-accent: #d4af37;
  13. --l2-dark: #1a1a24;
  14. }
  15. /* Фикс для горизонтального скролла */
  16. html, body {
  17. overflow-x: hidden;
  18. width: 100%;
  19. position: relative;
  20. }
  21. .l2-stats-container {
  22. max-width: 100%;
  23. overflow-x: hidden;
  24. }
  25. .table thead th {
  26. font-weight: 600;
  27. text-transform: uppercase;
  28. font-size: 0.8rem;
  29. letter-spacing: 0.5px;
  30. padding: 12px;
  31. border-bottom: 2px solid var(--l2-accent);
  32. }
  33. .table tbody tr {
  34. transition: all 0.2s ease;
  35. }
  36. .table tbody tr:hover {
  37. background-color: rgba(var(--bs-primary-rgb), 0.1);
  38. }
  39. .table tbody tr th,
  40. .table tbody tr td {
  41. padding: 12px;
  42. vertical-align: middle;
  43. }
  44. .stats-header {
  45. position: relative;
  46. padding: 1rem 0;
  47. margin-bottom: 1rem;
  48. text-align: center;
  49. overflow: hidden;
  50. }
  51. .stats-header h1 {
  52. font-size: 2.5rem;
  53. font-weight: 700;
  54. text-transform: uppercase;
  55. letter-spacing: 1px;
  56. margin-bottom: 0.5rem;
  57. position: relative;
  58. z-index: 1;
  59. }
  60. .stats-header::after {
  61. content: '';
  62. position: absolute;
  63. width: 100%;
  64. height: 2px;
  65. bottom: 0;
  66. left: 0;
  67. background: linear-gradient(to right, transparent, var(--l2-accent), transparent);
  68. }
  69. .stats-header p {
  70. max-width: 800px;
  71. margin: 0 auto;
  72. position: relative;
  73. z-index: 1;
  74. }
  75. .alert-l2 {
  76. background: linear-gradient(135deg, #6b1b1b, #8c1e1e);
  77. border-left: 4px solid var(--l2-accent);
  78. border-radius: 4px;
  79. padding: 1rem;
  80. margin-bottom: 1.5rem;
  81. display: flex;
  82. align-items: center;
  83. }
  84. .alert-l2 i {
  85. font-size: 1.5rem;
  86. margin-right: 1rem;
  87. color: var(--l2-accent);
  88. }
  89. /* Стили для анимации glow */
  90. @keyframes glow {
  91. from {
  92. box-shadow: 0 0 4px rgba(212, 175, 55, 0.2);
  93. }
  94. to {
  95. box-shadow: 0 0 16px rgba(212, 175, 55, 0.6);
  96. }
  97. }
  98. ::-webkit-scrollbar-thumb:hover {
  99. background: var(--l2-accent);
  100. }
  101. /* Стиль для всплывающей подсказки с уровнем */
  102. .tooltip-level {
  103. position: relative;
  104. cursor: pointer;
  105. }
  106. .tooltip-level:hover::after {
  107. content: "{{phrase(100)}}: " attr(data-level);
  108. position: absolute;
  109. left: 50%;
  110. transform: translateX(-50%);
  111. bottom: 100%;
  112. margin-bottom: 5px;
  113. background-color: var(--l2-accent);
  114. color: #000;
  115. padding: 5px 10px;
  116. border-radius: 4px;
  117. font-size: 12px;
  118. white-space: nowrap;
  119. opacity: 0;
  120. animation: fadeIn 0.3s forwards;
  121. z-index: 100;
  122. box-shadow: 0 4px 8px rgba(0, 0, 0, 0.3);
  123. }
  124. .tooltip-level:hover::before {
  125. content: "";
  126. position: absolute;
  127. left: 50%;
  128. transform: translateX(-50%);
  129. bottom: 100%;
  130. border-width: 5px;
  131. border-style: solid;
  132. border-color: var(--l2-accent) transparent transparent transparent;
  133. z-index: 100;
  134. opacity: 0;
  135. animation: fadeIn 0.3s forwards;
  136. }
  137. @keyframes fadeIn {
  138. to {
  139. opacity: 1;
  140. }
  141. }
  142. /* Фикс для параллакс-фона */
  143. .parallax-bg {
  144. position: fixed;
  145. top: 0;
  146. left: 0;
  147. width: 100%;
  148. height: 100%;
  149. z-index: -1;
  150. pointer-events: none;
  151. }
  152. /* Responsive adjustments */
  153. @media (max-width: 992px) {
  154. .stats-header h1 {
  155. font-size: 2rem;
  156. }
  157. .counter-container {
  158. flex-wrap: wrap;
  159. }
  160. .counter-item {
  161. width: 45%;
  162. margin-bottom: 1rem;
  163. }
  164. /* Улучшения для таблиц на мобильных устройствах */
  165. .table-responsive {
  166. width: 100%;
  167. margin-bottom: 1rem;
  168. overflow-x: auto;
  169. -webkit-overflow-scrolling: touch;
  170. }
  171. }
  172. @media (max-width: 576px) {
  173. .stats-header h1 {
  174. font-size: 1.5rem;
  175. }
  176. .counter-item {
  177. width: 100%;
  178. }
  179. }
  180. </style>
  181. {%endblock%}
  182. {%block content%}
  183. <div class="parallax-bg"></div>
  184. <div class="container l2-stats-container">
  185. <div class="stats-header" data-aos="fade-down">
  186. <h1>{{ phrase('menu_statistics') }}</h1>
  187. </div>
  188. {%if statusSphereServer() is same as(false)%}
  189. <div class="alert-l2" data-aos="fade-up">
  190. <i class="fas fa-exclamation-triangle"></i>
  191. <div>
  192. <strong>Ошибка!</strong> Сервер Sphere недоступен.
  193. </div>
  194. </div>
  195. {%else%}
  196. <div class="row">
  197. <div class="col-xl-6" data-aos="fade-right" data-aos-delay="50">
  198. <div class="card custom-card">
  199. <div class="card-header justify-content-between">
  200. <div class="card-title">
  201. <i class="fas fa-crosshairs"></i> {{phrase('top_pvp')}}
  202. </div>
  203. </div>
  204. <div class="card-body">
  205. <div class="table-responsive">
  206. <table class="table table-sm text-nowrap table-bordered table-hover">
  207. <thead>
  208. <tr>
  209. <th scope="col">#</th>
  210. <th scope="col">{{phrase('player')}}</th>
  211. <th scope="col"><i class="fas fa-shield-alt"></i> PvP</th>
  212. <th scope="col"><i class="fas fa-skull"></i> PK</th>
  213. <th scope="col">{{phrase(94)}}</th>
  214. <th scope="col">{{phrase(109)}}</th>
  215. </tr>
  216. </thead>
  217. <tbody>
  218. {%for i, player in statistic_get_pvp(0, 10)%}
  219. <tr {%if i == 0%}class="top-player" style="animation: 2s infinite alternate glow;"{%endif%}>
  220. <th scope="row" style="width: 1px;">
  221. {%if i < 3%}
  222. <span class="badge rounded-pill" style="background-color: {%if i == 0%}#FFD700{%elseif i == 1%}#C0C0C0{%else%}#CD7F32{%endif%}; color: #000;">
  223. {{i+1}}
  224. </span>
  225. {%else%}
  226. {{i+1}}
  227. {%endif%}
  228. </th>
  229. <th>
  230. <div class="d-flex align-items-center">
  231. <span class="avatar avatar-sm me-2 {%if player.online%}online{%else%}offline{%endif%} avatar-rounded">
  232. <img src="{{ template('/assets/images/race/' ~ sex(player.sex) ~ '/' ~ get_class_race(player.class_id)) ~ '.jpg' }}" alt="img">
  233. </span>
  234. <span class="tooltip-level" data-level="{{ player.level }}">{{player.player_name}}</span>
  235. {%if player.rank_change == 'up'%}
  236. <i class="fa-solid fa-arrow-up text-success" ></i>
  237. {%elseif player.rank_change == 'down'%}
  238. <i class="fa-solid fa-arrow-down text-danger" ></i>
  239. {%elseif player.rank_change == 'new'%}
  240. <i class="fa-solid fa-arrow-up text-success" ></i>
  241. {%endif%}
  242. </div>
  243. </th>
  244. <td><span class="badge bg-success-transparent">{{player.pvp}}</span></td>
  245. <td><span class="badge bg-danger-transparent">{{player.pk}}</span></td>
  246. <td>{{clan_icon(player)|raw}} <span class="clan-name">{{player.clan_name}}</span></td>
  247. <td>{{get_class(player['class_id'])}}</td>
  248. </tr>
  249. {%endfor%}
  250. </tbody>
  251. </table>
  252. </div>
  253. </div>
  254. </div>
  255. </div>
  256. <div class="col-xl-6" data-aos="fade-left" data-aos-delay="50">
  257. <div class="card custom-card">
  258. <div class="card-header justify-content-between">
  259. <div class="card-title">
  260. <i class="fas fa-skull-crossbones"></i> {{phrase('top_pk')}}
  261. </div>
  262. </div>
  263. <div class="card-body">
  264. <div class="table-responsive">
  265. <table class="table table-sm text-nowrap table-bordered table-hover">
  266. <thead>
  267. <tr>
  268. <th scope="col">#</th>
  269. <th scope="col">{{phrase('player')}}</th>
  270. <th scope="col"><i class="fas fa-shield-alt"></i> PvP</th>
  271. <th scope="col"><i class="fas fa-skull"></i> PK</th>
  272. <th scope="col">{{phrase(94)}}</th>
  273. <th scope="col">{{phrase(109)}}</th>
  274. </tr>
  275. </thead>
  276. <tbody>
  277. {%for i, player in statistic_get_pk(0, 10)%}
  278. <tr {%if i == 0%}class="top-player" style="animation: 2s infinite alternate glow;"{%endif%}>
  279. <th scope="row" style="width: 1px;">
  280. {%if i < 3%}
  281. <span class="badge rounded-pill" style="background-color: {%if i == 0%}#FFD700{%elseif i == 1%}#C0C0C0{%else%}#CD7F32{%endif%}; color: #000;">
  282. {{i+1}}
  283. </span>
  284. {%else%}
  285. {{i+1}}
  286. {%endif%}
  287. </th>
  288. <th>
  289. <div class="d-flex align-items-center">
  290. <span class="avatar avatar-sm me-2 {%if player.online%}online{%else%}offline{%endif%} avatar-rounded">
  291. <img src="{{ template('/assets/images/race/' ~ sex(player.sex) ~ '/' ~ get_class_race(player.class_id)) ~ '.jpg' }}" alt="img">
  292. </span>
  293. <span class="tooltip-level" data-level="{{ player.level }}">{{player.player_name}}</span>
  294. {%if player.rank_change == 'up'%}
  295. <i class="fa-solid fa-arrow-up text-success" ></i>
  296. {%elseif player.rank_change == 'down'%}
  297. <i class="fa-solid fa-arrow-down text-danger" ></i>
  298. {%elseif player.rank_change == 'new'%}
  299. <i class="fa-solid fa-arrow-up text-success" ></i>
  300. {%endif%}
  301. </div>
  302. </th>
  303. <td><span class="badge bg-success-transparent">{{player.pvp}}</span></td>
  304. <td><span class="badge bg-danger-transparent">{{player.pk}}</span></td>
  305. <td>{{clan_icon(player)|raw}} <span class="clan-name">{{player.clan_name}}</span></td>
  306. <td>{{get_class(player['class_id'])}}</td>
  307. </tr>
  308. {%endfor%}
  309. </tbody>
  310. </table>
  311. </div>
  312. </div>
  313. </div>
  314. </div>
  315. </div>
  316. <div class="row">
  317. <div class="col-xl-6" data-aos="fade-right" data-aos-delay="80">
  318. <div class="card custom-card">
  319. <div class="card-header justify-content-between">
  320. <div class="card-title">
  321. <i class="fas fa-hourglass-half"></i> {{phrase('top_online')}}
  322. </div>
  323. </div>
  324. <div class="card-body">
  325. <div class="table-responsive">
  326. <table class="table table-sm text-nowrap table-bordered table-hover">
  327. <thead>
  328. <tr>
  329. <th scope="col">#</th>
  330. <th scope="col">{{phrase('player')}}</th>
  331. <th scope="col"><i class="fas fa-clock"></i> {{phrase(52)}}</th>
  332. <th scope="col">{{phrase(94)}}</th>
  333. <th scope="col">{{phrase(109)}}</th>
  334. </tr>
  335. </thead>
  336. <tbody>
  337. {%for i, player in statistic_players_online_time(0, 10)%}
  338. <tr {%if i == 0%}class="top-player" style="animation: 2s infinite alternate glow;"{%endif%}>
  339. <th scope="row" style="width: 1px;">
  340. {%if i < 3%}
  341. <span class="badge rounded-pill" style="background-color: {%if i == 0%}#FFD700{%elseif i == 1%}#C0C0C0{%else%}#CD7F32{%endif%}; color: #000;">
  342. {{i+1}}
  343. </span>
  344. {%else%}
  345. {{i+1}}
  346. {%endif%}
  347. </th>
  348. <th>
  349. <div class="d-flex align-items-center">
  350. <span class="avatar avatar-sm me-2 {%if player.online%}online{%else%}offline{%endif%} avatar-rounded">
  351. <img src="{{ template('/assets/images/race/' ~ sex(player.sex) ~ '/' ~ get_class_race(player.class_id)) ~ '.jpg' }}" alt="img">
  352. </span>
  353. <span class="tooltip-level" data-level="{{ player.level }}">{{player.player_name}}</span>
  354. {%if player.rank_change == 'up'%}
  355. <i class="fa-solid fa-arrow-up text-success" ></i>
  356. {%elseif player.rank_change == 'down'%}
  357. <i class="fa-solid fa-arrow-down text-danger" ></i>
  358. {%elseif player.rank_change == 'new'%}
  359. <i class="fa-solid fa-arrow-up text-success" ></i>
  360. {%endif%}
  361. </div>
  362. </th>
  363. <td><span class="badge" style="background-color: rgba(79, 70, 229, 0.2); color: #818cf8;">{{ timeHasPassed(player.time_in_game, true) }}</span></td>
  364. <td>{{clan_icon(player)|raw}} <span class="clan-name">{{player.clan_name}}</span></td>
  365. <td>{{get_class(player.class_id)}}</td>
  366. </tr>
  367. {%endfor%}
  368. </tbody>
  369. </table>
  370. </div>
  371. </div>
  372. </div>
  373. </div>
  374. <div class="col-xl-6" data-aos="fade-left" data-aos-delay="80">
  375. <div class="card custom-card">
  376. <div class="card-header justify-content-between">
  377. <div class="card-title">
  378. <i class="fas fa-chart-line"></i> {{phrase('top_exp')}}
  379. </div>
  380. </div>
  381. <div class="card-body">
  382. <div class="table-responsive">
  383. <table class="table table-sm text-nowrap table-bordered table-hover">
  384. <thead>
  385. <tr>
  386. <th scope="col">#</th>
  387. <th scope="col">{{phrase('player')}}</th>
  388. <th scope="col"><i class="fas fa-clock"></i> {{phrase(52)}}</th>
  389. <th scope="col">{{phrase(94)}}</th>
  390. <th scope="col">{{phrase(109)}}</th>
  391. </tr>
  392. </thead>
  393. <tbody>
  394. {%for i, player in statistic_get_exp(0, 10)%}
  395. <tr {%if i == 0%}class="top-player" style="animation: 2s infinite alternate glow;"{%endif%}>
  396. <th scope="row" style="width: 1px;">
  397. {%if i < 3%}
  398. <span class="badge rounded-pill" style="background-color: {%if i == 0%}#FFD700{%elseif i == 1%}#C0C0C0{%else%}#CD7F32{%endif%}; color: #000;">
  399. {{i+1}}
  400. </span>
  401. {%else%}
  402. {{i+1}}
  403. {%endif%}
  404. </th>
  405. <th>
  406. <div class="d-flex align-items-center">
  407. <span class="avatar avatar-sm me-2 {%if player.online%}online{%else%}offline{%endif%} avatar-rounded">
  408. <img src="{{ template('/assets/images/race/' ~ sex(player.sex) ~ '/' ~ get_class_race(player.class_id)) ~ '.jpg' }}" alt="img">
  409. </span>
  410. <span class="tooltip-level" data-level="{{ player.level }}">{{player.player_name}}</span>
  411. {%if player.rank_change == 'up'%}
  412. <i class="fa-solid fa-arrow-up text-success"></i>
  413. {%elseif player.rank_change == 'down'%}
  414. <i class="fa-solid fa-arrow-down text-danger"></i>
  415. {%elseif player.rank_change == 'new'%}
  416. <i class="fa-solid fa-arrow-up text-success" ></i>
  417. {%endif%}
  418. </div>
  419. </th>
  420. <td><span class="badge" style="background-color: rgba(79, 70, 229, 0.2); color: #818cf8;">{{ timeHasPassed(player.time_in_game, true) }}</span></td>
  421. <td>{{clan_icon(player)|raw}} <span class="clan-name">{{player.clan_name}}</span></td>
  422. <td>{{get_class(player.class_id)}}</td>
  423. </tr>
  424. {%endfor%}
  425. </tbody>
  426. </table>
  427. </div>
  428. </div>
  429. </div>
  430. </div>
  431. </div>
  432. <div class="row">
  433. <div class="col-xl-6" data-aos="fade-right" data-aos-delay="100">
  434. <div class="card custom-card">
  435. <div class="card-header justify-content-between">
  436. <div class="card-title">
  437. <i class="fas fa-flag"></i> {{phrase(126)}}
  438. </div>
  439. </div>
  440. <div class="card-body">
  441. <div class="table-responsive">
  442. <table class="table table-sm text-nowrap table-bordered table-hover">
  443. <thead>
  444. <tr>
  445. <th scope="col">#</th>
  446. <th scope="col">{{phrase(94)}}</th>
  447. <th scope="col"><i class="fas fa-star"></i> {{phrase(102)}}</th>
  448. <th scope="col"><i class="fas fa-users"></i> {{phrase('allies')}}</th>
  449. </tr>
  450. </thead>
  451. <tbody>
  452. {%for i, clan in statistic_get_clans(0, 10)%}
  453. <tr {%if i == 0%}class="top-player" style="animation: 2s infinite alternate glow;"{%endif%}>
  454. <th scope="row">
  455. {%if i < 3%}
  456. <span class="badge rounded-pill" style="background-color: {%if i == 0%}#FFD700{%elseif i == 1%}#C0C0C0{%else%}#CD7F32{%endif%}; color: #000;">
  457. {{i+1}}
  458. </span>
  459. {%else%}
  460. {{i+1}}
  461. {%endif%}
  462. </th>
  463. <td>{{clan_icon(clan)|raw}} <span class="clan-name">{{clan.clan_name}}</span>
  464. {%if clan.rank_change == 'up'%}
  465. <i class="fa-solid fa-arrow-up text-success" ></i>
  466. {%elseif clan.rank_change == 'down'%}
  467. <i class="fa-solid fa-arrow-down text-danger" ></i>
  468. {%elseif clan.rank_change == 'new'%}
  469. <i class="fa-solid fa-arrow-up text-success" ></i>
  470. {%endif%}
  471. <span class="badge bg-light text-dark">{{ clan.clan_level }}</span> </td>
  472. <td><span class="badge bg-danger-transparent">{{ format_number_fr(clan.reputation_score) }}</span></td>
  473. <td><span class="badge bg-info-transparent" style="background-color: rgba(59, 130, 246, 0.2); color: #60a5fa;">{{ clan.clan_count_members }}</span></td>
  474. </tr>
  475. {%endfor%}
  476. </tbody>
  477. </table>
  478. </div>
  479. </div>
  480. </div>
  481. </div>
  482. <div class="col-xl-6" data-aos="fade-left" data-aos-delay="100">
  483. <div class="card custom-card">
  484. <div class="card-header justify-content-between">
  485. <div class="card-title">
  486. <i class="fas fa-chess-rook"></i> {{phrase(50)}}
  487. </div>
  488. </div>
  489. <div class="card-body">
  490. <div class="table-responsive">
  491. <table class="table table-sm text-nowrap table-bordered table-hover">
  492. <thead>
  493. <tr>
  494. <th scope="col">{{phrase(105)}}</th>
  495. <th scope="col">{{phrase(94)}}</th>
  496. <th scope="col">{{phrase(101)}}</th>
  497. <th scope="col"><i class="fas fa-percentage"></i> {{phrase(106)}}</th>
  498. <th scope="col"><i class="fas fa-calendar"></i> {{phrase(107)}}</th>
  499. </tr>
  500. </thead>
  501. <tbody>
  502. {%for i, castle in statistic_get_castle()%}
  503. <tr>
  504. <th scope="row"><span class="castle-name">{{ get_castle(castle.castle_id) }}</span></th>
  505. <td>{{clan_icon(castle.clan_crest)|raw}} <span class="clan-name">{{castle.clan_name }}</span> <span class="badge bg-light text-dark">{{ castle.clan_level }}</span> </td>
  506. <td><span class="lord-name">{{ castle.player_name }}</span></td>
  507. <td><span class="badge" style="background-color: rgba(245, 158, 11, 0.2); color: #f59e0b;">{{ castle.tax??0 }}%</span></td>
  508. <td><span class="badge bg-primary-transparent" style="background-color: rgba(99, 102, 241, 0.2); color: #818cf8;">{{ unitToDate(castle.siege_date) }}</span></td>
  509. </tr>
  510. {%endfor%}
  511. </tbody>
  512. </table>
  513. </div>
  514. </div>
  515. </div>
  516. </div>
  517. </div>
  518. {%endif%}
  519. </div>
  520. {%endblock%}
  521. {%block js%}
  522. <script src="{{template}}/assets/libs/@simonwep/pickr/pickr.es5.min.js"></script>
  523. <script src="{{template}}/assets/libs/prismjs/prism.js"></script>
  524. <script src="{{template}}/assets/js/prism-custom.js"></script>
  525. <script src="https://cdnjs.cloudflare.com/ajax/libs/aos/2.3.4/aos.js"></script>
  526. <script>
  527. $(document).ready(function() {
  528. // Исправление проблемы горизонтального скролла до прокрутки
  529. $("html, body").css({
  530. "overflow-x": "hidden",
  531. "width": "100%"
  532. });
  533. // Принудительное скрытие горизонтального скролла
  534. setTimeout(function() {
  535. $(window).trigger('resize');
  536. $(".table-responsive").css("overflow-x", "auto");
  537. }, 50);
  538. // Инициализация библиотеки анимаций с измененными настройками
  539. AOS.init({
  540. duration: 800,
  541. easing: 'ease-in-out',
  542. once: true,
  543. startEvent: 'DOMContentLoaded',
  544. offset: 0,
  545. delay: 0,
  546. disableMutationObserver: false,
  547. mirror: false,
  548. anchorPlacement: 'top-bottom'
  549. });
  550. // Принудительно активируем все анимации при загрузке
  551. setTimeout(function() {
  552. AOS.refresh();
  553. }, 100);
  554. // Функция параллакса для фона с ограничением
  555. $(window).scroll(function() {
  556. var scrollTop = $(this).scrollTop();
  557. $('.parallax-bg').css({
  558. 'transform': 'translateY(' + Math.min(scrollTop * 0.5, 200) + 'px)',
  559. 'width': '100%',
  560. 'left': '0'
  561. });
  562. });
  563. // Эффект подсветки для наведения на строки в таблицах
  564. $('.table-hover tbody tr').hover(
  565. function() {
  566. $(this).addClass('bg-opacity-25 bg-primary');
  567. },
  568. function() {
  569. $(this).removeClass('bg-opacity-25 bg-primary');
  570. }
  571. );
  572. // Улучшенная анимация для всплывающей подсказки с уровнем
  573. $('.tooltip-level').hover(
  574. function() {
  575. $(this).css({
  576. 'color': '#d4af37',
  577. 'transition': 'all 0.3s ease'
  578. });
  579. },
  580. function() {
  581. $(this).css({
  582. 'color': '',
  583. 'transition': 'all 0.3s ease'
  584. });
  585. }
  586. );
  587. // Добавляем дополнительные классы для мобильного адаптива
  588. if (window.innerWidth < 768) {
  589. $('.table-responsive').addClass('table-responsive-sm');
  590. }
  591. });
  592. // Добавление света при прокрутке страницы вниз
  593. $(window).scroll(function() {
  594. var scrollPosition = $(this).scrollTop();
  595. if (scrollPosition > 100) {
  596. $('body').addClass('scrolled');
  597. $('.parallax-bg').css('opacity', 0.1 + scrollPosition * 0.0001);
  598. } else {
  599. $('body').removeClass('scrolled');
  600. $('.parallax-bg').css('opacity', 0.15);
  601. }
  602. });
  603. // Функция для исправления горизонтального скролла при загрузке страницы
  604. $(window).on('load', function() {
  605. // Устраняем возможный горизонтальный скролл
  606. setTimeout(function(){
  607. $("html, body").css("overflow-x", "hidden");
  608. $(".l2-stats-container").css({
  609. "max-width": "100%",
  610. "overflow-x": "hidden"
  611. });
  612. }, 100);
  613. });
  614. </script>
  615. {%endblock%}
/var/www/mysterious.su/vendor/twig/twig/src/Environment.php(392) : eval()'d code (строка 269)
Twig\Template->yieldBlock()
/var/www/mysterious.su/vendor/twig/twig/src/Template.php (строка 360)
__TwigTemplate_9e315c4c77a09c10ee1e6d142cbd8855->doDisplay()
/var/www/mysterious.su/vendor/twig/twig/src/Environment.php(392) : eval()'d code (строка 46)
Twig\Template->yield()
/var/www/mysterious.su/vendor/twig/twig/src/Template.php (строка 360)
__TwigTemplate_e6e0c67dd35e079fe975cb64c0ce0697->doDisplay()
/var/www/mysterious.su/vendor/twig/twig/src/Template.php (строка 327)
Twig\Template->yield()
/var/www/mysterious.su/vendor/twig/twig/src/TemplateWrapper.php (строка 45)
Twig\Template->display()
/var/www/mysterious.su/src/template/tpl.php (строка 2795)
Twig\TemplateWrapper->display()
/var/www/mysterious.su/src/route/route_registry.php (строка 48)
Ofey\Logan22\template\tpl::display()
[Внутренняя функция]
{closure}()
/var/www/mysterious.su/vendor/bramus/router/src/Bramus/Router/Router.php (строка 430)
call_user_func_array()
/var/www/mysterious.su/vendor/bramus/router/src/Bramus/Router/Router.php (строка 416)
Bramus\Router\Router->invoke()
/var/www/mysterious.su/vendor/bramus/router/src/Bramus/Router/Router.php (строка 280)
Bramus\Router\Router->handle()
/var/www/mysterious.su/src/route/route_registry.php (строка 127)
Bramus\Router\Router->run()
/var/www/mysterious.su/index.php (строка 11)
require('/var/www/mysterious.su/src/rou...')

Переменные доступные в шаблоне:

__route__ (string)
"/statistic"
dir (string)
""
protocol (string)
"https"
path (string)
""
template (string)
"/src/template/sphere/"
pointTime (string)
"0.26"
page_external_css (array)
Array(4)
  • 0: "/src/template/sphere//assets/libs/choices.js/public/assets/styles/choices.min.css"
  • 1: "/src/template/sphere//assets/libs/prismjs/themes/prism-coy.min.css"
  • 2: "https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.2/css/all.min.css"
  • 3: "https://cdnjs.cloudflare.com/ajax/libs/aos/2.3.4/aos.css"
page_external_js (array)
Array(4)
  • 0: "/src/template/sphere//assets/libs/@simonwep/pickr/pickr.es5.min.js"
  • 1: "/src/template/sphere//assets/libs/prismjs/prism.js"
  • 2: "/src/template/sphere//assets/js/prism-custom.js"
  • 3: "https://cdnjs.cloudflare.com/ajax/libs/aos/2.3.4/aos.js"
page_inline_css (string)
":root { --l2-primary: #a32c2c; --l2-secondary: #2c3040; --l2-accent: #d4af37..."
page_inline_js (string)
"$(document).ready(function() { // Исправление проблемы горизонталь..."
page_title (string)
"Статистика"

Возможные решения

Проверьте синтаксис и логику шаблона.
Убедитесь, что все переменные и функции определены и доступны.
Проверьте, не используются ли устаревшие методы или функции.