rshabalin, все верно.
Pechora.Dev 🐻
Все чаще и чаще эти темы уходят в небытие…)
Сомневаюсь, что это принесет пользу, так как ни яндекс, ни гугл этот файл в обозримом будущем использовать не будут. Хотя — как сама идея — возможно, кому-то будет полезно.
Алексей Т, Если страница собирается из 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).