Pechora.Dev 🐻

Pechora.Dev 🐻

+32
Репутация
250
Рейтинг
#1 [ЕСТЬ РЕШЕНИЕ] Конструктор НОРДИК для Инстант 8 апреля 2026 в 09:37

 Алексей Т, Если страница собирается из 20 блоков и каждый лазает в БД — будет больно. Сделай умный кэш на уровне HTML-фрагментов и страницы целиком.

Успехов, норм тема выглядит.

#2 [ЕСТЬ РЕШЕНИЕ] Конструктор НОРДИК для Инстант 8 апреля 2026 в 00:22

Алексей Т, вы бы хоть текст от ИИ поправили. Стабильный SEO-friendly SSR-рендер — это не про PHP. 

SSR в контексте React/Vue — это когда сервер (Node.js) запускает JS-компоненты, собирает их в HTML и отдает клиенту.

В PHP нет и не может быть такого же SSR. В PHP страница собирается на сервере с рождения — это просто работа PHP-скрипта. Называть это «SSR-рендером» как в Next.js — неграмотно и вводит в заблуждение.

Чтобы было более понятно, что я имею ввиду, раложу так:

1) InstantCMS работает на PHP, а не на каком-то-фреймворке.js
2) PHP по определению рендерит страницы на сервере — это называется «обычный серверный рендеринг», и ему не нужен отдельный термин «SSR»
3) Когда фронтендеры говорят «SSR», они имеют в виду изоморфные JS-приложения, где один и тот же код работает и на сервере, и на клиенте.

Если ты напишешь так в описании, любой техдир или разработчик с опытом сразу поймет, что ты либо копипастишь из ИИ, либо не понимаешь, о чем говоришь.

#3 Мини CRM на базе InstantCMS2 5 апреля 2026 в 22:20

 Jestik, мельком глянул код, особо не вникал — но сразу в первом поле увидел это:

  1. $html_template = <<<'HTML'
  1. var userOpts = `{USER_OPTIONS}`;

Первое — так вообще не нужно делать, такое писали еще для php 4.0 =)

Ну а во втором — у вас уязвимость. Если в ник например попадет кавычка, то можно без проблем через ваш JS выполнить что-нибудь вредоносное. Если вы не против, как будет свободное время форкну и пришлю PR. 

#4 Почему появляется | в виджете? 4 апреля 2026 в 19:37

После долго изучения проблемы (потому что это реально подбешивало) вот что я накопал. Лишний символ | появился в YAML-формате — если несколько раз пересохранить виджет «Социальные кнопки» — то на терий четвертый раз он обязательно проявится. По сути — это не ошибка вставки, это ошибка сериализации массива в YAML. Где-то в коде при сохранении массива options в YAML происходит двойное экранирование или неправильное формирование строки. 

Ну тут уже стало понятно что это системный класс Model. Смотрим что в нем:

  1. public static function arrayToYaml($input_array, $indent = 2, $word_wrap = 40) {
  2. // ...
  3. return Spyc::YAMLDump($array, $indent, $word_wrap);
  4. }

Как мне кажется — проблема в библиотеке Spyc. При сохранении массив options преобразуется в YAML через Spyc::YAMLDump(). 

Соответственно (если я конечно прав) — библиотеку надо либо фиксить, либо менять на что то другое. Если мои наблюдения неверны — пните в нужном направлении. 

Добавлено спустя 4 минуты

Ну и вот соответственно виновник в самой библиотеке

  1. private function _doLiteralBlock($value, $indent) {
  2. if ($value === "\n") {
  3. return '\n';
  4. }
  5. if (strpos($value, "\n") === false && strpos($value, "'") === false) {
  6. return sprintf("'%s'", $value);
  7. }
  8. if (strpos($value, "\n") === false && strpos($value, '"') === false) {
  9. return sprintf('"%s"', $value);
  10. }
  11. $exploded = explode("\n", $value);
  12. $newValue = '|';
  13. $indent += $this->_dumpIndent;
  14. $spaces = str_repeat(' ', $indent);
  15. foreach ($exploded as $line) {
  16. $newValue .= "\n" . $spaces . ($line);
  17. }
  18. return $newValue;
  19. }


Фиксим:

  1. private function _doLiteralBlock($value, $indent) {
  2. if ($value === "\n") {
  3. return '\n';
  4. }
  5.  
  6. if (strlen($value) < 3 && strpos($value, "\n") === false) {
  7. if (strpos($value, "'") === false) {
  8. return sprintf("'%s'", $value);
  9. }
  10. if (strpos($value, '"') === false) {
  11. return sprintf('"%s"', $value);
  12. }
  13. }
  14.  
  15. $exploded = explode("\n", $value);
  16. while (isset($exploded[0]) && $exploded[0] === '') {
  17. array_shift($exploded);
  18. }
  19. while (isset($exploded[count($exploded)-1]) && $exploded[count($exploded)-1] === '') {
  20. array_pop($exploded);
  21. }
  22. if (count($exploded) === 1) {
  23. return sprintf('"%s"', addslashes($exploded[0]));
  24. }
  25. $newValue = '|';
  26. $indent += $this->_dumpIndent;
  27. $spaces = str_repeat(' ', $indent);
  28. foreach ($exploded as $line) {
  29. $newValue .= "\n" . $spaces . rtrim($line);
  30. }
  31. return $newValue;
  32. }

Проверяем работу виджета по тому же сценарию — сохраняем три четыре раза — все гуд. работает. Отправлю Pull requests на гит — надеюсь внесут в релиз. 

#5 Обновление шаблона Social 21 марта 2026 в 22:55

Понятно. Aka vc.ru / dtf.ru

#6 Обновление шаблона Social 21 марта 2026 в 22:29

Что за шаблон? Где посмотреть?

#7 Нужна ли полноценная аналитика в модуле iUTM Tracker? 17 марта 2026 в 06:50

Если компонент будет показывать в карточке пользователя, с какой кампании он пришел — это спасение для менеджеров и маркетологов. Не нужно лезть в базу данных или SQL-запросы писать, чтобы понять, что Петров пришел с контекстной рекламы в Яндекс Директе. Так что да, однозначно хорошая идея и направление

#8 Добавление пакетов Scorm 17 марта 2026 в 06:40

Сомневаюсь, что InstantCms умеет обрабатывать файлы этого формата

#9 ZoomiJS 15 марта 2026 в 19:47

 maxisoft, а вы какой ии используете?

#10 ZoomiJS 15 марта 2026 в 19:27

 maxisoft, да, забирают у нас с вами работу, сейчас в каждого второго тыкни на улице — вайбкодер 😁

#11 ZoomiJS 15 марта 2026 в 19:15

звездоку на гитхабе поставил

maxisoft

Спасибо! Тщательно все перечитал, да — замечания верные, буду оптимизировать. Эх, подкинули работы 😁

#12 ZoomiJS 15 марта 2026 в 18:52

 maxisoft, я так и понял, потому что половина из написанного — вообще не так. Да, кое-какие проблемы агент верно нашел, но спорить с ним я не буду, потому что половина написанного — я и слов то таких не знаю 😄

И да. Статический анализ без запуска кода и тестов иногда даёт «ложные срабатывания» (как с disabled или translateX).

#13 ZoomiJS 15 марта 2026 в 18:47

 maxisoft, вы такой огромный анализ через нейросеть сделали?

#14 ZoomiJS 15 марта 2026 в 17:41

 pupsikmaxisoft, у инструментов разные ниши:

Fancybox: документация на английском, лицензия платная для коммерции (бесплатно только для личных проектов с указанием автора). Fancybox — это комбайн: картинки, видео, фреймы, формы, слайдеры и тд.

ZoomiJS: документация на русском, лицензия MIT (делай что хочешь, даже в коммерции), автор на связи в РФ. Zoomi  делает одну вещь: открывает <img> в модалке с зумом и навигацией

 maxisoft,  Спасибо за честный и развернутый ответ! 🙏 Абсолютно не агрюсь — наоборот, такие комментарии самые ценные, потому что помогают увидеть слабые места =)

Вы абсолютно правы: в реальных проектах мы почти всегда выводим в верстке превью (150×90, 300×200), а в модалке хотим показать полное изображение (3000×3000). И да, для этого нужен data-full или href на оригинал.

Внутри open() есть проверка: img.dataset.full || img.currentSrc || img.src. То есть библиотека уже поддерживает сценарий с превью, но, признаю, это неочевидно из документации — спасибо, что подсветили!

«Чем лучше Fancybox, если всё равно нужны data-атрибуты?» Справедливый вопрос. Честный ответ: если вам нужен только этот сценарий — возможно, ничем. 😊

Про размер файла: 11 КБ vs 22 КБ Тут вы поймали меня на неточности — спасибо! 11 КБ — это размер после gzip-сжатия (так показывают многие онлайн-анализаторы и GitHub)

Это моя ошибка в подаче: нужно указывать оба значения, чтобы не вводить в заблуждение. Исправлю в README и на странице демо.

#1 ZoomiJS 15 марта 2026 в 16:09

Всем привет. Есть у меня такая библиотека — ZoomiJS (https://github.com/pechoradev/ZoomiJS)

Использую её во многих своих проектах. Возникла мысль адаптировать её для использования в InstantCms. 

Кратко, что умеет библиотека:

— Находит на странице изображение с заданным в настройках селектором и позволяет увеличивать его в модальном окне

— Умеет формировать галереи по селектору или контейнеру, внутри которых находятся изображения

— Умеет обрабатывать исключения (Например открывать изображения в теле новости, но не открывать обложку новости)

Демо

Когда-то давно писал её для своих целей, но решил, что нужно пускать в свет. 

Касательно этого вопрос — нужно ли сделать адаптацию данной библиотеки для InstantCms (через компонент или виджет)

🍪Мы используем файлы cookie для работы сайта. Читать подробнее.