Platzhalter-Formulare

:discourse2: Summary Placeholder Forms will let you build dynamic documentation, by creating a form that replaces any occurrence of a =PATTERN= in your post with the value from a text or selectable input field.
:eyeglasses: Preview Preview on Discourse Theme Creator
:hammer_and_wrench: Repository Link https://github.com/discourse/discourse-placeholder-theme-component
:open_book: New to Discourse Themes? Beginner’s guide to using Discourse Themes

Install this theme component

Features

Add placeholders to posts in this format:

[wrap=placeholder key=NAME description="Your name"][/wrap]
[wrap=placeholder key=COUNTRY default=US defaults=FR,DE,US,CN,AU,CA][/wrap]

Your email: =NAME=-=COUNTRY=@example.com

And this will result in:

This is used in mailing list

Your email: =ZNAME=-=ZCOUNTRY=@example.com

As seen above, text inside the wrapper will be used as a long description.

[wrap=placeholder key=NAME description="Your name"]
This is used in mailing list
[/wrap]

Available keys

  • key: The key that should be replaced in your post
  • default/defaults: default value(s)
  • description: a placeholder text for the input

Examples

# create a new plugin
rails g plugin =PLUGIN_NAME=
cd plugins/=PLUGIN_NAME=

We use it to create runbooks, howtos and reusable templates (it will work in code blocks). Please share your use cases!

Settings

Translation Default
toolbar.builder Add Placeholder
builder.errors.no_key A key is required.
builder.title Add Placeholder
builder.insert Insert
builder.key.label Key
builder.key.description The =Key= to be replaced in the post.
builder.description.label Description
builder.description.description Description displayed on input with no value set.
builder.values.label Default value(s)
builder.values.description Optional value(s) for your placeholder, if multiple values are defined, a select will be used.

:discourse2: Hosted by us? Theme components are available to use on our Standard, Business, and Enterprise plans.

Last edited by @JammyDodger 2024-06-13T22:28:45Z

Check documentPerform check on document:
65 „Gefällt mir“

The big issue with math handling like this, is that you need to eval() and eval is unsafe, so you need to use some lib which provide a safe eval with a limited subset of the real eval. I’m unsure we want all this complexity for such a rare case.

6 „Gefällt mir“

I tried ! and that would be a neat composer-preview-redux-in-OP kind of thing but… :pensive: I must be missing something, if I understand correctly the Reply Template component takes the raw and looks for “replacers”, but the Placeholder Forms component decorates the cooked?

What I’m trying to do is ease my users into adding some quizz Q&As in a topic, with minimal technical friction, clicks or even key strokes, :heavy-sigh: :roll_eyes:

[wrap=placeholder key="question" description="question"][/wrap]
[wrap=placeholder key="réponse" description="réponse"][/wrap]

[wrap=template key="template-spoiler" action="reply" tagsList="#qui, #quand, #où, #comment"]

## Question
=question=
### Réponse
[spoiler]
=réponse=
[/spoiler]
---
*Étiquette(s) ?*
[/wrap]

which gives

so far so good, but unfortunately, the placeholders =question= and =réponse= are kept in the composer when hitting the template button

Yes I’m not sure what I was thinking when I wrote this… I probably had a different use case in mind, but can’t remember.

It can’t work this way for sure. I will think a little bit about this… Both theme components were experiments at the time and might deserve better treatment as people have been using it quite frequently.

7 „Gefällt mir“

Thank you !

happy lets go GIF by Shalita Grant

3 „Gefällt mir“

:grin: I don’t know what’s cookin’ in the chef kitchen, but as I usually stuff myself with pistachios or whatnot while waiting, I managed to make it work (for my specific use of course as I’ve almost no idea of what I’m doing, but hey… :sweat_smile: )

4 „Gefällt mir“

Ideally I would like to be able to let admin define their own replacers, but eval is risky (and not even possible with a secure csp) so I’m not sure how I could achieve this…

3 „Gefällt mir“

First of all - great and really helpful theme component.

But I think I found a bug. If I use a placeholder in a code snippet, that contains backticks (`), it is not working. An example is a SQL code snippet:

DELETE FROM `=TABLENAME=`
WHERE id NOT IN(
        SELECT
            id FROM (
                SELECT
                    id FROM `=TABLENAME=`
                ORDER BY
                    id DESC
                LIMIT 20
) subquery);

TABLENAME gets never replaced (if there is a TABLENAME placeholder).

Es wäre cool, wenn dies auch Jinja2-ähnliche Bedingungen beinhalten würde. So dass z.B. jemand einen Schlüssel red erstellen und diesen auf das Icon :red_circle: abbilden könnte, orange würde auf :orange_circle: abgebildet werden. Aber ich kann natürlich auch ohne leben, aber es wäre cool gewesen, diese Testbedingungen zu haben.

Ich liebe diese Komponente wirklich. :star_struck:


„Und du lebst wirklich von dem =NOUN_1=? Was für ein =ADJECTIVE_1= Leben!“

„Davon und damit und darauf und darin“, sagte =PERSON_1=. „Es ist mein Bruder und meine Schwester, und Tanten, und =NOUN_2=, und Essen und Trinken, und (=ADJECTIVE_2=) =VERBING_1=. Es ist mein =NOUN_3=, und ich will kein anderes. Was es nicht hat, ist nicht wert, =VERBING_2= zu werden, und was es nicht weiß, ist nicht wert, =VERBING_3= zu werden. Herr! die =NOUNS_1= die wir zusammen hatten! Ob im Winter oder Sommer, Frühling oder Herbst, es hat immer seinen =NOUN_4= und seine =NOUNS_2=. Wenn im Februar die =NOUNS_3= sind und mein =NOUN_4= und Keller voller =NOUN_5= sind, die mir nichts nützen, und der =COLOR_1= =NOUN_6= an meinem besten =NOUN_7= Fenster vorbeiläuft; oder wieder, wenn alles =ADVERB_1= fällt und Stellen von =NOUN_8= zeigt, die nach =FOOD_1= riechen, und die =NOUNS_5= und =NOUNS_6= die Kanäle verstopfen, und ich kann über =MOISTURE= =NOUN_9= über den größten Teil des =NOUN_10= davon =VERB_1= und frisches =FOOD_2= zum Essen finden, und Dinge, die =ADJECTIVE_3= Leute aus =NOUNS_7= fallen gelassen haben!“


Original entnommen aus der Standard Ebooks Version von The Wind in the Willows, online lesbar (suchen Sie nach By it and with it).

10 „Gefällt mir“

Hallo :wave:

Vielen Dank für diese Komponente :heart: Sie passt perfekt zu dem, was ich gerade erreichen möchte. Tatsächlich war mein erster Gedanke, dass es super wäre, wenn sie mit der Reply Template Komponente kombiniert werden könnte. Aber leider ist das nicht möglich, wie die obigen Beiträge erklärt haben. :confused:


Ich habe einen Workaround gefunden, um sie als Vorlage zu verwenden. Sie funktioniert mit Link zu neuen Themen und Link zu neuen persönlichen Nachrichten.

So habe ich es gemacht:

  1. Erstellen Sie ein Platzhalterformular (um es einfach zu halten, verwende ich das Beispiel im OP)

Ihre E-Mail: =NAME=-=COUNTRY=@example.com


  1. Erstellen Sie einen Link zu einem neuen Thema:
    Ich habe im Link Folgendes eingestellt:
  2. Kategorie
  3. Titel
  4. Text

Wenn Sie Leerzeilen hinzufügen möchten, verwenden Sie \\, damit der Link nicht unterbrochen wird, oder um ihn unsichtbar zu machen, können Sie \u0026nbsp; verwenden, was ein Leerzeichen in der neuen Zeile hinzufügt. Es wird Teil der Vorlage sein und eine Leerzeile erzeugen,

<a href="https://meta.discourse.org/new-topic?category==CATEGORY=&title=This is a topic created by =NAME=&body=Hello :wave:
&nbsp;
This is a test topic... Let's see the placeholder form.
\
Your email: =NAME=-=COUNTRY=@example.com">Use template as new topic</a>

  1. Erstellen Sie eine Themenvorschau

Ausgewählte Kategorie

=CATEGORY=

Thema Titel

This is a topic created by =NAME=

Thema Text

Hello :wave:

This is a test topic… Let’s see the placeholder form.

Your email: =NAME=-=COUNTRY=@example.com


  1. Erstellen Sie einen “Use template as new topic” Button (im obigen Beispiel ist dies ein Link, Sie können daraus einen Button machen)

Machen Sie ein [wrap] Element aus diesem Text. Dies macht es möglich, es mit CSS anzusprechen und zu gestalten. Ich füge dies unten hinzu.

<a href="https://meta.discourse.org/new-topic?category==CATEGORY=&title=This is a topic created by =NAME=&body=Hello :wave:
&nbsp;
This is a test topic... Let's see the placeholder form.
\
Your email: =NAME=-=COUNTRY=@example.com">[wrap=template-button]Use template as new topic[/wrap]</a>

Styling [wrap=template-button]
etwas wie :arrow_down_small:

Common / CSS

[data-wrap="template-button"] {
  background: var(--tertiary);
  color: var(--secondary);
  border-radius: var(--d-button-border-radius);
  padding: 0.5em 0.65em;
  transition: background 0.25s;
  &:focus,
  &:hover {
    background: var(--tertiary-hover);
    color: var(--secondary);
  }
}

Der Vorlagen-Button wird so aussehen :arrow_down_small:

template-button


Demo

Use template as new topic


Ich hoffe, dieses kleine Tutorial hilft jemandem, der etwas Ähnliches braucht :slightly_smiling_face:

Bearbeitung: Ich habe eine Kategorieauswahl eingerichtet, die die Möglichkeit bietet, Themen in verschiedenen Kategorien zu erstellen.


Prüfen Sie die Rohversion dieses Beitrags…

8 „Gefällt mir“

Das ist erstaunlich, Don, danke. Das passt tatsächlich sehr gut zu einem meiner Bedürfnisse :slight_smile:

2 „Gefällt mir“

Etwas zu beachten ist, dass Codeblöcke manchmal Probleme verursachen:

usermod -aG sudo =USERNAME=

In diesem Fall geht highlight.js davon aus, dass es sich um Java handelt und konvertiert den Codeblock zu:

<code>
  usermod -
  <span class="hljs-type">aG</span> 
  <span class="hljs-variable">sudo</span> 
  <span class="hljs-operator">=</span>
  USERNAME=
</code>

Ich kann es beheben, indem ich signalisiere, dass es sich tatsächlich um einen Shell-Befehl handelt:

    ```shell
    usermod -aG sudo =USERNAME=
    ```

Das führt zu:

usermod -aG sudo =USERNAME=

Wenn alles andere fehlschlägt, verhindert text, dass highlight.js mit den Platzhaltern herumspielt.

Eine allgemeinere Lösung (die Meta Discourse verwenden muss) besteht darin, die Einstellung default code lang von auto auf plaintext oder etwas Ähnliches zu ändern. :wink:


Nicht, dass es viel ausmacht, aber die Verwendung von java ist eine Möglichkeit, zu vermeiden, dass der Platzhalter erweitert wird, wenn Sie über Platzhalter schreiben möchten.

1 „Gefällt mir“

Kannst du den Vorschau-Link überprüfen? Er scheint bei mir defekt zu sein.

1 „Gefällt mir“

Dies ist eine erstaunliche Funktion, und ich sehe viele Anwendungsmöglichkeiten dafür.
Ist es jedoch in unserer Antwort möglich, =(name)= auszublenden, bis der Benutzer mit der Eingabe in das Textfeld beginnt? Ich glaube, dass Benutzer (insbesondere neue) ihren Zweck möglicherweise nicht verstehen oder dass es wie eine falsche Formatierung aussieht.

Ich glaube, ich habe wieder einen zum Laufen gebracht (:crossed_fingers: :slight_smile:)

https://discourse.theme-creator.io/theme/Discourse/placeholder-forms

Ich habe ihn auch zu try.discourse.org hinzugefügt, damit Sie ihn ausgiebiger ausprobieren können. :+1:

1 „Gefällt mir“

Vielleicht könnten Sie einen Standardwert eingeben, der stattdessen angezeigt wird.

1 „Gefällt mir“

Das hat funktioniert! Danke!

2 „Gefällt mir“

Diese Problemumgehung scheint nicht mehr zu funktionieren.

Gibt es andere Optionen, um reply-template und placeholder-forms zu kombinieren?

4 Beiträge wurden in ein neues Thema aufgeteilt: Links funktionieren nicht in Platzhalterformularen