Вставить компонент Glimmer после первого сообщения

Боюсь, я, возможно, был немного излишне оптимистичен здесь, @pfaffman, извините! Мой PR привел бы к появлению нового обертки <div> между каждым сообщением, даже если outlet не используется. Это не то, что мы хотим делать.

Возможно, есть способы избежать создания обертки… но ничего простого, что мы могли бы сделать немедленно.

Поэтому я думаю, что лучшее немедленное решение для вас — скопировать реализацию плагина adplugin, на которую вы сослались в исходном посте.

По сути:

  1. Создайте компонент (Glimmer или классический, не имеет значения), который рендерит то, что вам нужно.

  2. Используйте registerWidgetShim, чтобы сделать этот компонент доступным как виджет. Пример с adplugin создает виджет с именем “after-post-ad”, который рендерит компонент PostBottomAd. Он передает все атрибуты виджета (@data) в аргумент @model компонента.

  3. Используйте api.decorateWidget, чтобы отрендерить ваш новый виджет-обертку в позиции post:after. В вашем случае, поскольку вам нужно это только для первого сообщения, вы можете сделать что-то вроде:

    api.decorateWidget("post:after", (helper) => {
      if(helper.widget.model.post_number === 1){
        return helper.attach("my-widget-shim");
      }
    });
    

Когда мы в конечном итоге переведем страницу темы на Glimmer, вам нужно будет удалить обертку-виджет/декорацию и заменить её на плагин-аутлет. Это должно быть довольно просто, так как вся логика отображения в вашем компоненте будет переиспользована в плагин-аутлете.

Дайте нам знать, как у вас получится! Мы рады помочь с любыми последующими вопросами — знаю, что здесь много движущихся частей.