Алексей Т, Если страница собирается из 20 блоков и каждый лазает в БД — будет больно. Сделай умный кэш на уровне HTML-фрагментов и страницы целиком.
Успехов, норм тема выглядит.
Алексей Т, Если страница собирается из 20 блоков и каждый лазает в БД — будет больно. Сделай умный кэш на уровне HTML-фрагментов и страницы целиком.
Успехов, норм тема выглядит.
Алексей Т, вы бы хоть текст от ИИ поправили. Стабильный 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-приложения, где один и тот же код работает и на сервере, и на клиенте.
Если ты напишешь так в описании, любой техдир или разработчик с опытом сразу поймет, что ты либо копипастишь из ИИ, либо не понимаешь, о чем говоришь.
Jestik, мельком глянул код, особо не вникал — но сразу в первом поле увидел это:
$html_template = <<<'HTML'
var userOpts = `{USER_OPTIONS}`;
Первое — так вообще не нужно делать, такое писали еще для php 4.0 =)
Ну а во втором — у вас уязвимость. Если в ник например попадет кавычка, то можно без проблем через ваш JS выполнить что-нибудь вредоносное. Если вы не против, как будет свободное время форкну и пришлю PR.
После долго изучения проблемы (потому что это реально подбешивало) вот что я накопал. Лишний символ | появился в YAML-формате — если несколько раз пересохранить виджет «Социальные кнопки» — то на терий четвертый раз он обязательно проявится. По сути — это не ошибка вставки, это ошибка сериализации массива в YAML. Где-то в коде при сохранении массива options в YAML происходит двойное экранирование или неправильное формирование строки.
Ну тут уже стало понятно что это системный класс Model. Смотрим что в нем:
public static function arrayToYaml($input_array, $indent = 2, $word_wrap = 40) { // ... return Spyc::YAMLDump($array, $indent, $word_wrap); }
Как мне кажется — проблема в библиотеке Spyc. При сохранении массив options преобразуется в YAML через Spyc::YAMLDump().
Соответственно (если я конечно прав) — библиотеку надо либо фиксить, либо менять на что то другое. Если мои наблюдения неверны — пните в нужном направлении.
Ну и вот соответственно виновник в самой библиотеке
private function _doLiteralBlock($value, $indent) { if ($value === "\n") { return '\n'; } } } $newValue = '|'; $indent += $this->_dumpIndent; foreach ($exploded as $line) { $newValue .= "\n" . $spaces . ($line); } return $newValue; }
Фиксим:
private function _doLiteralBlock($value, $indent) { if ($value === "\n") { return '\n'; } } } } } } } $newValue = '|'; $indent += $this->_dumpIndent; foreach ($exploded as $line) { } return $newValue; }
Проверяем работу виджета по тому же сценарию — сохраняем три четыре раза — все гуд. работает. Отправлю Pull requests на гит — надеюсь внесут в релиз.
Понятно. Aka vc.ru / dtf.ru
Что за шаблон? Где посмотреть?
Если компонент будет показывать в карточке пользователя, с какой кампании он пришел — это спасение для менеджеров и маркетологов. Не нужно лезть в базу данных или SQL-запросы писать, чтобы понять, что Петров пришел с контекстной рекламы в Яндекс Директе. Так что да, однозначно хорошая идея и направление
Сомневаюсь, что InstantCms умеет обрабатывать файлы этого формата
maxisoft, я так и понял, потому что половина из написанного — вообще не так. Да, кое-какие проблемы агент верно нашел, но спорить с ним я не буду, потому что половина написанного — я и слов то таких не знаю 😄
И да. Статический анализ без запуска кода и тестов иногда даёт «ложные срабатывания» (как с disabled или translateX).
pupsik, maxisoft, у инструментов разные ниши:
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 и на странице демо.
Всем привет. Есть у меня такая библиотека — ZoomiJS (https://github.com/pechoradev/ZoomiJS)
Использую её во многих своих проектах. Возникла мысль адаптировать её для использования в InstantCms.
Кратко, что умеет библиотека:
— Находит на странице изображение с заданным в настройках селектором и позволяет увеличивать его в модальном окне
— Умеет формировать галереи по селектору или контейнеру, внутри которых находятся изображения
— Умеет обрабатывать исключения (Например открывать изображения в теле новости, но не открывать обложку новости)
Когда-то давно писал её для своих целей, но решил, что нужно пускать в свет.
Касательно этого вопрос — нужно ли сделать адаптацию данной библиотеки для InstantCms (через компонент или виджет)