Настройка страниц плагина подписки

Я приближаюсь к тому, чтобы превратить PfaffManager в полноценный продукт. Мой MVP заключается в том, чтобы заменить страницу https://www.literatecomputing.com/discourse-installation-packages/ в Discourse, чтобы пользователи могли покупать установку (как они это делают сейчас через WordPress). Это будет запускать процесс установки в Discourse (работает), где они также смогут получать обновления в реальном времени о ходе установки (работает), а затем нажимать кнопку для перезапуска сборки (работает) в течение определённого периода времени.

Я использовал add_model_callback(GroupUser, :after_save), чтобы отслеживать, что при добавлении пользователя в группу CreateServer создаётся сервер (в модели, которую добавляет мой плагин), а затем пользователь удаляется из этой группы (чтобы теоретически он мог купить ещё одну установку сервера). Мне кажется, что этот подход можно использовать для превращения discourse-subscriptions в достаточно универсальную платёжную систему.

Итак, сейчас у меня есть следующее:

Несколько вещей, которые я вижу прямо сейчас:

  • заголовок <h1> и кнопка используют один и тот же ключ discourse_subscriptions.subscribe.title — я бы хотел, чтобы в заголовке <h1> было написано что-то вроде «Купить установку или услугу», а на кнопке — «Оплатить сейчас».
  • если бы у <h1> был класс subscription-title, то я мог бы использовать CSS, чтобы скрыть существующий заголовок и заменить его псевдоэлементом ::before, что, возможно, решит проблему выше.
  • я хотел бы добавить навигацию на /pfaffmanager/servers где-нибудь на этой странице, в заголовке или подвале, но не вижу способа это сделать. Я пробовал добавить что-то вроде {{~raw-plugin-outlet name="subscription-header-before"~}} в шаблон s.hbs, но всё не так просто.

Думаю, было бы разумно пожелать немного больше специфичных для подписок классов в плагине подписок, но я всё ещё недостаточно хорошо разбираюсь в CSS, чтобы точно знать, прав ли я и как это должно выглядеть.

Ага! Вместо того чтобы надеяться на наличие плагиновых слотов в плагине подписок, может быть, мне стоит создать свой собственный шаблон, который всё ещё вызывает функции Stripe из плагина подписок? Имел бы это смысл?

Я готов принять PR с этими изменениями. Они довольно простые.

Вы должны иметь возможность добавить {{plugin-outlet}} в этот файл. Также готов принять PR, если есть веские основания для этого. Плагины-контейнеры достаточно легковесны. Однако «сырой» плагин-контейнер не сработает, так как это не сырой файл.

О! Значит, я могу! Я могу!!!

Чёрт!

Хорошо, значит, что-то вроде

       <div class="product-purchase">
          {{#if product.subscribed}}
            <span class="purchased">&#x2713; {{i18n 'discourse_subscriptions.subscribe.purchased'}}</span>
            {{#link-to "user.billing.subscriptions" currentUser.username class="billing-link"}}
              {{i18n 'discourse_subscriptions.subscribe.go_to_billing'}}
            {{/link-to}}
            {{plugin-outlet name="after-go-to-billing" args=(hash product=product)}}
          {{else}}
            {{#link-to "s.show" product.id disabled=product.subscribed class="btn btn-primary"}}
              {{i18n 'discourse_subscriptions.subscribe.title'}}
            {{/link-to}}
            {{plugin-outlet name="after-subscribe-title" args=(hash product=product)}}
          {{/if}}
        </div>

А затем я могу сделать что-то вроде

<script type="text/x-handlebars" data-template-name="/connectors/after-go-to-billing/foobar">
    <div class="pfaffmanager-product"> возможно, ссылка с использованием {{product.id}}</div>
</script>

Или даже скрыть и заменить практически все эти блоки с продуктами.

Возможно, я всё-таки начну понимать, как работают плагин-аутлеты.

Изменения в CSS

Итак, просто оберните весь шаблон s.hbs в <div class="subscription">, и тогда вы сможете делать такие вещи, как

.subscription 
  {
    h1 {
    content: "Hello, world";
    background-color: yellow;
  }
}

Кажется, это правильно? Если здесь нет ничего совсем глупого, то, думаю, я на пути к тому, чтобы сделать осмысленный PR.

Привет @justin, выглядит ли это довольно близко?

Я скоро ещё раз посмотрю на это и отправлю PR.

Да, я думаю, это выглядит довольно похоже. Спасибо, Джей!

Спасибо. Я надеюсь «завершить» эту текущую задачу, а затем посмотреть, как добавить эти или аналогичные плагины.

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