نماذج الحقول النائبة

:discourse2: ملخص ستمنحك “نماذج العناصر النائبة” القدرة على بناء توثيق ديناميكي، من خلال إنشاء نموذج يستبدل أي ظهور لـ =PATTERN= في منشورك بالقيمة من حقل إدخال نصي أو قابل للاختيار.
:eyeglasses: معاينة معاينة في منشئ سمة Discourse
:hammer_and_wrench: رابط المستودع https://github.com/discourse/discourse-placeholder-theme-component
:open_book: جديد في سمات Discourse؟ دليل المبتدئين لاستخدام سمات Discourse

تثبيت مكون السمة هذا

الميزات

أضف عناصر نائبة إلى المنشورات بهذا التنسيق:

[wrap=placeholder key=NAME description="اسمك"][/wrap]
[wrap=placeholder key=COUNTRY default=US defaults=FR,DE,US,CN,AU,CA][/wrap]

بريدك الإلكتروني: =NAME=-=COUNTRY=@example.com

وسيعطي ذلك النتيجة التالية:

يُستخدم هذا في قائمة البريد الإلكتروني

بريدك الإلكتروني: =ZNAME=-=ZCOUNTRY=@example.com

كما هو موضح أعلاه، سيتم استخدام النص داخل الغلاف كتوصيف طويل.

[wrap=placeholder key=NAME description="اسمك"]
يُستخدم هذا في قائمة البريد الإلكتروني
[/wrap]

المفاتيح المتاحة

  • key: المفتاح الذي يجب استبداله في منشورك
  • default/defaults: القيمة الافتراضية (القيم الافتراضية)
  • description: نص عنصر نائب لحقل الإدخال

أمثلة

# إنشاء إضافة جديدة
rails g plugin =PLUGIN_NAME=
cd plugins/=PLUGIN_NAME=

نستخدمه لإنشاء أدلة التشغيل، وكيفية الاستخدام، والقوالب القابلة لإعادة الاستخدام (سيعمل داخل كتل الأكواد). يرجى مشاركة حالات الاستخدام الخاصة بك!

الإعدادات

الترجمة الافتراضي
toolbar.builder إضافة عنصر نائب
builder.errors.no_key مطلوب مفتاح.
builder.title إضافة عنصر نائب
builder.insert إدراج
builder.key.label المفتاح
builder.key.description الـ =مفتاح= المراد استبداله في المنشور.
builder.description.label الوصف
builder.description.description الوصف المعروض على حقل الإدخال بدون قيمة محددة.
builder.values.label القيمة الافتراضية (القيم الافتراضية)
builder.values.description قيمة (قيم) اختيارية لعنصرك النائم، إذا تم تحديد قيم متعددة، سيتم استخدام قائمة منسدلة.

:discourse2: مستضافون لدينا؟ تتوفر مكونات السمات للاستخدام في خططنا القياسية، والأعمال، والمؤسسات.

66 إعجابًا

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 إعجابات

لقد جربت ذلك، وقد يكون الأمر ممتعًا من نوع معاينة المؤلف مع Redux في المنشور الأصلي، لكن… :pensive: يبدو أنني أفتقد شيئًا ما. إذا فهمت بشكل صحيح، فإن مكون قالب الرد يأخذ النص الخام ويبحث عن “المستبدلات”, بينما يقوم مكون نماذج النصوص البديلة بتنسيق النص المطبوخ؟

ما أحاول فعله هو تسهيل الأمر على مستخدمِي لإضافة بعض الأسئلة والأجوبة في موضوع ما، مع تقليل الاحتكاك التقني والنقرات وحتى ضربات المفاتيح إلى الحد الأدنى، :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]

وهذا يعطي

حتى الآن كل شيء على ما يرام، لكن للأسف، تُحفظ النصوص البديلة =question= و=réponse= في المؤلف عند الضغط على زر القالب.

نعم، لست متأكدًا مما كنت أفكر فيه عندما كتبت هذا… ربما كان لدي حالة استخدام مختلفة في ذهني، لكنني لا أستطيع تذكرها.

من المؤكد أن هذا لن يعمل بهذه الطريقة. سأفكر قليلاً في هذا… كلا مكوني السمة كانا تجربتين في ذلك الوقت وقد يستحقان معاملة أفضل حيث أن الناس يستخدمهما بشكل متكرر.

7 إعجابات

شكرًا لك!

happy lets go GIF by Shalita Grant

3 إعجابات

:grin: لا أعرف ما الذي يُطهى في مطبخ الشيف، لكن كما هو معتاد، بينما كنت أتناول الفستق أو ما شابه أثناء الانتظار، تمكنت من جعل الأمر يعمل (لطالبي المحدد بالطبع، إذ أن لديّ فكرة ضئيلة جدًا عما أفعله، لكن هيهات… :sweat_smile: )

4 إعجابات

في الظروف المثالية، أود أن أتمكن من السماح للمسؤول بتعريف استبدالاته الخاصة، لكن استخدام دالة eval يحمل مخاطر (كما أنه غير ممكن حتى مع وجود سياسة أمان محتوى CSP آمنة)، لذا فإنني غير متأكد من كيفية تحقيق ذلك…

3 إعجابات

أولاً - مكون قالب رائع ومفيد حقًا.

لكنني أعتقد أنني عثرت على خطأ. إذا استخدمت نصًا بديلًا في مقتطف كود يحتوي على علامات تنصيص عكسية (`)، فلن يعمل الأمر. مثال على ذلك مقتطف كود بلغة SQL:

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

لا يتم استبدال TABLENAME أبدًا (في حال وجود نص بديل لـ TABLENAME).

سيكون من الرائع لو تضمن هذا أيضًا بعض الشروط الشبيهة بـ Jinja2. بحيث يمكن لشخص ما على سبيل المثال إنشاء مفتاح red وربطه بالرمز :red_circle:، و orange سيتم ربطه بـ :orange_circle:. لكن يمكنني الاستغناء عن ذلك بالطبع، ولكنه كان سيكون رائعًا لو توفرت هذه الشروط التجريبية.

أنا أحب هذا المكون حقًا. :star_struck:


“وأنت تعيش حقًا من أجل =NOUN_1=؟ يا له من حياة =ADJECTIVE_1=!”

“أعيش بها ومعها وعليها وفيها،” قال =PERSON_1=. “إنها أخي وأختي، وعماتي، و =NOUN_2=، وطعام وشراب، و (=ADJECTIVE_2=) =VERBING_1=. إنها =NOUN_3= الخاصة بي، ولا أريد غيرها. ما ليس لديها ليس جديرًا بـ =VERBING_2=، وما لا تعرفه ليس جديرًا بـ =VERBING_3=. يا رب! لقد عشنا =NOUNS_1= معًا! سواء في الشتاء أو الصيف، الربيع أو الخريف، لديها دائمًا =NOUN_4= و =NOUNS_2=. عندما تكون =NOUNS_3= في فبراير، و =NOUN_4= وقبو مليئان بـ =NOUN_5= التي لا تنفعني، و =COLOR_1= =NOUN_6= تجري بجوار أفضل نافذة =NOUN_7= لي؛ أو مرة أخرى عندما يسقط كل شيء =ADVERB_1= ويكشف عن بقع من =NOUN_8= تفوح منها رائحة مثل =FOOD_1=، و =NOUNS_5= و =NOUNS_6= تسد القنوات، ويمكنني أن =VERB_1= حول =MOISTURE= =NOUN_9= فوق معظم =NOUN_10= منها وأجد =FOOD_2= جديدة للأكل، وأشياء =ADJECTIVE_3= أسقطها الناس من =NOUNS_7=!”


الأصل مأخوذ من إصدار الكتب القياسية من الرياح في الصفصاف، متاح لـ قراءته عبر الإنترنت (ابحث عن By it and with it).

10 إعجابات

مرحباً :wave:

شكراً على هذا المكون :heart: إنه يناسب تمامًا ما أحاول تحقيقه الآن. في الواقع، كانت فكرتي الأولى هي أنه سيكون رائعًا إذا كان يمكن دمجه مع مكون Reply Template. ولكن للأسف، هذا غير ممكن كما أوضحت المشاركات أعلاه. :confused:


لقد وجدت حلاً بديلاً لاستخدامه كقالب، ويعمل مع link to new topics و link to new personal messages.

إليك كيف فعلتها:

  1. إنشاء نموذج عنصر نائب (للبساطة، أستخدم المثال في المشاركة الأصلية)

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


  1. إنشاء رابط لموضوع جديد:
    لقد قمت بإعداد الرابط:
  2. category
  3. title
  4. body

إذا كنت ترغب في إضافة أسطر فارغة، استخدم \ حتى لا يتم كسر الرابط أو لجعله غير مرئي يمكنك استخدام   الذي سيضيف مسافة في السطر الجديد. سيكون جزءًا من القالب ويجعل سطرًا فارغًا،

<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. إنشاء معاينة للموضوع

Selected category

=CATEGORY=

Topic title

This is a topic created by =NAME=

Topic body

Hello :wave:

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

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


  1. إنشاء زر “Use template as new topic” (في المثال أعلاه، هذا رابط يمكنك جعله زرًا من هذا)

قم بإنشاء عنصر [wrap] من هذا النص. هذا يجعله متاحًا لاستهدافه باستخدام CSS وتنسيقه. أضيف هذا أدناه.

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

تنسيق [wrap=template-button]
شيء مثل :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);
  }
}

سيبدو زر القالب هكذا :arrow_down_small:

template-button


Demo

Use template as new topic


آمل أن يساعد هذا الدليل الصغير شخصًا يحتاج إلى شيء مشابه :slightly_smiling_face:

تعديل: لقد قمت بإعداد منتقي فئات يضيف القدرة على إنشاء موضوع في فئات مختلفة.


Check the raw version of this post…

9 إعجابات

هذا مذهل يا دون، شكراً لك. هذا يناسب بالفعل أحد احتياجاتي بشكل جيد :slight_smile:

إعجابَين (2)

شيء يجب ملاحظته هو أن كتل التعليمات البرمجية تسبب مشاكل أحيانًا:

usermod -aG sudo =USERNAME=

في هذه الحالة، يفترض highlight.js أن هذا هو Java ويحول كتلة التعليمات البرمجية إلى:


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

يمكنني إصلاحه عن طريق الإشارة إلى أن هذا في الواقع أمر shell:

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

وهذا يؤدي إلى:

usermod -aG sudo =USERNAME=

إذا فشل كل شيء آخر، فإن text يمنع highlight.js من العبث بالعناصر النائبة.

حل أكثر عمومية (يستخدمه Meta Discourse على الأرجح) هو تغيير إعداد لغة التعليمات البرمجية الافتراضية من تلقائي إلى نص عادي أو شيء من هذا القبيل. :wink:


ليس الأمر مهمًا كثيرًا، ولكن استخدام java هو طريقة لتجنب توسيع العنصر النائب عندما تريد الكتابة عن العناصر النائبة.

إعجاب واحد (1)

هل يمكنك التحقق من رابط المعاينة؟ يبدو أنه معطل بالنسبة لي.

إعجاب واحد (1)

هذه ميزة مذهلة، ويمكنني رؤية العديد من الاستخدامات لها.
ومع ذلك، في ردنا، هل من الممكن إخفاء =(name)= حتى يبدأ المستخدم في الكتابة في مربع النص؟ أعتقد أن المستخدمين (خاصة الجدد) قد لا يفهمون الغرض منه، أو قد يبدو أنه تنسيق غير صحيح.

أعتقد أنني حصلت على واحد يعمل مرة أخرى (:crossed_fingers: :slight_smile:)

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

لقد أضفته أيضًا إلى try.discourse.org حتى تتمكن من اللعب به بشكل عملي. :+1:

إعجاب واحد (1)

ربما يمكنك إدخال قيمة افتراضية ستظهر بدلاً من ذلك.

إعجاب واحد (1)

لقد نجح الأمر! شكراً لك!

إعجابَين (2)

يبدو أن هذا الحل البديل لم يعد يعمل.

هل هناك خيارات أخرى للجمع بين reply-template و #placeholder-forms؟

تم تقسيم 4 مشاركات إلى موضوع جديد: الروابط لا تعمل في نماذج العناصر النائبة