Moduli di esempio

:discourse2: Riepilogo Moduli segnaposto ti permetteranno di creare documentazione dinamica, generando un modulo che sostituisce ogni occorrenza di un =PATTERN= nel tuo post con il valore di un campo di input testuale o selezionabile.
:eyeglasses: Anteprima Anteprima su Discourse Theme Creator
:hammer_and_wrench: Link al repository https://github.com/discourse/discourse-placeholder-theme-component
:open_book: Nuovo a Discourse Themes? Guida per principianti all’uso di Discourse Themes

Installa questo componente del tema

Funzionalità

Aggiungi segnaposti ai post in questo formato:

[wrap=placeholder key=NOME description="Il tuo nome"][/wrap]
[wrap=placeholder key=PAESE default=US defaults=FR,DE,US,CN,AU,CA][/wrap]

La tua email: =NOME=-=PAESE=@example.com

E il risultato sarà:

Questo viene utilizzato nelle liste di distribuzione:

La tua email: =NOMELONG=-=PAESILONG=@example.com

Come visto sopra, il testo all’interno del wrapper verrà utilizzato come descrizione estesa.

[wrap=placeholder key=NOME description="Il tuo nome"]
Questo viene utilizzato nelle liste di distribuzione
[/wrap]

Chiavi disponibili

  • key: La chiave che deve essere sostituita nel tuo post
  • default/defaults: valore/i predefinito/i
  • description: testo segnaposto per l’input

Esempi

# crea un nuovo plugin
rails g plugin =NOME_PLUGIN=
cd plugins/=NOME_PLUGIN=

Lo utilizziamo per creare runbook, guide e modelli riutilizzabili (funziona anche nei blocchi di codice). Condividi i tuoi casi d’uso!

Impostazioni

Traduzione Predefinito
toolbar.builder Aggiungi segnaposto
builder.errors.no_key È richiesta una chiave.
builder.title Aggiungi segnaposto
builder.insert Inserisci
builder.key.label Chiave
builder.key.description La =Chiave= da sostituire nel post.
builder.description.label Descrizione
builder.description.description Descrizione visualizzata nell’input senza valore impostato.
builder.values.label Valore/i predefinito/i
builder.values.description Valore/i opzionale/i per il tuo segnaposto; se sono definiti più valori, verrà utilizzato un menu a tendina.

:discourse2: Ospitato da noi? I componenti del tema sono disponibili per l’uso nei nostri piani Standard, Business ed Enterprise.

66 Mi Piace

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 Mi Piace

Ho provato con ! e sarebbe stata una bella cosa tipo “anteprima del compositore con Redux nel primo post”, ma… :pensive: Devo star trascurando qualcosa. Se ho capito bene, il componente Reply Template prende il testo grezzo e cerca i “replacers”, ma il componente Placeholder Forms elabora il testo già renderizzato?

Quello che sto cercando di fare è facilitare agli utenti l’aggiunta di alcune domande e risposte a quiz in un argomento, con il minimo attrito tecnico, clic o persino battiture di tastiera, :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"]

## Domanda
=question=
### Risposta
[spoiler]
=réponse=
[/spoiler]
---
*Etichetta(e)?*
[/wrap]

che produce

finora tutto bene, ma purtroppo i segnaposto =question= e =réponse= vengono mantenuti nel compositore quando si preme il pulsante del modello.

Sì, non sono sicuro di cosa stessi pensando quando ho scritto questo… Probabilmente avevo in mente un caso d’uso diverso, ma non riesco a ricordarlo.

Di sicuro non può funzionare in questo modo. Ci penserò un po’… Entrambi i componenti del tema erano esperimenti all’epoca e potrebbero meritare un trattamento migliore, dato che le persone li hanno utilizzati piuttosto frequentemente.

7 Mi Piace

Grazie!

happy lets go GIF by Shalita Grant

3 Mi Piace

:grin: Non so cosa stia succedendo nella cucina dello chef, ma mentre aspettavo, di solito mi rimpinzavo di pistacchi o roba simile, e sono riuscito a farlo funzionare (ovviamente per il mio caso specifico, dato che non ho idea di cosa stia facendo, ma ehi… :sweat_smile: )
https://github.com/bdecotte/discourse-reply-template-component/commit/68cd32a338a4fd5769a797b00050490d348435ca

4 Mi Piace

Idealmente, mi piacerebbe poter permettere agli amministratori di definire i propri sostitutori, ma eval è rischioso (e non è nemmeno possibile con una CSP sicura), quindi non sono sicuro di come potrei realizzare questo…

3 Mi Piace

Innanzitutto, un componente del tema davvero ottimo e utile.

Tuttavia, credo di aver individuato un bug. Se uso un segnaposto in un frammento di codice che contiene backtick (`), non funziona. Un esempio è un frammento di codice SQL:

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

TABLENAME non viene mai sostituito (se esiste un segnaposto TABLENAME).

Sarebbe bello se includesse anche delle condizioni simili a Jinja2. In modo che, ad esempio, qualcuno possa creare una chiave red e associarla all’icona :red_circle:, orange verrebbe associata a :orange_circle:. Ma posso farne a meno ovviamente, sarebbe stato bello avere queste condizioni di test.

Adoro questo componente. :star_struck:


"E vivi davvero del =NOUN_1=? Che vita =ADJECTIVE_1=! "

“Ne vivo e con esso e su esso e in esso,” disse =PERSON_1=. “È mio fratello e mia sorella, e zie, e =NOUN_2=, e cibo e bevande, e (=ADJECTIVE_2=) =VERBING_1=. È il mio =NOUN_3=, e non ne voglio altro. Ciò che non ha non vale la pena =VERBING_2=, e ciò che non sa non vale la pena =VERBING_3=. Signore! i =NOUNS_1= che abbiamo passato insieme! Sia in inverno che in estate, in primavera o in autunno, ha sempre il suo =NOUN_4= e i suoi =NOUNS_2=. Quando a febbraio ci sono i =NOUNS_3=, e la mia =NOUN_4= e la cantina sono piene di =NOUN_5= che non mi servono, e il =COLOR_1= =NOUN_6= scorre vicino alla mia migliore finestra =NOUN_7=; o ancora quando tutto si abbassa =ADVERB_1= e mostra chiazze di =NOUN_8= che profumano di =FOOD_1=, e i =NOUNS_5= e i =NOUNS_6= intasano i canali, e posso =VERB_1= circa =MOISTURE= =NOUN_9= su gran parte del =NOUN_10= e trovare fresco =FOOD_2= da mangiare, e cose =ADJECTIVE_3= che la gente ha lasciato cadere dai =NOUNS_7=!”


Originale tratto dalla versione Standard Ebooks di The Wind in the Willows, disponibile per lettura online (cerca By it and with it).

10 Mi Piace

Ciao :wave:

Grazie per questo componente :heart: Corrisponde perfettamente a ciò che sto cercando di ottenere ora. In realtà, il mio primo pensiero è stato che sarebbe fantastico se potesse essere combinato con il componente Reply Template. Ma sfortunatamente non è possibile, come spiegato nei post precedenti. :confused:


Ho trovato una soluzione per usarlo come modello, funziona con link a nuovi argomenti e link a nuovi messaggi personali.

Ecco come l’ho fatto:

  1. Crea un modulo segnaposto (per semplicità uso l’esempio nell’OP)

La tua email: =NAME=-=COUNTRY=@example.com


  1. Crea un link a un nuovo argomento:
    Ho impostato nel link:
  2. categoria
  3. titolo
  4. corpo

Se vuoi aggiungere righe vuote, usa \ in modo che non interrompa il link o per renderlo invisibile puoi usare   che aggiungerà uno spazio nella nuova riga. Sarà parte del modello e creerà una riga vuota,

<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">Usa il modello come nuovo argomento</a>

  1. Crea un’anteprima dell’argomento

Categoria selezionata

=CATEGORY=

Titolo dell’argomento

This is a topic created by =NAME=

Corpo dell’argomento

Hello :wave:

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

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


  1. Crea il pulsante “Usa il modello come nuovo argomento” (nell’esempio sopra questo è un link, puoi trasformarlo in un pulsante)

Crea un elemento [wrap] da questo testo. Questo lo rende disponibile per essere indirizzato con CSS e stilizzato. Lo aggiungo qui sotto.

<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]Usa il modello come nuovo argomento[/wrap]</a>

Styling [wrap=template-button]
qualcosa come :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);
  }
}

Il pulsante del modello apparirà così :arrow_down_small:

template-button


Demo

Usa il modello come nuovo argomento


Spero che questo piccolo tutorial aiuti qualcuno che ha bisogno di qualcosa di simile :slightly_smiling_face:

Modifica: Ho impostato un selettore di categorie che aggiunge la possibilità di creare argomenti in diverse categorie.


Controlla la versione raw di questo post…

9 Mi Piace

Fantastico Don, grazie. Questo soddisfa molto bene una delle mie esigenze :slight_smile:

2 Mi Piace

Qualcosa da notare è che i blocchi di codice a volte causano problemi:

usermod -aG sudo =USERNAME=

In questo caso, highlight.js presume che si tratti di Java e converte il blocco di codice in:

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

Riesco a risolvere segnalando che si tratta in realtà di un comando shell:

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

Ciò si traduce in:

usermod -aG sudo =USERNAME=

Se tutto il resto fallisce, text impedisce a highlight.js di interferire con i placeholder.

Una soluzione più generale (che Meta Discourse deve utilizzare) è cambiare l’impostazione default code lang da auto a plaintext o qualcosa di simile. :wink:


Non che importi molto, ma usare java è un modo per evitare che il placeholder si espanda quando si vuole scrivere sui placeholder.

1 Mi Piace

Puoi controllare il link di anteprima? Mi sembra che sia rotto.

1 Mi Piace

Questa è una funzionalità straordinaria e posso vederne molti usi.
Tuttavia, nella nostra risposta, è possibile nascondere =(nome)= finché l’utente non inizia a digitare nella casella di testo? Ritengo che gli utenti (specialmente quelli nuovi) potrebbero non capirne lo scopo, o che sembri una formattazione errata.

Penso di averne trovato uno funzionante (:crossed_fingers: :slight_smile:)

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

L’ho aggiunto anche a try.discourse.org così puoi giocarci più a fondo. :+1:

1 Mi Piace

Forse potresti inserire un valore predefinito che verrà visualizzato al suo posto.

1 Mi Piace

Ha funzionato! Grazie!

2 Mi Piace

Questo workaround non sembra più funzionare.

Ci sono altre opzioni per combinare reply-template e placeholder-forms?

4 messaggi sono stati divisi in un nuovo argomento: I link non funzionano nei moduli segnaposto