テーマ設定用のオブジェクトタイプ

新しい type: objectsテーマ設定でサポートされているタイプ に導入します。これは、まもなく非推奨となる予定の既存の json_schema タイプを置き換えるために使用できます。

objects タイプのテーマ設定の定義

objects タイプのテーマ設定を作成するには、まず、設定の名前として使用される、他のテーマ設定と同様にトップレベルのキーを定義します。

links: ...

次に、typedefaultschema キーワードを設定に追加します。

links:
  type: objects
  default: []
  schema: ...

type: objects は、これが objects タイプのであることが示され、default: [] 注釈は、設定のデフォルト値を空の配列に設定します。デフォルト値はオブジェクトの配列に設定することもできます。これは、schema が定義され次第デモンストレーションします。

スキーマを定義するには、まずスキーマの名前を次のように定義します。

links:
  type: objects
  default: []
  schema:
    name: link

次に、properties キーワードをスキーマに追加します。これにより、各オブジェクトがどのように見えるかを定義および検証できるようになります。

links:
  type: objects
  default: []
  schema:
    name: link
    properties:
      name: ...

上記の例では、link オブジェクトに name プロパティがあることを示しています。期待されるデータのタイプを定義するには、各プロパティで type キーワードを定義する必要があります。

links:
  type: objects
  default: []
  schema:
    name: link
    properties:
      name:
        type: string

上記のスキーマ定義は、link オブジェクトに string タイプの name プロパティがあることを示しており、プロパティには文字列値のみが受け入れられることを意味します。現在、次のタイプがサポートされています。

  • string: プロパティの値は文字列として格納されます。
  • integer: プロパティの値は整数として格納されます。
  • float: プロパティの値は浮動小数点数として格納されます。
  • boolean: プロパティの値は true または false です。
  • enum: プロパティの値は choices キーワードで定義された値のいずれかである必要があります。
    links:
      type: objects
      default: []
      schema:
        name: link
        properties:
          name:
            type: enum
            choices:
              - name 1
              - name 2
              - name 3
    
  • categories: プロパティの値は、有効なカテゴリ ID の配列です。
  • groups: プロパティの値は、有効なグループ ID の配列です。
  • tags: プロパティの値は、有効なタグ名の配列です。

スキーマが定義されたら、設定のデフォルト値を次のように配列を定義して設定できます。

links:
  type: objects
  default:
    - name: link 1
      title: link 1 title
    - name: link 2
      title: link 2 title
  schema:
    name: link
    properties:
      name:
        type: string
      title:
        type: string

必須プロパティ

定義されているすべてのプロパティは、デフォルトでオプションです。プロパティを必須としてマークするには、プロパティに required: true を注釈付けするだけです。プロパティに required: false を注釈付けすることで、オプションとしてマークすることもできます。

links:
  type: objects
  default: []
  schema:
    name: link
    properties:
      name:
        type: string
        required: true
      title:
        type: string
        required: false

カスタム検証

特定のプロパティタイプには、validations キーワードをプロパティに注釈付けすることで宣言できるカスタム検証の組み込みサポートがあります。

links:
  type: objects
  default: []
  schema:
    name: link
    properties:
      name:
        type: string
        required: true
        validations:
          min: 1
          max: 2048
          url: true

string タイプ用の検証

  • min_length: プロパティの最小長。キーワードの値は整数である必要があります。
  • max_length: プロパティの最大長。キーワードの値は整数である必要があります。
  • url: プロパティが有効な URL であることを検証します。キーワードの値は true/false にできます。

integer および float タイプ用の検証

  • min: プロパティの最小値。キーワードの値は整数である必要があります。
  • max: プロパティの最大値。キーワードの値は整数である必要があります。

tagsgroups、および categories タイプ用の検証

  • min: プロパティの最小レコード数。キーワードの値は整数である必要があります。
  • max: プロパティの最大レコード数。キーワードの値は整数である必要があります。

ネストされたオブジェクト構造

オブジェクトには、オブジェクトの配列を含むプロパティを含めることもできます。ネストされたオブジェクト構造を作成するには、プロパティに type: objects と関連する schema 定義を注釈付けすることもできます。

sections:
  type: objects
  default:
    - name: section 1
      links:
        - name: link 1
          url: /some/url
        - name: link 2
          url: /some/other/url
  schema:
    name: section
    properties:
      name:
        type: string
        required: true
      links:
        type: objects
        schema:
          name: link
          properties:
            name:
              type: string
            url:
              type: string

設定の説明とローカライズ

en ロケールで設定の説明を追加するには、次のオブジェクトタイプテーマ設定の形式で locales/en.yml ファイルを作成します。

sections:
  type: objects
  default:
    - name: section 1
      links:
        - name: link 1
          url: /some/url
        - name: link 2
          url: /some/other/url
  schema:
    name: section
    properties:
      name:
        type: string
        required: true
      links:
        type: objects
        schema:
          name: link
          properties:
            name:
              type: string
            url:
              type: string
en:
  theme_metadata:
    settings:
      sections:
        description: This is a description for the sections theme setting
        schema:
          properties:
            name:
              label: Name
              description: The description for the property
            links:
              name:
                label: Name
                description: The description for the property
              url:
                label: URL
                description: The description for the property

This document is version controlled - suggest changes on github.

「いいね!」 15

jsonスキーマ形式の廃止が良い考えであるとは、まだ納得できません。

これらは非常に複雑になり、最も「開発者に優しい」形式ではない(そのため、この点では素晴らしい変更です)一方で、jsonスキーマを検証するためのオンラインツールがあり、スキーマとデフォルトデータの両方を検証するのに非常に役立ちます。

例:https://www.jsonschemavalidator.net/

この新しい世界では、それはどのように機能するのでしょうか?

「いいね!」 2

テーマをアップロードする際に、デフォルトデータを定義されたスキーマに対して検証します。とはいえ、現時点ではスキーマ定義自体が有効であるかの検証は行っていませんが、それを行うことは難しくありません。現在のJSONスキーマ設定についても、デフォルトデータを定義されたスキーマに対して検証しているわけではないと思います。

現在のJSONスキーマ型設定の実装は、管理インターフェースのエディタなど、多くの点で不完全です。内部で議論した結果、JSONスキーマが持つすべての可能性を許可するよりも、私たち自身が定義した限定的なスキーマ形式を維持する方が、はるかに管理しやすいという結論に至りました。

「いいね!」 2

クールな機能がいくつかあります。

  • JSON.parse を削除して、設定に直接アクセスしてオブジェクトを取得できるのは非常に便利です。

  • URLバリデーター!

:chefs_kiss: :chefs_kiss:

「いいね!」 5

エディタで複数行を尊重する方法はありますか?

このデフォルト機能します

- name: markdown
  value: >
    ## Heading
      * first bullet
      * second bullet

しかし、これを編集すると、キャリッジリターンが失われます。

さらに、「text」タイプがあれば、より長文のデータを格納でき、おそらくより大きな「textarea」エディタを公開できると良いでしょう。

「いいね!」 5

フィードバックをいくつかご紹介します。

「いいね!」 2

これに気づき、修正されました

「いいね!」 1

インターフェースでアイテムを並べ替えることはできますか?

例えば、これはeasy footer theme componentのオブジェクト設定エディタです。現時点では何も並べ替えることができません。

「いいね!」 4

私もこの機能をお願いしたかったです!:+1:


ちなみに、最初の投稿に identifier プロパティに関する情報が含まれていると役立ちます。

上記の Nolo の画像を見るまで、デフォルトの子ラベルをプロパティ値に置き換えることは不可能だと思っていました。コードを見た後、identifier プロパティを見つけました。

「いいね!」 4

並べ替えは、確かに内部でも提起されていることです。今週中に実装できるよう試みます。

承知しました。最初の投稿を identifier プロパティについて更新します。

「いいね!」 4

はい、(まもなく廃止される?)JSONシステムを置き換えるには、古いインターフェイスと同等かそれ以上である必要があります。

順序付けも含まれます。

「いいね!」 1

他にサポートするフィールドタイプはありますか?

例えば:

  • Markdown形式のlong_string。ツールバーをカスタマイズできるかもしれません。
  • dateフィールド(検証ルール付き)。
  • colorフィールド(検証ルール付き)?
「いいね!」 1

現在のところ予定はありませんが、有用であることには同意します。私自身もiconフィールドが欲しいです。

「いいね!」 7

私の経験では、これは保存されたプリセットのように機能するようです。この例では、最初の2つのエントリはこれらのプリセットから恩恵を受けることができますが、それ以降はすべて新しいエントリが最初は空白で表示されます。

これは、フィールドごとにデフォルト値を設定できないことも意味します。たとえば、チェックボックスを開始時にチェックされた状態にしたい場合、それはできません。

links:
  type: objects
  default:
    - name: link 1
      title: link 1 title
    - name: link 2
      title: link 2 title
  schema:
    name: link
    properties:
      is_active:
        type: boolean
        default: true

default: true は、期待どおりには機能しません。

作成された各エントリのフィールドごとにデフォルト値を設定する方法はありますか?

Sassでオブジェクトプロパティを変数にインポートする方法はありますか?

文字列を解析することはいつでも可能ですが、そのように宣伝するのはあまり良い考えではないように思えますね。:sweat_smile:

「いいね!」 1

例を共有していただきありがとうございます!確かに…あまり魅力的には見えませんね :upside_down_face:

「いいね!」 1

ちなみに、あまり時間をかけずに調べてみたのですが、この件はどこまで進んでいますか?

「いいね!」 2

はい、あまり良くないですね。やめましょう。:smile: 可能性を確認するための試みでしたが、合理的なアプローチではありませんでした。
私も同感です。直接的な方法があるといいですね!:+1:

私も知りたいです!
また、もし私が正しければ、それはjson_schemaとの機能パリティにおける唯一の不足機能になるでしょう。

「いいね!」 2

アップロードタイプが利用可能であると思って探していましたが、利用できませんでした。
コアをざっと見たところ、トピック、投稿、アップロードタイプはサーバーサイドで実装されているものの、フロントエンドでは実装されていないことがわかりました。何か特別な理由があるのでしょうか? :thinking: